mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 08:47:57 +00:00
5d81f23f8f
* First reworking of fungibles API * New API and docs * More fungible::* API improvements * New ref-counting logic for old API * Missing files * Fixes * Use the new transfer logic * Use fungibles for the dispatchables * Use shelve/restore names * Locking works with total balance. * repotting and removal * Separate Holds from Reserves * Introduce freezes * Missing files * Tests for freezing * Fix hold+freeze combo * More tests * Fee-free dispatchable for upgrading accounts * Benchmarks and a few fixes * Another test * Docs and refactor to avoid blanket impls * Repot * Fit out ItemOf fully * Add events to Balanced traits * Introduced events into Hold traits * Fix Assets pallet tests * Assets benchmarks pass * Missing files and fixes * Fixes * Fixes * Benchmarks fixes * Fix balance benchmarks * Formatting * Expose fungible sub modules * Move NIS to fungible API * Fix broken impl and add test * Fix tests * API for `transfer_and_hold` * Use composite APIs * Formatting * Upgraded event * Fixes * Fixes * Fixes * Fixes * Repot tests and some fixed * Fix some bits * Fix dust tests * Rename `set_balance` - `Balances::set_balance` becomes `Balances::force_set_balance` - `Unbalanced::set_balance` becomes `Unbalances::write_balance` * becomes * Move dust handling to fungibles API * Formatting * Fixes and more refactoring * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Use reducible_balance for better correctness on fees * Reducing hold to zero should remove entry. * Add test * Docs * Update frame/support/src/traits/tokens/fungibles/hold.rs Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> * Update frame/support/src/traits/tokens/fungibles/regular.rs Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> * Update frame/support/src/traits/tokens/fungible/hold.rs Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> * Update frame/support/src/traits/tokens/fungible/regular.rs Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> * Docs * Docs * Docs * Fix NIS benchmarks * Doc comment * Remove post_mutation * Fix some tests * Fix some grumbles * Enumify bool args to fungible(s) functions * Fix up assets and balances * Formatting * Fix contracts * Fix tests & benchmarks build * Typify minted boolean arg * Typify on_hold boolean arg; renames * Fix numerous tests * Fix dependency issue * Privatize dangerous API mutate_account * Fix contracts (@alext - please check this commit) * Remove println * Fix tests for contracts * Fix broken rename * Fix broken rename * Fix broken rename * Docs * Update frame/support/src/traits/tokens/fungible/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * remove from_ref_time * Update frame/executive/src/lib.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/executive/src/lib.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Reenable test * Update frame/support/src/traits/tokens/fungibles/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/currency.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/lottery/src/tests.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/mod.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/regular.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungibles/freeze.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/regular.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungibles/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungibles/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungibles/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Rename UnwantedRemoval to UnwantedAccountRemoval * Docs * Formatting * Update frame/balances/src/lib.rs Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Update primitives/runtime/src/lib.rs Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> * handle_raw_dust oes nothing * Formatting * Fixes * Grumble * Fixes * Add test * Add test * Tests for reducible_balance * Fixes * Fix Salary * Fixes * Disable broken test * Disable nicely * Fixes * Fixes * Fixes * Rename some events * Fix nomination pools breakage * Add compatibility stub for transfer tx * Reinstate a safely compatible version of Balances set_balance * Fixes * Grumble * Update frame/nis/src/lib.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_balances * disable flakey tests * Update frame/balances/src/lib.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Grumbles * Grumble --------- Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> Co-authored-by: Alexander Theißen <alex.theissen@me.com> Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: command-bot <>
123 lines
5.3 KiB
Markdown
123 lines
5.3 KiB
Markdown
# Balances Module
|
|
|
|
The Balances module provides functionality for handling accounts and balances.
|
|
|
|
- [`Config`](https://docs.rs/pallet-balances/latest/pallet_balances/pallet/trait.Config.html)
|
|
- [`Call`](https://docs.rs/pallet-balances/latest/pallet_balances/pallet/enum.Call.html)
|
|
- [`Pallet`](https://docs.rs/pallet-balances/latest/pallet_balances/pallet/struct.Pallet.html)
|
|
|
|
## Overview
|
|
|
|
The Balances module provides functions for:
|
|
|
|
- Getting and setting free balances.
|
|
- Retrieving total, reserved and unreserved balances.
|
|
- Repatriating a reserved balance to a beneficiary account that exists.
|
|
- Transferring a balance between accounts (when not reserved).
|
|
- Slashing an account balance.
|
|
- Account creation and removal.
|
|
- Managing total issuance.
|
|
- Setting and managing locks.
|
|
|
|
### Terminology
|
|
|
|
- **Existential Deposit:** The minimum balance required to create or keep an account open. This prevents
|
|
"dust accounts" from filling storage. When the free plus the reserved balance (i.e. the total balance)
|
|
fall below this, then the account is said to be dead; and it loses its functionality as well as any
|
|
prior history and all information on it is removed from the chain's state.
|
|
No account should ever have a total balance that is strictly between 0 and the existential
|
|
deposit (exclusive). If this ever happens, it indicates either a bug in this module or an
|
|
erroneous raw mutation of storage.
|
|
|
|
- **Total Issuance:** The total number of units in existence in a system.
|
|
|
|
- **Reaping an account:** The act of removing an account by resetting its nonce. Happens after its
|
|
total balance has become zero (or, strictly speaking, less than the Existential Deposit).
|
|
|
|
- **Free Balance:** The portion of a balance that is not reserved. The free balance is the only
|
|
balance that matters for most operations.
|
|
|
|
- **Reserved Balance:** Reserved balance still belongs to the account holder, but is suspended.
|
|
Reserved balance can still be slashed, but only after all the free balance has been slashed.
|
|
|
|
- **Imbalance:** A condition when some funds were credited or debited without equal and opposite accounting
|
|
(i.e. a difference between total issuance and account balances). Functions that result in an imbalance will
|
|
return an object of the `Imbalance` trait that can be managed within your runtime logic. (If an imbalance is
|
|
simply dropped, it should automatically maintain any book-keeping such as total issuance.)
|
|
|
|
- **Lock:** A freeze on a specified amount of an account's free balance until a specified block number. Multiple
|
|
locks always operate over the same funds, so they "overlay" rather than "stack".
|
|
|
|
### Implementations
|
|
|
|
The Balances module provides implementations for the following traits. If these traits provide the functionality
|
|
that you need, then you can avoid coupling with the Balances module.
|
|
|
|
- [`Currency`](https://docs.rs/frame-support/latest/frame_support/traits/trait.Currency.html): Functions for dealing with a
|
|
fungible assets system.
|
|
- [`ReservableCurrency`](https://docs.rs/frame-support/latest/frame_support/traits/trait.ReservableCurrency.html):
|
|
Functions for dealing with assets that can be reserved from an account.
|
|
- [`LockableCurrency`](https://docs.rs/frame-support/latest/frame_support/traits/trait.LockableCurrency.html): Functions for
|
|
dealing with accounts that allow liquidity restrictions.
|
|
- [`Imbalance`](https://docs.rs/frame-support/latest/frame_support/traits/trait.Imbalance.html): Functions for handling
|
|
imbalances between total issuance in the system and account balances. Must be used when a function
|
|
creates new funds (e.g. a reward) or destroys some funds (e.g. a system fee).
|
|
- [`IsDeadAccount`](https://docs.rs/frame-support/latest/frame_support/traits/trait.IsDeadAccount.html): Determiner to say whether a
|
|
given account is unused.
|
|
|
|
## Interface
|
|
|
|
### Dispatchable Functions
|
|
|
|
- `transfer` - Transfer some liquid free balance to another account.
|
|
- `force_set_balance` - Set the balances of a given account. The origin of this call must be root.
|
|
|
|
## Usage
|
|
|
|
The following examples show how to use the Balances module in your custom module.
|
|
|
|
### Examples from the FRAME
|
|
|
|
The Contract module uses the `Currency` trait to handle gas payment, and its types inherit from `Currency`:
|
|
|
|
```rust
|
|
use frame_support::traits::Currency;
|
|
|
|
pub type BalanceOf<T> = <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance;
|
|
pub type NegativeImbalanceOf<T> = <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::NegativeImbalance;
|
|
|
|
```
|
|
|
|
The Staking module uses the `LockableCurrency` trait to lock a stash account's funds:
|
|
|
|
```rust
|
|
use frame_support::traits::{WithdrawReasons, LockableCurrency};
|
|
use sp_runtime::traits::Bounded;
|
|
pub trait Config: frame_system::Config {
|
|
type Currency: LockableCurrency<Self::AccountId, Moment=Self::BlockNumber>;
|
|
}
|
|
|
|
fn update_ledger<T: Config>(
|
|
controller: &T::AccountId,
|
|
ledger: &StakingLedger<T>
|
|
) {
|
|
T::Currency::set_lock(
|
|
STAKING_ID,
|
|
&ledger.stash,
|
|
ledger.total,
|
|
WithdrawReasons::all()
|
|
);
|
|
// <Ledger<T>>::insert(controller, ledger); // Commented out as we don't have access to Staking's storage here.
|
|
}
|
|
```
|
|
|
|
## Genesis config
|
|
|
|
The Balances module depends on the [`GenesisConfig`](https://docs.rs/pallet-balances/latest/pallet_balances/pallet/struct.GenesisConfig.html).
|
|
|
|
## Assumptions
|
|
|
|
* Total issued balanced of all accounts should be less than `Config::Balance::max_value()`.
|
|
|
|
License: Apache-2.0
|