> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026-08-27 — LaunchLab：平台在铸币创建时持有 withdraw-withheld 权限

> InitializeWithToken2022 现在将 PlatformConfig.transfer_fee_extension_auth 写入新基础铸币的 withdraw_withheld_authority，而不是启动权限 PDA；MigrateToCpswap 仅在 PDA 仍持有该权限时才重新分配。无账户布局、指令或错误变化。

<Info>
  **本页内容由 AI 自动翻译，所有内容以英文版本为准。**

  [查看英文版 →](/reference/changelog/2026-08-27-launchlab-token2022-withheld-authority)
</Info>

<Info>
  本条目涵盖即将推出的 LaunchLab 程序更新。在部署前已针对本地发布分支进行验证。在依赖毕业前的 withheld 费用提取之前，请确认已部署的程序。
</Info>

由 `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。** 没有布局、账户、参数或错误代码改变。

## 谁持有什么，以及何时

| 权限                              | 铸币创建时的持有者                                                                  | `MigrateToCpswap` 后的持有者                |
| ------------------------------- | -------------------------------------------------------------------------- | -------------------------------------- |
| `withdraw_withheld_authority`   | `transfer_fee_extension_auth`；当该字段为 `Pubkey::default()` 时为 `authority` PDA | 当它已经是平台密钥时不变。仅在 PDA 仍持有时重新分配。          |
| `transfer_fee_config_authority` | `authority` PDA，始终                                                         | `transfer_fee_extension_auth`，当该字段非默认时 |

两个交接仍然在它们一直都在的相同外部条件后面：基础铸币必须携带 `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` 拒绝任何在 `MetadataPointer` 和 `TransferFeeConfig` 之外的内容。
* **报价方 Token-2022 处理。** 从 [2026-08-24](/zh/reference/changelog/2026-08-24-launchlab-token2022-quote-mint) 起不变。
* **错误代码。** `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 基础铸币条目说明谁持有转账费用权限以及何时。
