> ## 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-24 — LaunchLab : quote mints Token-2022

> LaunchLab accepte les quote mints Token-2022 dans la configuration, la création de pools, les swaps, les réclamations de frais et la migration CPMM. Les bornes de slippage des swaps évaluent désormais les frais de transfert côté quote, le bit1 de PoolState.token_program_flag devient significatif, et MigrateToCpswap renomme ses deux comptes token-program.

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

  [Voir la version anglaise →](/reference/changelog/2026-08-24-launchlab-token2022-quote-mint)
</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é et l'IDL publié avant d'activer les nouveaux chemins en production.
</Info>

Cette version permet à un lancement d'être coté dans un mint Token-2022. Jusqu'à présent, le côté quote était câblé en dur au programme SPL Token hérité, seul le mint de base pouvait être Token-2022. Partout où le mint quote est utilisé — création de `GlobalConfig`, initialisation du pool, les quatre instructions de swap, toutes les réclamations de frais et la migration CPMM — accepte désormais l'un ou l'autre programme token, et les instructions de swap tiennent compte des frais de transfert du mint quote.

## TL;DR pour les intégrateurs

* **Les quote mints peuvent être Token-2022.** `CreateConfig` accepte un `quote_token_mint` Token-2022, et `InitializeV2` / `InitializeWithToken2022` acceptent l'un ou l'autre programme token dans l'emplacement quote-program. L'ordre des comptes ne change pas — la valeur que vous passez dans cet emplacement change.
* **Le deprecated `Initialize` reste legacy-only.** Son compte quote-program est toujours typé pour SPL Token, donc une config dont le mint quote est Token-2022 ne peut être lancée que via `InitializeV2` ou `InitializeWithToken2022`.
* **Les bornes de slippage se déplacent vers ce que le payeur paie et reçoit réellement.** `minimum_amount_out` et `maximum_amount_in` sont désormais comparés au montant net des frais de transfert du mint quote, et non au montant que le vault a déplacé. La logique de cotation existante sous-évalue le coût et surévalue les revenus sur un mint quote porteur de frais.
* **Le bit1 de `PoolState.token_program_flag` devient significatif.** Il était toujours `0` tant que les quote mints étaient legacy-only. Les clients qui comparent l'octet entier à `0` liront désormais un mint de base legacy comme Token-2022 chaque fois que le mint quote est Token-2022. C'est la rupture silencieuse la plus probable de cette version.
* **`MigrateToCpswap` renomme ses deux comptes token-program.** `base_token_program` / `quote_token_program` deviennent `token_program` / `token_program_2022`. Les deux sont toujours requis, et le programme choisit le bon par mint.
* **Les paires mint/programme sont désormais validées.** Les deux mints de swap ont gagné une contrainte `mint::token_program`, tout comme le mint quote de `ClaimPlatformFee`, donc une paire mal appariée revient au lieu d'être ignorée.
* **Nouvelle erreur `6023` `CalculateOverflow`.** Les codes `6000`–`6022` sont inchangés. `6023` a été libéré par la version précédente et est désormais réutilisé.
* **Les vaults de frais suivent le mint quote.** Les vaults de frais du créateur et de la plateforme, et le compte token du destinataire des frais de partage, vivent sur le programme qui possède le mint quote.

## Quels comptes ont changé de type

Aucun de ces changements ne change de position dans sa liste de comptes. Seule la valeur autorisée change.

| Instruction                                                          | Compte                | Avant          | Après                             |
| -------------------------------------------------------------------- | --------------------- | -------------- | --------------------------------- |
| `CreateConfig`                                                       | `quote_token_mint`    | mint SPL Token | mint de l'un ou l'autre programme |
| `InitializeV2`                                                       | `quote_token_program` | SPL Token      | l'un ou l'autre programme         |
| `InitializeWithToken2022`                                            | `quote_token_program` | SPL Token      | l'un ou l'autre programme         |
| `BuyExactIn` / `BuyExactOut` / `SellExactIn` / `SellExactOut`        | `quote_token_program` | SPL Token      | l'un ou l'autre programme         |
| `CollectFee` / `CollectMigrateFee`                                   | `token_program`       | SPL Token      | l'un ou l'autre programme         |
| `ClaimCreatorFee` / `ClaimPlatformFee` / `ClaimPlatformFeeFromVault` | `token_program`       | SPL Token      | l'un ou l'autre programme         |

`Initialize` (le chemin V1 deprecated) n'est délibérément pas dans ce tableau. Son compte quote-program reste typé pour SPL Token.

Plusieurs d'entre eux ont également resserré leurs contraintes de mint, donc une paire mint/programme mal appariée revient désormais là où elle était précédemment acceptée ou non vérifiée :

* Les quatre instructions de swap contraignent à la fois `base_token_mint` et `quote_token_mint` au programme passé dans l'emplacement correspondant. Aucun ne portait cette contrainte avant, donc un mauvais programme de base était silencieusement accepté.
* `ClaimPlatformFee` ajoute la même contrainte sur `quote_mint`.
* `ClaimPlatformFeeFromVault` corrige sa contrainte d'une forme de compte token à la forme mint sur ce qui est un compte mint.

