Icon Link供应功能

有关资产库供应功能的实现详细信息,请参阅Sway Libs 文档 Icon Link

Icon Link导入资产库供应功能

要使用资产库,必须将 Sway Libs 和Sway Standards Icon Link添加到Forc.toml文件中,然后导入到您的 Sway 项目中。要将 Sway Libs 添加为项目的依赖项,请参阅入门 。要添加 Sway Standards 作为依赖项,请参阅Sway Standards Book Icon Link

要导入资产库供应功能和SRC-3 Icon Link标准到您的 Sway 智能合约,请在您的 Sway 文件中添加以下内容:

use sway_libs::asset::supply::*;
use standards::src3::*;

Icon Link与 SRC-3 标准集成

SCR-3 Icon Link定义规定了 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()
Icon InfoCircle

注意 _mint()_burn() 函数将无条件铸造和销毁资产。应应用外部检查以限制资产的铸造和销毁。

Icon Link设置存储

一旦导入,资产库的供应功能应该可用。要使用它们,请确保将下面的存储块添加到启用SCR-3 Icon Link标准的合约中。

storage {
    total_assets: u64 = 0,
    total_supply: StorageMap<AssetId, u64> = StorageMap {},
}

Icon Link使用资产库实现 SRC-3 标准

要使用基本功能,只需传递预先定义的存储块中的StorageKey。下面的示例展示了如何将SCR-3 Icon Link标准与资产库结合使用,而不定义用户限制或自定义功能。建议与资产库的供应功能一起使用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);
    }
}
Icon InfoCircle

注意 _mint()_burn() 函数将无条件铸造和销毁资产。应应用外部检查以限制资产的铸造和销毁。