Skip to main content
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
本条目涵盖即将推出的 LaunchLab 程序更新。在部署前已针对本地发布分支进行验证。在依赖毕业前的 withheld 费用提取之前,请确认已部署的程序。
InitializeWithToken2022 创建的 Token-2022 基础铸币可以携带 TransferFeeConfig。该扩展有两个权限:transfer_fee_config_authority(更改费率和最大费用)和 withdraw_withheld_authority(提取 Token-2022 在代币账户上扣留的费用)。 在此版本之前,程序在铸币创建时将启动 authority PDA 放在两者上,并在毕业时将两者都交给 PlatformConfig.transfer_fee_extension_auth。启动板程序没有 withdraw-withheld 或 harvest 指令,因此在整个绑定曲线阶段,没有人可以提取扣留的余额——唯一可以的密钥是一个没有指令来签署的 PDA。 此版本在铸币创建时将 transfer_fee_extension_auth 直接写入 withdraw_withheld_authority,因此平台可以从第一笔交易开始扫除扣留的费用。MigrateToCpswap 增加了一个保护措施,仅在 PDA 仍持有该权限时才重新分配,这使得来自两代铸币的毕业都能正常工作。 其他一切都没有改变。没有账户增长或缩小,没有指令增加或失去账户,没有参数改变,也没有错误代码移动。

集成者速览

  • 扣留的转账费用在启动期间可提取。 在新 Token-2022 启动中,如果平台设置了 transfer_fee_extension_auth,该密钥从创建时起就是铸币的 withdraw_withheld_authority。直接调用 Token-2022 自己的 WithdrawWithheldTokensFromAccounts / WithdrawWithheldTokensFromMint;LaunchLab 没有此指令,从未有过。
  • transfer_fee_config_authority 时机不变。 它在毕业前仍然是启动 authority PDA,在 MigrateToCpswap 中仍然移动到 transfer_fee_extension_auth。费率在启动期间无法更改。
  • 在启动前设置 transfer_fee_extension_auth 当它在铸币创建时为 Pubkey::default() 时,提取权限回退到 authority PDA——旧行为。之后设置该字段仍然可以在毕业时恢复权限,但扣留的余额会被搁置直到那时。
  • 不要在启动期间轮换该字段。 两个权限在两个不同的时刻读取,所以在两者之间改变的值会将它们留在不同的密钥上。详见 轮换会分割两个权限
  • MigrateToCpswap 对调用者来说不变。 相同的账户、相同的参数、相同的错误。新的保护措施是内部的;没有它,新一代铸币的迁移会在 Token-2022 内部恢复,因为 PDA 不再能签署它不持有的权限。
  • 现有启动不受影响。 已在链上的铸币在两个权限上保持 PDA,在毕业时仍然两个都交给。
  • 不需要刷新 IDL。 没有布局、账户、参数或错误代码改变。

谁持有什么,以及何时

两个交接仍然在它们一直都在的相同外部条件后面:基础铸币必须携带 TransferFeeConfig transfer_fee_extension_auth 必须非默认。从不设置该字段的平台会永远在 authority PDA 上保持两个权限——费率永远无法更改,扣留的余额永远无法提取。

轮换会分割两个权限

transfer_fee_extension_auth 在每次启动中读取两次,在可能相隔数天的两个时刻:
  1. InitializeWithToken2022 处,用于 withdraw_withheld_authority
  2. MigrateToCpswap 处,用于 transfer_fee_config_authority——以及仅当 PDA 仍持有时的 withdraw_withheld_authority
在两者之间通过 UpdatePlatformConfig 轮换该字段,两个权限会落在不同的密钥上:提取方保持在创建时配置的密钥,因为 PDA 不再持有它,迁移跳过该交接,而费用配置方转到新密钥。两个调用都不会失败;分割是无声的。在启动之间轮换,或之后通过 Token-2022 直接用旧密钥签署来协调密钥。

为什么保护措施是必需的,而不仅仅是防御性的

Token-2022 的 SetAuthority 需要当前权限来签署。在新创建规则下,启动 authority PDA 不是新铸币上的 withdraw-withheld 权限,所以程序曾经进行的无条件 CPI 会失败——因为它位于 MigrateToCpswap 内部,该失败会阻止在配置了该字段的平台上每个带转账费用的 Token-2022 启动的毕业。这两个改变只有作为一对才能工作。

没有改变的内容

  • 转账费用数学和会计。 MAX_TRANSFER_FEE_RATE 仍然是 500(5%,分母 10_000),费用仍然以相同方式计入曲线,扣留的余额仍然在 Token-2022 放置它的代币账户上累积。
  • MigrateToCpswap 的接口。 相同的账户列表、相同的 remaining_accounts 索引、相同的两个代币程序、无参数。
  • InitializeWithToken2022 的接口。 相同的账户、相同的 TransferFeeExtensionParams、相同的 NoSupportExtension 拒绝任何在 MetadataPointerTransferFeeConfig 之外的内容。
  • 报价方 Token-2022 处理。2026-08-24 起不变。
  • 错误代码。 60006023 不变;此版本不添加任何。
  • 账户布局和 IDL。 不变。PlatformConfig.transfer_fee_extension_auth 保持其偏移和类型;仅程序读取它的方式改变。

更新的页面

  • products/launchlab/platform-config — 新的”Token-2022 转账费用权限”部分涵盖两个权限、两个交接点和轮换陷阱;布局注释和陷阱列表已更正。
  • products/launchlab/instructionsMigrateToCpswap 增加了”Token-2022 转账费用权限交接”块;Initialize 后置条件记录新的铸币创建权限。
  • products/launchlab/accounts — 权限 PDA 角色列表和基础铸币部分注明 PDA 实际持有哪些转账费用权限。
  • reference/token-2022-support — LaunchLab 基础铸币条目说明谁持有转账费用权限以及何时。