## Comptabilité des frais de transfert côté quote

C'est la partie qui change les nombres plutôt que les listes de comptes. Sur un mint quote sans `TransferFeeConfig`, chaque formule ci-dessous s'effondre au comportement précédent, donc les pools legacy et les pools Token-2022 sans frais sont bit-for-bit inchangés.

| Instruction    | Ce que l'argument signifie maintenant                                                                                                                                                                                                                                                            |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `BuyExactIn`   | `amount_in` est le débit brut. La courbe est évaluée sur `amount_in − transfer_fee(amount_in)`, ce qui atterrit dans le vault. Sur un remplissage complet, le payeur est débité exactement `amount_in` ; sur un remplissage partiel, le débit est le montant du vault consommé grossi à nouveau. |
| `BuyExactOut`  | `maximum_amount_in` est comparé au montant du vault **plus** les frais de transfert inverse — le débit réel — au lieu du montant du vault seul.                                                                                                                                                  |
| `SellExactIn`  | `minimum_amount_out` est comparé à ce qu'il reste au vendeur après que le mint retienne ses frais, et non au montant brut libéré du vault.                                                                                                                                                       |
| `SellExactOut` | `amount_out` est ce que le vendeur finit par obtenir. La courbe cible `amount_out` plus les frais de transfert inverse, donc le montant demandé arrive exactement.                                                                                                                               |

Deux conséquences qui méritent d'être énoncées clairement :

* Une borne calculée à partir d'un pool équivalent sans frais n'est plus acceptable. `BuyExactOut` avec le coût sans frais comme `maximum_amount_in` revient désormais avec `ExceededSlippage`, tout comme `SellExactIn` avec les revenus sans frais comme `minimum_amount_out`. C'est le comportement prévu — l'ancienne comparaison permettait au payeur d'être débité des frais de transfert en plus d'une borne à laquelle il avait déjà accepté.
* Le pool ne réserve que ce qui a atteint le vault. Après un `BuyExactIn` de `amount_in` sur un mint quote à 5 %, `real_quote` avance de `amount_in × 0.95`, pas `amount_in`.

`get_transfer_inverse_fee` a également supprimé son cas particulier pour un mint à frais de 100 % : au lieu de revenir à `maximum_fee`, il retourne désormais la nouvelle erreur `CalculateOverflow` quand les frais inverses ne peuvent pas être calculés. Un mint quote à `10000` points de base échoue donc les chemins exact-out plutôt que de transiger silencieusement au plafond des frais.

## Bit1 de `token_program_flag`

`PoolState.token_program_flag` est un champ de bits, et l'a toujours été :

```text theme={null}
bit0  mint de base  0 = SPL Token, 1 = Token-2022
bit1  mint quote    0 = SPL Token, 1 = Token-2022
```

Le champ, les positions des bits et le code qui écrit les deux bits préexistent tous à cette version. Ce qui change, c'est que le bit1 peut maintenant être réellement `1`, car un mint quote peut maintenant être un mint Token-2022. Les quatre valeurs sont :

| Valeur | Mint de base | Mint quote |
| ------ | ------------ | ---------- |
| `0`    | SPL Token    | SPL Token  |
| `1`    | Token-2022   | SPL Token  |
| `2`    | SPL Token    | Token-2022 |
| `3`    | Token-2022   | Token-2022 |

Lisez le programme de chaque mint avec `(token_program_flag >> bit) & 1`. Tout client qui traite l'octet comme un booléen pour le mint de base — `flag === 0 ? Token : Token-2022` — résout la valeur `2` en un mint de base Token-2022 et construira le compte token et le transfert côté base par rapport au mauvais programme. Aucun changement de taille de compte ou de décalage de champ, donc les indexeurs n'ont besoin d'aucune migration de stockage, seulement d'une correction de décodage.

## Renommage du compte de migration CPMM

`MigrateToCpswap` prenait auparavant un programme token par mint, et l'appelant décidait lequel était lequel. Il prend désormais les deux programmes sans condition et dérive le mappage des mints eux-mêmes :

| Position                 | Avant                                                             | Après                                                    |
| ------------------------ | ----------------------------------------------------------------- | -------------------------------------------------------- |
| premier programme token  | `base_token_program` — le programme qui possédait le mint de base | `token_program` — toujours le programme SPL Token legacy |
| deuxième programme token | `quote_token_program` — toujours le programme SPL Token legacy    | `token_program_2022` — toujours le programme Token-2022  |

Les deux positions sont inchangées, c'est donc un changement de valeur, pas un changement de disposition — mais les valeurs sont proches d'être inversées, et un constructeur qui continue de passer son ancienne paire passera Token-2022 où le programme legacy est requis dès que l'un ou l'autre mint est un mint Token-2022.

Le programme legacy est toujours requis sans condition indépendamment de l'un ou l'autre mint, car le mint LP CPMM et le NFT Fee Key verrouillé vivent toujours sur lui. La disposition `remaining_accounts` de la [version du 2026-08-17](/fr/reference/changelog/2026-08-17-launchlab-cpmm-only-platform-config) est inchangée.

