54 个版本 (重大变更)
39.0.0 | 2024年7月18日 |
---|---|
37.0.0 | 2024年7月12日 |
36.0.0 | 2024年6月21日 |
35.0.0 | 2024年5月23日 |
2.0.0-alpha.5 | 2020年3月24日 |
#3 in #pallet
5,215 每月下载量
用于 45 个包(20 个直接使用)
2.5MB
47K SLoC
资产模块
一个简单、安全的处理可互换资产的模块。
概述
资产模块提供对具有固定供应量的可互换资产类别的资产管理功能,包括
- 资产发行
- 资产转移
- 资产销毁
要在您的运行时中使用它,您需要实现资产的 assets::Config
。
支持的调度函数在 assets::Call
枚举中进行了文档说明。
术语
- 资产发行:创建一个新资产,其总供应量将属于发行该资产的账户。
- 资产转移:将资产从一个账户转移到另一个账户的操作。
- 资产销毁:账户销毁其持有的所有资产的过程。
- 可互换资产:其单位可以互换的资产。
- 非同质化资产:每个单位具有独特特征的资产。
目标
Substrate中的资产系统旨在实现以下功能:
- 向其创作者的账户发行独特的资产。
- 在账户之间转移资产。
- 当账户所有者请求时,移除账户的资产余额并更新资产的总供应量。
接口
可调用的函数
issue
- 向调用该函数的账户发行新同质化资产的总供应量。transfer
- 将同质化资产id
的amount
单位从调用者账户(origin
)转移到目标账户target
。destroy
- 销毁与调用该函数的账户关联的同质化资产id
的全部持有量。
请参阅Call
枚举及其相关变体以获取每个函数的文档。
公共函数
balance
- 获取账户who
的资产id
余额。total_supply
- 获取资产id
的总供应量。
请参阅Pallet
结构以获取有关公共函数的详细信息。
使用方法
以下示例展示了如何通过公开函数在您的运行时中使用资产模块:
- 为代币分发事件(空投)发行新的同质化资产。
- 查询账户的同质化资产持有余额。
- 查询已发行的同质化资产的总供应量。
先决条件
导入资产模块和类型,并从资产模块特征派生您的运行时配置特征。
简单的代码片段
use pallet_assets as assets;
use sp_runtime::ArithmeticError;
#[frame_support::pallet]
pub mod pallet {
use super::*;
use frame_support::pallet_prelude::*;
use frame_system::pallet_prelude::*;
#[pallet::pallet]
pub struct Pallet<T>(_);
#[pallet::config]
pub trait Config: frame_system::Config + assets::Config {}
#[pallet::call]
impl<T: Config> Pallet<T> {
pub fn issue_token_airdrop(origin: OriginFor<T>) -> DispatchResult {
let sender = ensure_signed(origin)?;
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(), ArithmeticError::DivisionByZero);
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(Event::Issued(asset_id, sender, TOKENS_FIXED_SUPPLY));
Ok(())
}
}
}
假设
以下是在使用此模块时必须持有的假设。如果其中任何一个被违反,则此模块的行为是未定义的。
- 资产的总数应小于
Config::AssetId::max_value()
。
相关模块
许可证:Apache-2.0
依赖关系
~17–32MB
~536K SLoC