# Bank Pallet A pallet for handling financial systems of investment, loans, etc. - [`Config`] - [`Call`] ## Overview Anyone can open FD (Fixed Deposit) by reserving some amount of currency with allowed maturity period. The FD principal amount has to be within the range of `min_fd_amount` & `max_fd_amount` (set by admin). The FD amount is reserved from the user's `free_balance`. During the FD period, the reserved amount cannot be used that's why need to be freed from the `free_balance`. In order to receive interest, FD can only be closed after the `fd_epoch` (set by admin) is elapsed, else the reserved amount is returned to the user without any interest as per the premature withdrawal facility and a penalty (0.5-1%) is charged. The `penalty_rate` is data persistent & set by the root origin. But, if the FD is closed after individual FD vault's `maturity_period` (set during opening), then the reserved amount is returned to the user with accrued interest. The `interest_rate` is stored & set by the root origin. The accrued interest comes from a treasury 💎 account which is funded by the root origin. And the treasury account is funded via network's inflation or balance slashing of the user in case of malicious activity. NOTE: The runtime must include the `Balances` pallet to handle the accounts and balances for your chain. It has been shown as a [dev-dependencies] in the `Cargo.toml` file. ## Interface ### Dispatchable Functions - `set_fd_params` - `set_treasury` - `open_fd` - `close_fd` - `lock_for_membership` - `unlock_for_membership` ## Build Check if the dependencies are working properly: ```sh $ cargo check -p node-template-runtime ``` Build the runtime's WASM binary with the following command: ```sh $ cargo build -r ``` ## Test To run all the tests in a pallet: ```sh $ cargo test -p pallet-bank ``` --- To run the individual test: ```sh # example $ cargo test -p pallet-bank --lib -- tests::it_works_for_default_value ``` Although there is a button shown above to run individual test in VSCode. ## Benchmark ## Run Run a relaychain node (w/o debug mode): ```sh $ ./target/release/node-template --dev ``` In debug mode, run a relaychain node: ```sh $ RUST_LOG=runtime=debug ./target/release/node-template --dev ```