## Les quote mints sont admis à la seule discrétion de l'administrateur

Contrairement à CPMM et CLMM, LaunchLab n'exécute **aucune** liste d'autorisation d'extension par rapport à un mint quote. `CreateConfig` accepte le compte mint tel quel, donc la seule porte est les mints qu'un administrateur lie à un `GlobalConfig`. La vérification `NoSupportExtension` du programme s'applique uniquement aux mints de base Token-2022 que LaunchLab crée lui-même, où seuls `MetadataPointer` et `TransferFeeConfig` sont autorisés.

Traitez la liaison d'un mint quote Token-2022 comme une action de haute confiance avec le même raisonnement que les listes blanches statiques CPMM/CLMM dans [`reference/token-2022-support`](/fr/reference/token-2022-support). Un mint quote `TransferHook` ou `PermanentDelegate` serait admis au moment de la création de la config et s'exécuterait ensuite sur, ou serait capable de balayer, chaque pool coté en lui.

## Porte temporelle `amm_creator_fee_on`

`InitializeV2` supprime la porte temporelle qui rejetait tout `amm_creator_fee_on` autre que `BothToken` avant l'horodatage de mise à niveau. La porte équivalente est toujours présente dans `InitializeWithToken2022`. En pratique, les deux chemins acceptent l'une ou l'autre valeur sur mainnet-beta aujourd'hui, car cet horodatage (`1755522000`, 2025-08-18 13:00 UTC) est bien passé — c'est du nettoyage, pas un changement de comportement pour les appelants actuels.

## Impact sur les erreurs et l'IDL

Les codes `6000`–`6022` sont inchangés, y compris `6022` `InvalidPlatformAllowConfig`.

| Code | Nom                 | Signification                                                                                |
| ---- | ------------------- | -------------------------------------------------------------------------------------------- |
| 6023 | `CalculateOverflow` | Un calcul de frais de transfert ou de frais de transfert inverse n'a pas pu être représenté. |

La version précédente a retiré l'ancien `6023` et l'a laissé vacant ; cette version réutilise le numéro. Ne décodez pas `6023` avec un IDL de l'une ou l'autre version antérieure.

Actualisez l'IDL LaunchLab avant de passer un programme quote Token-2022, de décoder le bit1 de `token_program_flag`, ou de construire la liste de comptes `MigrateToCpswap` renommée.

## Impact sur le SDK

Le côté quote du module launchpad du SDK était codé en dur à `TOKEN_PROGRAM_ID` aux mêmes endroits que le programme. La branche qui accompagne cette version résout le propriétaire du mint quote à la place, le transmet par la création de compte token, l'ATA du destinataire des frais de partage et l'emplacement du programme quote de l'instruction, et ajoute un `transferFeeConfigB` optionnel aux quatre méthodes `Curve` afin que les quotes reflètent les formules ci-dessus. Les résultats de `Curve` gagnent un champ `transferFeeB` ; `amountB` garde sa signification — ce que le payeur dépense ou ce que le vendeur reçoit — donc un mint quote sans frais produit des nombres identiques à avant.

Ces modifications du SDK ne sont pas publiées. L'épingle canonique sur les pages de démonstration de code dans cet ensemble de documentation est inchangée ; vérifiez la version publiée avant de vous fier aux nouveaux paramètres.

## Implémentation de référence

Une nouvelle démo s'abonne au programme LaunchLab sur Yellowstone gRPC et enregistre, pour chaque mise à jour de `GlobalConfig` et `PoolState`, si chaque mint est un mint Token ou Token-2022 :

[`raydium-sdk-V2-demo/src/grpc/launchpadPoolInfo.ts`](https://github.com/raydium-io/raydium-sdk-V2-demo/blob/master/src/grpc/launchpadPoolInfo.ts)

C'est une référence compacte pour deux choses que cette version rend nécessaires. Les pools sont classés directement à partir de `token_program_flag`, en décodant les deux bits sans aucune récupération de mint — c'est la correction pour la rupture du bit1 décrite ci-dessus. Les configs ne peuvent pas être classées de cette façon, car un `GlobalConfig` ne stocke que l'adresse de son mint quote et aucun drapeau de programme, donc la démo lit le propriétaire du compte mint une fois et le met en cache par mint. Voir les deux chemins côte à côte est le moyen le plus rapide de vérifier votre propre décodeur.

Voir [`products/launchlab/code-demos`](/fr/products/launchlab/code-demos#watch-configs-and-pools-over-grpc) pour la procédure pas à pas.

## Pages mises à jour

* `products/launchlab/accounts` — programme token du mint quote, disposition du bit de `token_program_flag` et propriété du vault.
* `products/launchlab/instructions` — comptes quote-program, sémantique du slippage des swaps et comptes de migration renommés.
* `products/launchlab/global-config` — `quote_mint` peut être un mint Token-2022, et ce qui le porte ou non.
* `products/launchlab/code-demos` — le watcher config/pool gRPC.
* `reference/token-2022-support` — ligne LaunchLab et section quote-mint.
* `reference/error-codes` — `6023` `CalculateOverflow`.
