显示包…

1 个稳定版本

2.0.1 2021年4月4日

#2 in #tetcore

Download history 107/week @ 2024-04-25 109/week @ 2024-05-02 117/week @ 2024-05-09 110/week @ 2024-05-16 102/week @ 2024-05-23 102/week @ 2024-05-30 60/week @ 2024-06-06 80/week @ 2024-06-13 128/week @ 2024-06-20 48/week @ 2024-06-27 29/week @ 2024-07-04 110/week @ 2024-07-11 106/week @ 2024-07-18 92/week @ 2024-07-25 114/week @ 2024-08-01 63/week @ 2024-08-08

402 每月下载量
41 个包中使用 (直接使用 36 个)

Apache-2.0

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