5 个不稳定版本

0.3.0 2024年6月25日
0.2.5 2024年7月11日
0.2.3 2024年3月28日
0.1.1 2024年2月5日
0.1.0 2023年10月24日

10#mint 中排名

Download history 26677/week @ 2024-05-05 27599/week @ 2024-05-12 21255/week @ 2024-05-19 24446/week @ 2024-05-26 27691/week @ 2024-06-02 29120/week @ 2024-06-09 27929/week @ 2024-06-16 31224/week @ 2024-06-23 26389/week @ 2024-06-30 30034/week @ 2024-07-07 28409/week @ 2024-07-14 33870/week @ 2024-07-21 34552/week @ 2024-07-28 53611/week @ 2024-08-04 37909/week @ 2024-08-11 31340/week @ 2024-08-18

每月下载量 159,900
442 软件包中使用(直接使用 16 个)

Apache-2.0

87KB
1.5K SLoC

令牌组接口

描述了程序需要实现的指令,以便被视为 SPL 令牌铸造的 "令牌组" 程序。任何程序都可以实现此接口。

具有通用接口,任何钱包、dapp 或链上程序都可以读取组或成员配置,任何创建或修改组或成员配置的工具都将与实现该接口的任何程序协同工作。

此接口与实现 SPL 令牌接口的任何程序兼容。但是,其他不是 SPL 令牌程序的程序实现可能与 SPL 令牌组程序兼容,前提是该程序的令牌标准支持适当的组件,例如铸造和铸造权限账户(请参阅 所需指令)。

还有 TokenGroupTokenGroupMember 结构体,这些结构体可以可选实现,但不是必需的。

示例程序

关于如何实现 SPL 令牌-组接口的示例程序可以在与该接口目录相邻的 示例 目录中找到。

除了展示令牌组程序可能的样子外,它还提供了一些使用 SPL 类型长度值库在账户数据中管理 TLV 编码数据的参考示例。

有关SPL类型长度值(Type Length Value)的更多信息,您可以参考库的源代码

动机

随着开发者们设计了更多创造性的方式来自定义代币并使用它们来驱动应用程序、社区等,依赖于通过链上映射内在相关联的代币的依赖性也在不断加强。

Token-group为开发者提供了创建这些关系映射所需的最小必要接口组件,允许实现可靠的组合性,同时也有权自定义这些代币组。

通过实现token-group,链上程序可以构建全新的代币组类型,这些代币组可以相互重叠并共享通用工具。

所需指令

以下所有指令都在源代码中进行了更详细的说明。

Initialize Group

在账户中初始化一个token-group TLV条目,用于具有提供的最大组大小和更新权限的组配置。

必须提供SPL代币铸造,并由铸造权限签名。

Update Group Max Size

更新组的最大大小限制。

必须由更新权限签名。

Update Group Authority

设置或取消设置token-group更新权限,该权限会签署任何未来的组配置更新。

必须由更新权限签名。

Initialize Member

在账户中初始化一个token-group TLV条目,用于组成员配置。

必须为组和组成员提供SPL代币铸造。

必须由成员铸造的铸造权限以及组的更新权限签名。

(可选) 状态

实现接口的程序可以将以下数据字段写入账户中的类型长度值条目。注意每个的类型区分符。

对于组

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

/// Type discriminant: [214, 15, 63, 132, 49, 119, 209, 40]
/// First 8 bytes of `hash("spl_token_group_interface:group")`
pub struct TokenGroup {
    /// The authority that can sign to update the group
    pub update_authority: OptionalNonZeroPubkey,
    /// The associated mint, used to counter spoofing to be sure that group
    /// belongs to a particular mint
    pub mint: Pubkey,
    /// The current number of group members
    pub size: PodU32,
    /// The maximum number of group members
    pub max_size: PodU32,
}

对于组成员

/// Type discriminant: [254, 50, 168, 134, 88, 126, 100, 186]
/// First 8 bytes of `hash("spl_token_group_interface:member")`
pub struct TokenGroupMember {
    /// The associated mint, used to counter spoofing to be sure that member
    /// belongs to a particular mint
    pub mint: Pubkey,
    /// The pubkey of the `TokenGroup`
    pub group: Pubkey,
    /// The member number
    pub member_number: PodU32,
}

通过在TLV结构中存储组或组成员的配置,实现此接口的开发者可以在不同的TLV条目中自由添加任何其他数据字段。

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

依赖项

~17-25MB
~359K SLoC