> ## 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 : la plateforme détient l'autorité de retrait des frais retenus depuis la création du mint

> InitializeWithToken2022 écrit désormais PlatformConfig.transfer_fee_extension_auth dans la withdraw_withheld_authority du nouveau mint de base au lieu de la PDA d'autorité de lancement, et MigrateToCpswap ne réassigne cette autorité que si la PDA la détient toujours. Aucun changement de disposition de compte, d'instruction ou d'erreur.

<Info>
  **Cette page est traduite automatiquement par IA. La version anglaise fait foi.**

  [Voir la version anglaise →](/reference/changelog/2026-08-27-launchlab-token2022-withheld-authority)
</Info>

<Info>
  Cette entrée couvre une mise à jour à venir du programme LaunchLab. Elle a été vérifiée par rapport à la branche de version locale avant le déploiement. Confirmez le programme déployé avant de vous fier au retrait des frais retenus avant la graduation.
</Info>

Un mint de base Token-2022 créé par `InitializeWithToken2022` peut porter une `TransferFeeConfig`. Cette extension a deux autorités : `transfer_fee_config_authority`, qui modifie le taux de frais et les frais maximaux, et `withdraw_withheld_authority`, qui retire les frais que Token-2022 retient sur les comptes de jetons.

Jusqu'à cette version, le programme plaçait la PDA d'`authority` de lancement sur les deux au moment de la création du mint et les remettait toutes les deux à `PlatformConfig.transfer_fee_extension_auth` à la graduation. Le programme de lancement n'a pas d'instruction de retrait de frais retenus ou de récolte, donc pendant toute la phase de courbe de liaison, personne ne pouvait retirer le solde retenu — la seule clé qui pouvait le faire était une PDA sans instruction pour la signer.

Cette version écrit `transfer_fee_extension_auth` directement dans `withdraw_withheld_authority` au moment de la création du mint, de sorte que la plateforme peut récupérer les frais retenus dès le premier échange. `MigrateToCpswap` gagne une garde pour qu'elle ne réassigne cette autorité que si la PDA la détient toujours, ce qui maintient la graduation fonctionnelle pour les mints des deux générations.

Rien d'autre n'a changé. Aucun compte n'a grandi ou rétréci, aucune instruction n'a gagné ou perdu un compte, aucun argument n'a changé, et aucun code d'erreur n'a bougé.

## TL;DR pour les intégrateurs

