扩展
了解如何在 Anchor 程序中使用 Token Extensions Program (Token 2022) 启用代币扩展,为代币铸币和账户添加可选功能。
什么是 Token Extensions?
Token Extensions Program (Token 2022) 通过称为扩展的附加指令提供了额外的功能。扩展是可以添加到代币铸币或代币账户的可选功能。你可以在 Token Extensions Program 的 源代码 中找到这些扩展指令的实现。
每个扩展都会添加特定的状态,这些状态必须在铸币或代币账户创建时初始化。在初始化任一类型的账户时,你可以同时启用多个扩展以添加不同的功能。然而,扩展不能在账户创建后添加——你必须在初始账户创建时包含所有所需的扩展。这是设计代币时的一个重要考虑因素,因为你需要提前规划希望代币支持的功能。
某些扩展彼此不兼容,不能在同一个代币铸币或代币账户上同时启用。例如,你不能将 NonTransferable 扩展与 TransferFeeConfig 扩展结合使用,因为它们的操作行为是冲突的。
Token Extensions Program 定义了一个 ExtensionType
枚举,指定了可以添加到代币铸币或代币账户的所有可用扩展。每个枚举变体代表一个具有独特功能的不同扩展。
ExtensionType
枚举定义如下:
每个扩展都会通过包含必须在创建铸币或代币账户时初始化的附加状态来增加专门的功能。所有扩展特定的状态都存储在 tlv_data
字段中,该字段紧随基本账户数据类型之后。tlv_data
(包含扩展状态)必须根据为该账户启用的特定扩展类型进一步反序列化。
示例
anchor-spl
crate 提供了一个 token_2022_extensions
模块,其中包含用于处理代币扩展指令的辅助函数和类型。
你可以在 程序示例仓库 中找到有关如何在 Anchor 程序中使用 Token Extensions 的示例。
请注意,虽然 anchor-spl crate 提供了用于处理 Token Extensions 的辅助函数,但并非所有扩展指令都已完全实现。你可能需要为某些扩展指令手动实现 CPI 调用。