本页内容由 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时机不变。 它在毕业前仍然是启动authorityPDA,在MigrateToCpswap中仍然移动到transfer_fee_extension_auth。费率在启动期间无法更改。- 在启动前设置
transfer_fee_extension_auth。 当它在铸币创建时为Pubkey::default()时,提取权限回退到authorityPDA——旧行为。之后设置该字段仍然可以在毕业时恢复权限,但扣留的余额会被搁置直到那时。 - 不要在启动期间轮换该字段。 两个权限在两个不同的时刻读取,所以在两者之间改变的值会将它们留在不同的密钥上。详见 轮换会分割两个权限。
MigrateToCpswap对调用者来说不变。 相同的账户、相同的参数、相同的错误。新的保护措施是内部的;没有它,新一代铸币的迁移会在 Token-2022 内部恢复,因为 PDA 不再能签署它不持有的权限。- 现有启动不受影响。 已在链上的铸币在两个权限上保持 PDA,在毕业时仍然两个都交给。
- 不需要刷新 IDL。 没有布局、账户、参数或错误代码改变。
谁持有什么,以及何时
两个交接仍然在它们一直都在的相同外部条件后面:基础铸币必须携带
TransferFeeConfig 且 transfer_fee_extension_auth 必须非默认。从不设置该字段的平台会永远在 authority PDA 上保持两个权限——费率永远无法更改,扣留的余额永远无法提取。
轮换会分割两个权限
transfer_fee_extension_auth 在每次启动中读取两次,在可能相隔数天的两个时刻:
- 在
InitializeWithToken2022处,用于withdraw_withheld_authority。 - 在
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拒绝任何在MetadataPointer和TransferFeeConfig之外的内容。- 报价方 Token-2022 处理。 从 2026-08-24 起不变。
- 错误代码。
6000–6023不变;此版本不添加任何。 - 账户布局和 IDL。 不变。
PlatformConfig.transfer_fee_extension_auth保持其偏移和类型;仅程序读取它的方式改变。
更新的页面
products/launchlab/platform-config— 新的”Token-2022 转账费用权限”部分涵盖两个权限、两个交接点和轮换陷阱;布局注释和陷阱列表已更正。products/launchlab/instructions—MigrateToCpswap增加了”Token-2022 转账费用权限交接”块;Initialize后置条件记录新的铸币创建权限。products/launchlab/accounts— 权限 PDA 角色列表和基础铸币部分注明 PDA 实际持有哪些转账费用权限。reference/token-2022-support— LaunchLab 基础铸币条目说明谁持有转账费用权限以及何时。