* **Les frais de transfert retenus sont retirables pendant le lancement.** Sur un nouveau lancement Token-2022 dont la plateforme a `transfer_fee_extension_auth` défini, cette clé est la `withdraw_withheld_authority` du mint depuis la création. Appelez directement les propres `WithdrawWithheldTokensFromAccounts` / `WithdrawWithheldTokensFromMint` de Token-2022 ; LaunchLab n'a pas d'instruction pour cela et n'en a jamais eu.
* **Le calendrier de `transfer_fee_config_authority` est inchangé.** C'est toujours la PDA d'`authority` de lancement jusqu'à la graduation, et elle se déplace toujours vers `transfer_fee_extension_auth` dans `MigrateToCpswap`. Le taux de frais ne peut pas être modifié en cours de lancement.
* **Définissez `transfer_fee_extension_auth` avant le lancement.** Quand il est `Pubkey::default()` au moment de la création du mint, l'autorité de retrait revient à la PDA d'`authority` — l'ancien comportement. Définir le champ après coup récupère toujours l'autorité à la graduation, mais le solde retenu est bloqué jusqu'à ce moment.
* **Ne faites pas pivoter le champ en cours de lancement.** Les deux autorités sont lues à deux moments différents, donc une valeur qui change entre les deux les laisse sur des clés différentes. Détails dans [La rotation divise les deux autorités](#la-rotation-divise-les-deux-autorités).
* **`MigrateToCpswap` est inchangé pour les appelants.** Mêmes comptes, mêmes arguments, mêmes erreurs. La nouvelle garde est interne ; sans elle, la migration d'un mint de nouvelle génération reviendrait à l'intérieur de Token-2022 car la PDA ne peut plus signer une autorité qu'elle ne détient pas.
* **Les lancements existants ne sont pas affectés.** Les mints déjà en chaîne gardent la PDA sur les deux autorités et les deux sont toujours remises à la graduation.
* **Aucune actualisation IDL n'est requise.** Aucune disposition, compte, argument ou code d'erreur n'a changé.

## Qui détient quoi, et quand

| Autorité                        | Détenteur à la création du mint                                                             | Détenteur après `MigrateToCpswap`                                                                   |
| ------------------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| `withdraw_withheld_authority`   | `transfer_fee_extension_auth` ; la PDA d'`authority` quand ce champ est `Pubkey::default()` | Inchangé quand c'est déjà la clé de plateforme. Réassigné uniquement si la PDA la détient toujours. |
| `transfer_fee_config_authority` | La PDA d'`authority`, toujours                                                              | `transfer_fee_extension_auth`, quand ce champ est non-défaut                                        |

Les deux remises sont toujours derrière la même condition externe qu'elles l'ont toujours été : le mint de base doit porter `TransferFeeConfig` **et** `transfer_fee_extension_auth` doit être non-défaut. Une plateforme qui ne définit jamais le champ garde les deux autorités sur la PDA d'`authority` pour toujours — le taux de frais ne peut jamais être modifié et le solde retenu ne peut jamais être retiré.

## La rotation divise les deux autorités

`transfer_fee_extension_auth` est lu deux fois par lancement, à deux moments qui peuvent être séparés de jours :

1. À `InitializeWithToken2022`, pour `withdraw_withheld_authority`.
2. À `MigrateToCpswap`, pour `transfer_fee_config_authority` — et pour `withdraw_withheld_authority` uniquement si la PDA la détient toujours.

Faites pivoter le champ via `UpdatePlatformConfig` entre les deux et les deux autorités atterrissent sur des clés différentes : le côté retrait garde la clé qui a été configurée à la création, car la PDA ne la détient plus et la migration ignore cette remise, tandis que le côté configuration des frais va à la nouvelle clé. Aucun appel n'échoue ; la division est silencieuse. Faites pivoter entre les lancements, ou réconciliez les clés après coup directement via Token-2022 avec l'ancienne clé signant.

## Pourquoi la garde est requise, pas seulement défensive

Le `SetAuthority` de Token-2022 exige que l'autorité *actuelle* signe. Selon la nouvelle règle de création, la PDA d'`authority` de lancement n'est pas l'autorité de retrait des frais retenus sur un nouveau mint, donc le CPI inconditionnel que le programme avait l'habitude de faire échouerait — et parce qu'il se trouve à l'intérieur de `MigrateToCpswap`, cet échec aurait bloqué la graduation pour chaque lancement Token-2022 avec des frais de transfert sur une plateforme qui avait configuré le champ. Les deux changements ne fonctionnent que comme une paire.

## Ce qui n'a pas changé

* **Les mathématiques et la comptabilité des frais de transfert.** `MAX_TRANSFER_FEE_RATE` est toujours `500` (5 %, dénominateur `10_000`), les frais sont toujours évalués dans la courbe de la même manière, et le solde retenu s'accumule toujours sur les comptes de jetons que Token-2022 y place.
* **L'interface de `MigrateToCpswap`.** Même liste de comptes, mêmes indices `remaining_accounts`, mêmes deux programmes de jetons, pas d'arguments.
* **L'interface de `InitializeWithToken2022`.** Mêmes comptes, mêmes `TransferFeeExtensionParams`, même rejet `NoSupportExtension` pour tout ce qui n'est pas `MetadataPointer` et `TransferFeeConfig`.
* **La gestion Token-2022 du côté devis.** Inchangée depuis [2026-08-24](/fr/reference/changelog/2026-08-24-launchlab-token2022-quote-mint).
* **Les codes d'erreur.** `6000`–`6023` sont inchangés ; cette version n'en ajoute aucun.
* **Les dispositions de compte et l'IDL.** Inchangés. `PlatformConfig.transfer_fee_extension_auth` garde son décalage et son type ; seul le moment où le programme le lit a changé.

## Pages mises à jour

* `products/launchlab/platform-config` — nouvelle section « Autorités de frais de transfert Token-2022 » couvrant les deux autorités, les deux points de remise et le piège de rotation ; commentaire de disposition et liste des pièges corrigés.
* `products/launchlab/instructions` — `MigrateToCpswap` gagne un bloc « Remise d'autorité de frais de transfert Token-2022 » ; les postconditions d'`Initialize` enregistrent les nouvelles autorités de création de mint.
* `products/launchlab/accounts` — liste des rôles de la PDA d'autorité et la section du mint de base notent quelles autorités de frais de transfert la PDA détient réellement.
* `reference/token-2022-support` — l'entrée du mint de base LaunchLab indique qui détient les autorités de frais de transfert et quand.
