#interface #metadata #token #instructions #mint #authority #token-metadata

solarti-token-metadata-interface

Solarti 程序库代币元数据接口

5 个版本

0.2.4 2024年3月29日
0.2.3 2023年12月24日
0.2.2 2023年11月19日
0.2.1 2023年11月18日
0.2.0 2023年11月15日

#147 in 神奇豆

Download history 152/week @ 2024-04-20 140/week @ 2024-04-27 147/week @ 2024-05-04 135/week @ 2024-05-11 133/week @ 2024-05-18 173/week @ 2024-05-25 184/week @ 2024-06-01 116/week @ 2024-06-08 135/week @ 2024-06-15 160/week @ 2024-06-22 34/week @ 2024-06-29 36/week @ 2024-07-06 193/week @ 2024-07-13 103/week @ 2024-07-20 113/week @ 2024-07-27 109/week @ 2024-08-03

518 次每月下载
用于 67 个crate (4 直接)

Apache-2.0

155KB
2.5K SLoC

代币元数据接口

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

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

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

示例程序

即将推出!

动机

Solana 上的代币创建者需要各种功能来处理他们的代币元数据,而 Metaplex 代币元数据程序一直是所有元数据需求的唯一地方,导致了一个功能丰富的程序,但仍可能无法满足所有需求。

在基础层面,代币元数据是一组与特定代币铸造相关的数据字段,因此我们提出了一个接口,它为最简单的基例提供了一些与现有解决方案的兼容性。

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

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

所需指令

以下所有指令均在源代码中详细列出。一旦确定接口,源代码中的信息将复制到这里。

初始化

初始化具有更新权限、名称、符号和URI的账户中的token-metadata TLV条目。

必须提供一个Solarti代币铸造,并由铸造权限方签名。

更新字段

更新token-metadata账户中的字段。这可能是一个现有字段或全新的字段。

必须由更新权限方签名。

移除密钥

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

必须由更新权限方签名。

更新权限

设置或取消设置token-metadata更新权限,该权限将签署任何未来的元数据更新。

必须由更新权限方签名。

发出

按照期望的TokenMetadata状态格式发出token-metadata。尽管实现使用确切状态的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条目。

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

依赖关系

~21–30MB
~480K SLoC