显示crate…

1个稳定版本

2.0.1 2021年4月4日

#5#tetcore

37 每月下载量
8 个crate中使用了它(通过 node-runtime

Apache-2.0

1.5MB
25K SLoC

资产模块

一个用于处理可互换资产的简单、安全模块。

概述

资产模块提供功能,用于管理具有固定供应的可互换资产类,包括

  • 资产发行
  • 资产转让
  • 资产销毁

要在您的运行时中使用它,您需要实现资产 assets::Trait

支持的派发函数在 assets::Call 枚举中有文档说明。

术语

  • 资产发行:创建一个新资产,其总供应量将属于发行该资产的账户。
  • 资产转让:将资产从某一账户转移到另一账户的行为。
  • 资产销毁:账户移除其持有的全部资产的过程。
  • 可互换资产:其单位可互换的资产。
  • 不可互换资产:每个单位具有独特特征的资产。

目标

Tetcore中的资产系统旨在实现以下目标

  • 向其创建者的账户发行一个独特的资产。
  • 在账户之间移动资产。
  • 当账户所有者请求时,移除账户的资产余额并更新资产的总供应量。

接口

派发函数

  • issue - 向函数调用者的账户发行新可互换资产的总供应量。
  • transfer - 将可互换资产 idamount 单位从函数调用者的账户余额(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