5 个不稳定版本

0.4.0 2024年6月25日
0.3.5 2024年7月11日
0.3.3 2024年3月28日
0.2.1 2024年2月5日
0.2.0 2023年9月1日

9#mint 中排名

Download history 28770/week @ 2024-05-03 28410/week @ 2024-05-10 25481/week @ 2024-05-17 24703/week @ 2024-05-24 30827/week @ 2024-05-31 30861/week @ 2024-06-07 30684/week @ 2024-06-14 31806/week @ 2024-06-21 29602/week @ 2024-06-28 30170/week @ 2024-07-05 28531/week @ 2024-07-12 32281/week @ 2024-07-19 36017/week @ 2024-07-26 52112/week @ 2024-08-02 41200/week @ 2024-08-09 35192/week @ 2024-08-16

每月下载量 171,533
453 包(直接使用 20 个)中使用

Apache-2.0

160KB
2.5K SLoC

代币元数据接口

描述程序实现所需指令的接口,使其被视为用于SPL代币铸造的“代币元数据”程序。任何程序都可以实现此接口。

有了公共接口,任何钱包、dapp或链上程序都可以读取元数据,任何创建或修改元数据的工具都可以与实现接口的任何程序协同工作。

还有一个可选实现的 TokenMetadata 结构,但它不是必需的,因为存在 Emit 指令,索引器和其他链外用户可以调用此指令来获取元数据。

示例程序

即将推出!

动机

Solana上的代币创建者需要为他们的代币元数据提供各种功能,而Metaplex Token-Metadata程序一直是满足所有元数据需求的唯一场所,导致了一个功能丰富的程序,但仍可能无法满足所有需求。

从本质上讲,代币元数据是与特定代币铸造相关的一组数据字段,因此我们提出了一个接口,它可以满足最简单的基线,并具有一定的与现有解决方案的兼容性。

在实施此方案后,可交换和非可交换代币创建者将有两个选择

  • 在其自己的程序中实现接口,这样他们最终可以扩展它以添加新功能或甚至其他接口
  • 使用实现最简单情况的参考程序

所需指令

以下所有指令在源代码中都有更详细的说明。一旦确定接口,源代码中的信息将被复制到这里。

初始化

初始化具有更新权限的账户中的令牌元数据TLV条目,包括名称、符号和URI。

必须提供SPL令牌铸造并由铸造权限签名。

更新字段

更新令牌元数据账户中的一个字段。这可能是一个现有字段或全新的字段。

必须由更新权限签名。

移除密钥

取消设置键值对,清除现有条目。

必须由更新权限签名。

更新权限

设置或取消设置令牌元数据更新权限,该权限将签名任何未来的元数据更新。

必须由更新权限签名。

发射

以预期的TokenMetadata状态格式发射令牌元数据。虽然实现使用确切状态的struct是可选的,但此指令是必需的。

(可选) 状态

实现该接口的程序可能将以下数据字段写入账户的类型-长度-值条目中

type Pubkey = [u8; 32];
type OptionalNonZeroPubkey = Pubkey; // if all zeroes, interpreted as `None`

pub struct TokenMetadata {
    /// The authority that can sign to update the metadata
    pub update_authority: OptionalNonZeroPubkey,
    /// The associated mint, used to counter spoofing to be sure that metadata
    /// belongs to a particular mint
    pub mint: Pubkey,
    /// The longer name of the token
    pub name: String,
    /// The shortened symbol for the token
    pub symbol: String,
    /// The URI pointing to richer metadata
    pub uri: String,
    /// Any additional metadata about the token as key-value pairs. The program
    /// must avoid storing the same key twice.
    pub additional_metadata: Vec<(String, String)>,
}

通过将元数据存储在TLV结构中,实现该接口的开发者可以在程序中自由添加任何其他数据字段,存放在不同的TLV条目中。

您可以在spl-type-length-value 仓库中找到有关TLV/类型-长度-值结构体的更多信息。

依赖项

~16–24MB
~341K SLoC