有关资产库供应功能的实现详细信息,请参阅Sway Libs 文档 。
要使用资产库,必须将 Sway Libs 和Sway Standards 添加到Forc.toml
文件中,然后导入到您的 Sway 项目中。要将 Sway Libs 添加为项目的依赖项,请参阅入门 。要添加 Sway Standards 作为依赖项,请参阅Sway Standards Book 。
要导入资产库供应功能和SRC-3 标准到您的 Sway 智能合约,请在您的 Sway 文件中添加以下内容:
use sway_libs::asset::supply::*;
use standards::src3::*;
SCR-3 定义规定了 Fuel 上任何原生资产都必须实现以下 abi:它们用于铸造和销毁代币。
abi SRC3 {
#[storage(read, write)]
fn mint(recipient: Identity, vault_sub_id: SubId, amount: u64);
#[payable]
#[storage(read, write)]
fn burn(vault_sub_id: SubId, amount: u64);
}
资产库为SRC3
abi 中的每个函数提供了以下补充功能:
_mint()
_burn()
注意
_mint()
和_burn()
函数将无条件铸造和销毁资产。应应用外部检查以限制资产的铸造和销毁。
一旦导入,资产库的供应功能应该可用。要使用它们,请确保将下面的存储块添加到启用SCR-3 标准的合约中。
storage {
total_assets: u64 = 0,
total_supply: StorageMap<AssetId, u64> = StorageMap {},
}
要使用基本功能,只需传递预先定义的存储块中的StorageKey
。下面的示例展示了如何将SCR-3 标准与资产库结合使用,而不定义用户限制或自定义功能。建议与资产库的供应功能一起使用Ownership Library ,以确保只有一个用户具有铸造资产的权限。
use sway_libs::asset::supply::{_burn, _mint};
use standards::src3::SRC3;
storage {
total_assets: u64 = 0,
total_supply: StorageMap<AssetId, u64> = StorageMap {},
}
// Implement the SRC-3 Standard for this contract
impl SRC3 for Contract {
#[storage(read, write)]
fn mint(recipient: Identity, sub_id: SubId, amount: u64) {
// Pass the StorageKeys to the `_mint()` function from the Asset Library.
_mint(
storage
.total_assets,
storage
.total_supply,
recipient,
sub_id,
amount,
);
}
// Pass the StorageKeys to the `_burn_()` function from the Asset Library.
#[payable]
#[storage(read, write)]
fn burn(sub_id: SubId, amount: u64) {
_burn(storage.total_supply, sub_id, amount);
}
}
注意
_mint()
和_burn()
函数将无条件铸造和销毁资产。应应用外部检查以限制资产的铸造和销毁。