显示crate…
1个稳定版本
2.0.1 | 2021年4月4日 |
---|
#5 在 #tetcore
37 每月下载量
在 8 个crate中使用了它(通过 node-runtime)
1.5MB
25K SLoC
资产模块
一个用于处理可互换资产的简单、安全模块。
概述
资产模块提供功能,用于管理具有固定供应的可互换资产类,包括
- 资产发行
- 资产转让
- 资产销毁
要在您的运行时中使用它,您需要实现资产 assets::Trait
。
支持的派发函数在 assets::Call
枚举中有文档说明。
术语
- 资产发行:创建一个新资产,其总供应量将属于发行该资产的账户。
- 资产转让:将资产从某一账户转移到另一账户的行为。
- 资产销毁:账户移除其持有的全部资产的过程。
- 可互换资产:其单位可互换的资产。
- 不可互换资产:每个单位具有独特特征的资产。
目标
Tetcore中的资产系统旨在实现以下目标
- 向其创建者的账户发行一个独特的资产。
- 在账户之间移动资产。
- 当账户所有者请求时,移除账户的资产余额并更新资产的总供应量。
接口
派发函数
issue
- 向函数调用者的账户发行新可互换资产的总供应量。transfer
- 将可互换资产id
的amount
单位从函数调用者的账户余额(origin
)转移到目标账户target
。destroy
- 销毁与调用函数的账户关联的可互换资产id
的全部持有量。
请参阅Call
枚举及其相关变体,以获取每个函数的文档说明。
公共函数
balance
- 获取who
的资产id
余额。total_supply
- 获取资产id
的总供应量。
请参阅Module
结构体以了解公开可用函数的详细信息。
用法
以下示例显示了如何通过公开函数在您的运行时中使用资产模块:
- 为代币分发活动(空投)发行新的可替换资产。
- 查询账户的可替换资产持有余额。
- 查询已发行的某个可替换资产的总供应量。
先决条件
导入资产模块和类型,并从资产模块特质派生您运行时的配置特质。
简单代码片段
use noble_assets as assets;
use fabric_support::{decl_module, dispatch, ensure};
use fabric_system::ensure_signed;
pub trait Config: assets::Config { }
decl_module! {
pub struct Module<T: Config> for enum Call where origin: T::Origin {
pub fn issue_token_airdrop(origin) -> dispatch::DispatchResult {
let sender = ensure_signed(origin).map_err(|e| e.as_str())?;
const ACCOUNT_ALICE: u64 = 1;
const ACCOUNT_BOB: u64 = 2;
const COUNT_AIRDROP_RECIPIENTS: u64 = 2;
const TOKENS_FIXED_SUPPLY: u64 = 100;
ensure!(!COUNT_AIRDROP_RECIPIENTS.is_zero(), "Divide by zero error.");
let asset_id = Self::next_asset_id();
<NextAssetId<T>>::mutate(|asset_id| *asset_id += 1);
<Balances<T>>::insert((asset_id, &ACCOUNT_ALICE), TOKENS_FIXED_SUPPLY / COUNT_AIRDROP_RECIPIENTS);
<Balances<T>>::insert((asset_id, &ACCOUNT_BOB), TOKENS_FIXED_SUPPLY / COUNT_AIRDROP_RECIPIENTS);
<TotalSupply<T>>::insert(asset_id, TOKENS_FIXED_SUPPLY);
Self::deposit_event(RawEvent::Issued(asset_id, sender, TOKENS_FIXED_SUPPLY));
Ok(())
}
}
}
假设
以下是在使用此模块时必须遵守的假设。如果违反其中任何一项,此模块的行为是未定义的。
- 资产的总量应小于
Config::AssetId::max_value()
。
相关模块
许可:Apache-2.0
依赖
~3–12MB
~130K SLoC