Icon Link元数据功能

有关资产库元数据功能的实现细节,请参阅Sway Libs 文档 Icon Link

Icon Link导入资产库元数据功能

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

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

```sway {{#include ../../../../examples/asset/metadata_docs/src/main.sw:import}} ```

Icon Link与 SRC-7 标准的集成

SR-7 Icon Link定义了 Fuel 上的任何原生资产所需的 ABI 实现如下:

```sway {{#include ../../../../examples/asset/metadata_docs/src/main.sw:src7_abi}} ```

资产库为SR-7 Icon Link标准提供了以下补充数据类型:

  • StorageMetadata

提供了以下附加功能,用于SR-7 Icon LinkMetadata 类型:

  • as_string()
  • is_string()
  • as_u64()
  • is_u64()
  • as_bytes()
  • is_bytes()
  • as_b256()
  • is_b256()

Icon Link设置存储

导入后,应该可以使用资产库的元数据功能。要使用它们,请确保将下面的存储块添加到您的合约中,以启用SR-7 Icon Link标准。

```sway {{#include ../../../../examples/asset/metadata_docs/src/main.sw:src7_storage}} ```

Icon Link使用 StorageMetadata 类型

Icon Link设置元数据

要为资产设置一些元数据,请使用资产库提供的 SetAssetMetadata ABI。请务必遵循您的 keySR-9 Icon Link标准。建议结合使用Ownership 库 SetAssetMetadata ABI,以确保只有一个用户有权限设置资产的元数据。

```sway {{#include ../../../../examples/asset/setting_src7_attributes/src/main.sw:setting_src7_attributes}} ```

Icon InfoCircle

注意 _set_metadata() 函数将无条件设置资产的元数据。应用外部检查以限制元数据的设置。

Icon Link使用 StorageMetadata 实现 SRC-7 标准

要使用 StorageMetadata 类型,只需使用关联的 keyAssetId 获取存储的元数据。下面的示例显示了在没有用户定义的限制或自定义功能的情况下,与资产库的 StorageMetadata 类型结合使用的SR-7 Icon Link标准的实现。

```sway {{#include ../../../../examples/asset/basic_src7/src/main.sw:basic_src7}} ```

Icon Link使用 Metadata 扩展

SR-7 Icon Link标准定义的 Metadata 类型可以是以下 4 种状态之一:

pub enum Metadata {
    B256: b256,
    Bytes: Bytes,
    Int: u64,
    String: String,
}

资产库为 Metadata 类型提供了以下功能:

Icon Linkis_b256()as_b256()

is_b256() 检查使您能够检查 Metadata 类型是否为 b256as_b256() 返回 Metadata 类型的 b256

fn b256_type(my_metadata: Metadata) {
    assert(my_metadata.is_b256());
 
    let my_b256: b256 = my_metadata.as_b256().unwrap();
}

Icon Linkis_bytes()as_bytes()

is_bytes() 检查使您能够检查 Metadata 类型是否为 Bytesas_bytes() 返回 Metadata 类型的 Bytes

fn bytes_type(my_metadata: Metadata) {
    assert(my_metadata.is_bytes());
 
    let my_bytes: Bytes = my_metadata.as_bytes().unwrap();
}

Icon Linkis_u64()as_u64()

is_u64() 检查使您能够检查 Metadata 类型是否为 u64as_u64() 返回 Metadata 类型的 u64

fn u64_type(my_metadata: Metadata) {
    assert(my_metadata.is_u64());
 
    let my_u64: u64 = my_metadata.as_u64().unwrap();
}

Icon Linkis_string()as_string()

is_string() 检查使您能够检查 Metadata 类型是否为 Stringas_string() 返回 Metadata 类型的 String

fn string_type(my_metadata: Metadata) {
    assert(my_metadata.is_string());
 
    let my_string: String = my_metadata.as_string().unwrap();
}