56 个版本 (35 个主要版本更新)

38.0.0 2024 年 7 月 18 日
37.0.0 2024 年 7 月 12 日
36.0.0 2024 年 6 月 24 日
35.0.0 2024 年 5 月 23 日
2.0.0-alpha.52020 年 3 月 24 日

1446神奇豆

Download history 3987/week @ 2024-04-16 3896/week @ 2024-04-23 3280/week @ 2024-04-30 3123/week @ 2024-05-07 3545/week @ 2024-05-14 3553/week @ 2024-05-21 3825/week @ 2024-05-28 3093/week @ 2024-06-04 2691/week @ 2024-06-11 3296/week @ 2024-06-18 3667/week @ 2024-06-25 1338/week @ 2024-07-02 2982/week @ 2024-07-09 3846/week @ 2024-07-16 3087/week @ 2024-07-23 2848/week @ 2024-07-30

12,977 每月下载量
用于 170 个包(直接使用 113 个)

Apache-2.0

2MB
40K SLoC

余额模块

余额模块提供了处理账户和余额的功能。

概述

余额模块提供以下功能:

  • 获取和设置自由余额。
  • 检索总余额、预留余额和非预留余额。
  • 将预留余额转回到一个存在的受益人账户。
  • 在账户之间转账余额(非预留情况下)。
  • 削减账户余额。
  • 创建和删除账户。
  • 管理总发行量。
  • 设置和管理锁定。

术语

  • 存在性存款:创建或保持账户开放所需的最小余额。这防止了“灰尘账户”填满存储空间。当免费余额加上保留余额(即总余额)低于此值时,则称账户已死亡;并且它失去了其功能以及所有先前历史,并且所有信息都将从链的状态中删除。任何账户的总余额都不应在0和存在性存款之间(不包括0)严格。

  • 总发行量:一个系统中存在的单位总数。

  • 收割账户:通过重置nonce来删除账户的行为。在其总余额变为零(或者,严格来说,小于存在性存款)之后发生。

  • 免费余额:不属于保留部分的余额。免费余额是大多数操作中唯一重要的余额。

  • 保留余额:保留余额仍然属于账户持有者,但处于暂停状态。保留余额仍然可以被削减,但只能在所有免费余额被削减之后。

  • 不平衡:在某些资金被贷记或借记而没有相等的相反会计(即总发行量与账户余额之间的差异)的情况。导致不平衡的功能将返回一个可以管理于你的运行时逻辑中的 Imbalance 特质对象。(如果不平衡简单地被丢弃,它应该自动维护诸如总发行量之类的任何簿记。)

  • 锁定:在指定块号之前,冻结账户的指定金额的免费余额。多个锁定总是作用于同一资金,因此它们“覆盖”而不是“堆叠”。

实现

平衡模块提供了以下特质的实现。如果这些特质提供了您需要的功能,则可以避免与平衡模块耦合。

  • Currency:处理可交换资产系统的函数。
  • ReservableCurrency:处理可以从账户中保留的资产的函数。
  • LockableCurrency:处理允许流动性限制的账户的函数。
  • Imbalance:处理系统总发行量与账户余额之间不平衡的函数。在创建新资金(例如,奖励)或销毁某些资金(例如,系统费用)时必须使用。
  • IsDeadAccount:确定器,用于判断给定的账户是否未使用。

接口

可调用函数

  • transfer - 将一些流动免费余额转移到另一个账户。
  • force_set_balance - 设置指定账户的余额。此调用的来源必须是root。

用法

以下示例显示了如何在您的自定义模块中使用平衡模块。

FRAME示例

合同模块使用 Currency 特质来处理燃气付款,并且其类型从 Currency 继承。

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;

质押模块使用 LockableCurrency 特质来锁定托管账户的资金。

use frame_support::traits::{WithdrawReasons, LockableCurrency};
use sp_runtime::traits::Bounded;
pub trait Config: frame_system::Config {
	type Currency: LockableCurrency<Self::AccountId, Moment=frame_system::pallet_prelude::BlockNumberFor<Self>>;
}

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

依赖关系

~17–32MB
~541K SLoC