Token-2022转账钩子会调用什么

 / 
3

Token-2022转账钩子(Transfer Hook)会调用一个在代币铸造时预先配置好的外部程序,执行开发者自定义的转账逻辑。这个钩子程序通常需要实现一个标准的 Execute 指令,并根据配置自动解析所需的额外账户。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

标准指令调用流程

Token-2022转账钩子的执行分为几个标准步骤:

  1. 用户发起转账:调用Token-2022程序的 transfer_checked 指令。

  2. Token程序检测钩子:发现该代币的铸造账户配置了Transfer Hook扩展。

  3. Token程序发起跨程序调用(CPI):调用配置好的钩子程序,执行 Execute 指令。

  4. 钩子程序执行自定义逻辑:验证、修改或拒绝转账。

  5. 转账完成或回滚:钩子程序返回通过(Ok)或失败(Err)结果。如果通过,资产最终转移;如果失败,整个交易回滚。

具体调用内容详解

1. 调用的指令(Instruction)

协议规定每个Transfer Hook程序必须至少实现Execute指令。当用户转账时,Token-2022程序通过CPI执行的正是这个指令。

有的钩子程序还会实现可选的 InitializeExtraAccountMetaList 指令,用于配置后续转账所需的额外账户清单。

2. 传递的账户(Accounts)

Token-2022程序在调用钩子时,会传递一组账户。根据标准规范,这些账户包括:

  • 源账户(Source Account):发送代币的账户。

  • 代币铸造(Token Mint):所转移代币的铸造账户。

  • 目标账户(Destination Account):接收代币的账户。

  • 源账户的拥有者/委托者:授权转账的账户。

  • 验证账户(Validation Account):用于额外账户解析的账户。

  • 额外账户(M个):数量不定的额外账户,这些账户由Token-2022程序根据配置自动解析和添加。

3. 调用的核心逻辑

钩子程序可以执行各种自定义逻辑,例如:

  • 验证接收方资格KYC白名单检查、地理限制、封锁名单检查。

  • 收取版税:确保NFT每次转售都能自动支付版税。

  • 执行动态费用:根据转账金额或接收方收取不同比例的费用。

  • 统计追踪:更新链上转账计数器或统计信息。

  • 权限校验:检查转出方是否持有特定权限(如DAO多签批准)。

核心机制:额外账户解析(ExtraAccountMetaList)

调用中最关键的部分是额外账户(Extra Accounts)的自动解析。由于钱包或转账发起方不知道钩子程序需要哪些额外账户,Token-2022程序引入了一个机制来解决这个问题。

  1. 配置阶段:钩子程序会初始化一个PDA(Program Derived Address),地址采用固定种子 "extra-account-metas" + 铸造地址 + 钩子程序ID的组合,并将需要的额外账户元数据存入其中。

  2. 转账阶段:Token-2022程序会自动查询这个PDA,读取配置的元数据,然后动态解析出所需的额外账户,并将它们附加到对钩子程序的调用中。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

确认理解

你可以通过以下方式确认自己理解了Token-2022转账钩子的调用内容:

  1. 查看官方示例:阅读SPL库中的示例程序,了解标准 Execute 指令的实现方式。

  2. 参考社区实现:观察GitHub上的开源项目,如 counter_hook 程序如何更新转账计数器,或实现KYC合规的钩子程序。

  3. 核心验证:确认转账时是否已调用 transfer_checked,而非 transfer;检查被调用程序是否实现了 Execute 指令;通过区块浏览器追踪交易,查看实际传递给钩子程序的账户列表。

Token-2022转账钩子的本质是 "钩子程序 + Execute指令" 的组合,通过自动账户解析实现了极佳的扩展性。普通用户不需要主动调用钩子,只需关注代币铸造是否配置了Transfer Hook,转账行为会自动触发钩子执行。