显示包…
1 个稳定版本
2.0.1 | 2021年4月4日 |
---|
#2 in #tetcore
402 每月下载量
在 41 个包中使用 (直接使用 36 个)
1.5MB
26K SLoC
平衡模块
平衡模块提供了处理账户和余额的功能。
概述
平衡模块提供了以下功能
- 获取和设置自由余额。
- 检索总余额、保留余额和非保留余额。
- 将保留余额返回给存在的受益人账户。
- 在账户之间转移余额(当不保留时)。
- 削减账户余额。
- 账户创建和删除。
- 管理总发行量。
- 设置和管理锁定。
术语
-
存在性存款:创建或保持账户开放所需的最小余额。这防止了“灰尘账户”填满存储。当自由余额加上保留余额(即总余额)低于此值时,则称账户已死亡;并且它将失去其功能,以及所有先前的历史和相关信息将从链状态中删除。任何账户的总余额都不应严格位于0和存在性存款之间(不包括)。如果发生这种情况,则表明此模块中存在错误或对存储的原始错误修改。
-
总发行量:系统中存在的单位总数。
-
收割账户:通过重置其nonce移除账户的行为。发生在其总余额变为零(或,严格来说,小于存在性存款)之后。
-
自由余额:不属于保留的余额部分。自由余额是大多数操作中唯一重要的余额。
-
保留余额:保留余额仍然属于账户持有人,但已暂停。保留余额仍然可以削减,但只有在所有自由余额被削减之后才能进行。
-
不平衡:某些资金被借记或贷记,但没有进行等量相反的会计(即总发行量与账户余额之间的差异)。导致不平衡的函数将返回一个实现了
Imbalance
特质的对象,可以在您的运行时逻辑中进行管理。如果简单地丢弃不平衡,它应自动维护任何簿记,例如总发行量。 -
锁定:对账户自由余额中指定金额的冻结,直到指定区块号。多个锁定总是操作相同的资金,因此它们是“覆盖”而不是“堆叠”。
实现
余额模块提供了以下特质的实现。如果这些特质提供了您需要的功能,那么您可以避免与余额模块耦合。
Currency
:处理可交换资产系统的函数。ReservableCurrency
:处理可以从账户中预留的资产的函数。LockableCurrency
:处理允许流动性限制的账户的函数。Imbalance
:处理系统中总发行量与账户余额之间不平衡的函数。在创建新资金(例如,奖励)或销毁一些资金(例如,系统费用)时必须使用。IsDeadAccount
:确定器,用于判断给定的账户是否未使用。
接口
可调度函数
transfer
- 将一些流动自由余额转移到另一个账户。set_balance
- 设置指定账户的余额。此调用的来源必须是root。
用法
以下示例显示了如何在自定义模块中使用余额模块。
FABRIC示例
合同模块使用Currency
特质来处理燃气付款,并且其类型继承自Currency
。
use fabric_support::traits::Currency;
pub type BalanceOf<T> = <<T as Config>::Currency as Currency<<T as fabric_system::Config>::AccountId>>::Balance;
pub type NegativeImbalanceOf<T> = <<T as Config>::Currency as Currency<<T as fabric_system::Config>::AccountId>>::NegativeImbalance;
质押模块使用LockableCurrency
特质来锁定存档账户的资金。
use fabric_support::traits::{WithdrawReasons, LockableCurrency};
use tp_runtime::traits::Bounded;
pub trait Config: fabric_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.
}
创世配置
余额模块依赖于GenesisConfig
。
假设
- 所有账户的总发行余额应小于
Config::Balance::max_value()
。
许可证:Apache-2.0
依赖关系
~3–13MB
~148K SLoC