> ## 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 authority を保持

> InitializeWithToken2022 は PlatformConfig.transfer_fee_extension_auth をベースミントの withdraw_withheld_authority に書き込むようになり、ローンチ authority PDA ではなくなります。MigrateToCpswap は PDA がまだそれを保持している場合のみその authority を再割り当てします。アカウントレイアウト、命令、またはエラーの変更はありません。

<Info>
  **このページは AI による自動翻訳です。すべての内容は英語版を正とします。**

  [英語版を表示 →](/reference/changelog/2026-08-27-launchlab-token2022-withheld-authority)
</Info>

<Info>
  このエントリは、今後の LaunchLab プログラム更新をカバーしています。デプロイ前にローカルリリースブランチに対して検証されました。卒業前の withheld フィー引き出しに依存する前に、デプロイされたプログラムを確認してください。
</Info>

`InitializeWithToken2022` で作成された Token-2022 ベースミントは `TransferFeeConfig` を持つことができます。この拡張には 2 つの authority があります：フィーレートと最大フィーを変更する `transfer_fee_config_authority` と、Token-2022 がトークンアカウントで保留するフィーを引き出す `withdraw_withheld_authority` です。

このリリースまで、プログラムはミント作成時にローンチ `authority` PDA を両方に配置し、卒業時に両方を `PlatformConfig.transfer_fee_extension_auth` に渡していました。ローンチパッドプログラムには withdraw-withheld または harvest 命令がないため、ボンディングカーブ全体を通じて誰も withheld 残高を引き出すことができませんでした。それができるのは、それで署名する命令を持たない PDA だけでした。

このリリースでは、ミント作成時に `transfer_fee_extension_auth` を直接 `withdraw_withheld_authority` に書き込むため、プラットフォームは最初のトレードから withheld フィーをスイープできます。`MigrateToCpswap` はガードを獲得し、PDA がまだそれを保持している場合のみその authority を再割り当てするため、両世代のミントの卒業が機能します。

他に何も変わりません。アカウントが増減せず、命令がアカウントを獲得または失わず、引数が変わらず、エラーコードが移動しません。

## インテグレーター向け TL;DR

* **Withheld トランスファーフィーはローンチ中に引き出し可能です。** プラットフォームが `transfer_fee_extension_auth` を設定した新しい Token-2022 ローンチでは、そのキーは作成時からミントの `withdraw_withheld_authority` です。Token-2022 の `WithdrawWithheldTokensFromAccounts` / `WithdrawWithheldTokensFromMint` を直接呼び出してください。LaunchLab にはこの命令がなく、かつてもありませんでした。
* **`transfer_fee_config_authority` のタイミングは変わりません。** これはローンチ `authority` PDA のままで、卒業時に `transfer_fee_extension_auth` に移動します。フィーレートはローンチ中に変更できません。
* **ローンチ前に `transfer_fee_extension_auth` を設定してください。** ミント作成時に `Pubkey::default()` の場合、withdraw authority は `authority` PDA にフォールバックします（古い動作）。その後フィールドを設定すると、卒業時に authority を復旧できますが、withheld 残高はそれまでストランドします。
* **ローンチ中にフィールドをローテーションしないでください。** 2 つの authority は 2 つの異なる時点で読み取られるため、その間に変わる値は異なるキーに残します。詳細は [Rotation splits the two authorities](#rotation-splits-the-two-authorities) を参照してください。
* **`MigrateToCpswap` は呼び出し側では変わりません。** 同じアカウント、同じ引数、同じエラー。新しいガードは内部的なもので、これがないと新世代ミントの移行は Token-2022 内で戻ります。PDA はもはや保持していない authority を署名で譲ることができないためです。
* **既存のローンチは影響を受けません。** すでにオンチェーンのミントは PDA を両方の authority に保持し、卒業時に両方を渡されます。
* **IDL リフレッシュは不要です。** レイアウト、アカウント、引数、またはエラーコードは変わりません。

## 誰が何を保持し、いつ保持するか

| Authority                       | ミント作成時の保持者                                                                      | `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 を `authority` PDA に永遠に保持します。フィーレートは変更できず、withheld 残高は引き出せません。

## Rotation が 2 つの authority を分割する

`transfer_fee_extension_auth` はローンチごとに 2 回、数日離れた 2 つの時点で読み取られます：

1. `InitializeWithToken2022` で、`withdraw_withheld_authority` 用。
2. `MigrateToCpswap` で、`transfer_fee_config_authority` 用。および PDA がまだそれを保持している場合のみ `withdraw_withheld_authority` 用。

その間に `UpdatePlatformConfig` を通じてフィールドをローテーションすると、2 つの authority は異なるキーに着地します：withdraw 側は作成時に設定されたキーを保持します。PDA はもはやそれを保持していないため、移行はそのハンドオーバーをスキップします。一方、フィー設定側は新しいキーに移動します。どちらの呼び出しも失敗しません。分割はサイレントです。ローンチ間でローテーションするか、古いキーで署名して Token-2022 を直接通じてキーを調整してください。

## ガードが必要な理由、単なる防御的ではなく

Token-2022 の `SetAuthority` は*現在の* authority の署名を必要とします。新しい作成ルールの下では、ローンチ `authority` PDA は新しいミントの withdraw-withheld authority ではないため、プログラムが使用していた無条件 CPI は失敗します。そしてそれは `MigrateToCpswap` 内にあるため、その失敗は、フィールドを設定していたプラットフォーム上のトランスファーフィーを持つすべての Token-2022 ローンチの卒業をブロックしていたでしょう。2 つの変更はペアとしてのみ機能します。

## 変わらなかったもの

* **トランスファーフィーの数学と会計。** `MAX_TRANSFER_FEE_RATE` は依然として `500`（5%、分母 `10_000`）で、フィーは依然として同じ方法で曲線に価格設定され、withheld 残高は依然として Token-2022 がそれを配置するトークンアカウントに蓄積します。
* **`MigrateToCpswap` のインターフェース。** 同じアカウントリスト、同じ `remaining_accounts` インデックス、同じ 2 つのトークンプログラム、引数なし。
* **`InitializeWithToken2022` のインターフェース。** 同じアカウント、同じ `TransferFeeExtensionParams`、`MetadataPointer` と `TransferFeeConfig` 以外の何かに対する同じ `NoSupportExtension` 拒否。
* **クォート側 Token-2022 処理。** [2026-08-24](/ja/reference/changelog/2026-08-24-launchlab-token2022-quote-mint) から変わりません。
* **エラーコード。** `6000`–`6023` は変わりません。このリリースは何も追加しません。
* **アカウントレイアウトと IDL。** 変わりません。`PlatformConfig.transfer_fee_extension_auth` はそのオフセットと型を保持します。プログラムがそれを読み取る方法だけが変わりました。

## 更新されたページ

* `products/launchlab/platform-config` — 両方の authority、両方のハンドオーバーポイント、およびローテーショントラップをカバーする新しい「Token-2022 トランスファーフィー authority」セクション。レイアウトコメントと落とし穴リストが修正されました。
* `products/launchlab/instructions` — `MigrateToCpswap` は「Token-2022 トランスファーフィー authority ハンドオーバー」ブロックを獲得します。`Initialize` の事後条件は新しいミント作成 authority を記録します。
* `products/launchlab/accounts` — authority-PDA ロールリストとベースミントセクションは、PDA が実際に保持するトランスファーフィー authority を記録します。
* `reference/token-2022-support` — LaunchLab ベースミントエントリは、トランスファーフィー authority を保持する人と時期を述べています。
