Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
LaunchLab expose un ensemble d’instructions compact : six appels accessibles aux utilisateurs plus quelques primitives d’administration. Le SDK les encapsule tous ; cette page documente la surface brute pour les agrégateurs, les outils de monitoring et les programmes qui ont besoin de CPI.
Inventaire des instructions
La division « ExactIn/ExactOut » reflète celle de CPMM
SwapBaseInput / SwapBaseOutput — sur la chaîne, ce sont des discriminateurs d’instruction distincts avec un arrondi légèrement différent.
Sélection du chemin de graduation. Chaque nouvel appel Initialize, InitializeV2 et InitializeWithToken2022 doit définir migrate_type = 1 (CPSWAP). Toute tentative d’initialiser un nouveau pool lié à AMM v4 retourne MigrateTypeNotMatch. amm_creator_fee_on sélectionne uniquement si les frais de créateur CPMM résultants s’appliquent au token de quote ou aux deux tokens ; il ne sélectionne pas le programme cible.
MigrateToAmm reste appelable pour un PoolState existant qui a été initialisé avec migrate_type = 0 avant cette restriction. La version ne réécrit pas l’état du pool existant ni ne supprime l’instruction héritée.
Programme de token côté quote. Le mint de quote peut être détenu par le programme SPL Token ou Token-2022. Chaque instruction qui le touche — CreateConfig, InitializeV2, InitializeWithToken2022, les quatre instructions d’échange, CollectFee, CollectMigrateFee, ClaimCreatorFee, ClaimPlatformFee et ClaimPlatformFeeFromVault — prend le programme propriétaire dans son emplacement de compte de programme de quote. Les positions de compte n’ont pas changé ; seule la valeur acceptée a changé. Passez le programme qui possède réellement GlobalConfig.quote_mint, que vous pouvez lire à partir du bit1 de PoolState.token_program_flag pour un lancement existant (voir accounts) ou à partir du propriétaire du compte mint sinon.
Le Initialize déprécié est l’exception : son compte de programme de quote est toujours typé en SPL Token, donc une config dont le mint de quote est Token-2022 doit être lancée via InitializeV2 ou InitializeWithToken2022.
MigrateToCpswap est l’autre exception, dans la direction opposée — il prend les deux programmes sans condition plutôt qu’un par mint. Voir les comptes de migration ci-dessous.
Initialize
Créer un nouveau lancement.
Arguments
Préconditions
quote_mint ∈ launch_config.allowed_quote_mints.base_supply_graduation ≤ base_supply_max.- Les paramètres de frais passent les vérifications
launch_config.max_*_fee_rate. open_time ≥ now − slop(le SDK applique≥ now; le programme tolère un léger antidatage).curve_typeest reconnu.
base_mintasupply = base_supply_max, tout dansbase_vault.base_mint.mint_authority = launch_authority,freeze_authority = None.LaunchStateinitialisé avecstatus = Active,base_sold = 0,quote_reserve_real = 0.quote_reserve_targetcalculé à partir des paramètres de courbe +base_supply_graduation+buy_numerator(approximativement).- Pour
InitializeWithToken2022avec unTransferFeeConfigattaché :transfer_fee_config_authority = launch_authority, etwithdraw_withheld_authority = PlatformConfig.transfer_fee_extension_authquand ce champ est défini, sinonlaunch_authority. Le côté retrait est écrit à la création du mint précisément pour que la plateforme puisse récupérer les frais retenus avant la graduation. Voirplatform-config.
InvalidQuoteMint, FeeRateTooHigh, InvalidCurveParams, MathOverflow.
Buy (variante canonique : BuyExactIn)
L’utilisateur fournit un quote_in fixe ; la courbe calcule base_out.
Arguments
Préconditions
launch_state.status == Active.now ≥ open_time.user_quote_ata.balance ≥ quote_in.quote_in > 0.
- Diviser
quote_inenquote_in_after_feeet les parties de frais. - Résoudre par Newton la courbe pour
base_outétant donné le quote post-frais. require(base_out ≥ minimum_base_out)sinon revenirExceededSlippage.- Déplacer
quote_inutilisateur → coffre. Déplacerbase_outcoffre → utilisateur. - Mettre à jour
base_sold += base_out,quote_reserve_real += quote_in_after_fee × (lp_share / total_share). - Mettre à jour les compteurs de frais (
protocol_fees_quote,creator_fees_quote). state_data.num_buys += 1.- Si
quote_reserve_real ≥ quote_reserve_targetaprès la mise à jour, le SDK enchaîne généralement une instructionGraduatedans la même transaction. Le programme ne diplôme pas automatiquement à l’intérieur deBuy— unGraduateultérieur est requis.
BuyExactOut
L’utilisateur spécifie le base_out exact ; le programme calcule quote_in.
Arguments
BuyExactIn. Utilise l’intégrale quadratique de forme fermée (ou l’inverse CPMM, pour curve_type 1) plutôt que l’itération de Newton.
Sell / SellExactIn / SellExactOut
Miroir de Buy. L’utilisateur retourne base_in à la courbe et reçoit quote_out. Les frais sont déduits de quote_out, donc l’utilisateur reçoit moins que le produit intégré brut.
Préconditions —
user_base_ata.balance ≥ base_in.- La vente ne peut pas pousser
base_solden dessous de 0 (redondant avec ce qui précède étant donné que la comptabilité est cohérente). - Le lancement est
Active.
Buy. base_sold diminue, quote_reserve_real diminue. Les frais s’accumulent toujours.
Frais de transfert côté quote
Quand le mint de quote porte unTransferFeeConfig, le montant que le coffre déplace et le montant que le payeur est débité ou crédité diffèrent, et la limite de slippage est vérifiée contre le côté du payeur. Sur un mint de quote sans l’extension, chaque cas ci-dessous est identique à un mint hérité simple.
Deux conséquences pour les devis :
- Une limite calculée comme si le mint était sans frais est rejetée. Passer le coût sans frais comme
maximum_amount_in, ou le produit sans frais commeminimum_amount_out, revient avecExceededSlippage. real_quoten’avance que par ce qui a atteint le coffre. UnBuyExactIndeamount_insur un mint de quote à 5% déplacereal_quotedeamount_in × 0.95.
10000 points de base) ne peut pas être inversé et revient avec CalculateOverflow sur les chemins exact-out.
Les deux mints côté échange sont également limités au programme passé dans leur emplacement correspondant, donc un base_token_program mal assorti échoue maintenant plutôt que d’être ignoré. Voir algorithms/token-2022-transfer-fees pour les mathématiques de frais sous-jacentes.
MigrateToAmm / MigrateToCpswap
Diplômer un lancement dans un pool tradable une fois que la courbe a atteint total_quote_fund_raising. Les nouveaux lancements sont CPMM uniquement. MigrateToAmm est conservé pour les pools existants dont le migrate_type stocké est 0.
Qui signe
MigrateToAmm— lemigrate_to_amm_walletenregistré sur laGlobalConfigde liaison.MigrateToCpswap— lemigrate_to_cpswap_walletenregistré sur laGlobalConfigde liaison.
MigrateToAmm prend trois (principalement des paramètres de marché OpenBook que le programme transmet à AMM v4) :
MigrateToCpswap n’en prend aucun.
Effet (commun aux deux)
- Vérifier
pool_state.status == Migrate(c.-à-d.,quote_reserve_targeta été atteint). Sinon revenir avecPoolMigrated(le statut était déjàMigrated) ouPoolFunding(toujours en financement). - Vérifier que
pool_state.migrate_typecorrespond à l’instruction (0pour AMM,1pour CPMM). Sinon revenir avecMigrateTypeNotMatch. - Calculer les réserves post-graduation :
base_amount_out = base_vault.amount − vesting_schedule.total_locked_amountquote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
- CPI dans le programme cible (
AMM v4 Initialize2ouCPMM InitializeWithPermission) avec ces réserves pour créer le pool post-graduation. - Pour les migrations CPMM exécutées après la mise à niveau du 2026-08-17, combinez
platform_scale + creator_scaleen une part LP verrouillée détenue par la plateforme et frappez au maximum une clé de frais NFT versplatform_nft_wallet. Brûlez le resteburn_scale. Avant la mise à niveau,creator_scaleétait verrouillé séparément et sa clé de frais allait au créateur de token. Les migrations historiques complétées ne sont pas modifiées. Pour la graduation AMM v4 héritée, la disposition LP suit le flux existant de cette instruction. - Révoquer
base_mint.mint_authority(défini àNone). - Basculer
pool_state.status = Migrated, définirvesting_schedule.start_time = block_time + cliff_period.
TransferFeeConfig et PlatformConfig.transfer_fee_extension_auth est non-défaut, la migration réassigne également les autorités de cette extension à la clé de plateforme :
transfer_fee_config_authorityest toujours réassigné. Le PDAauthoritydu lancement le détient pendant toute la phase pré-graduation, donc il y a toujours quelque chose à déplacer.WithheldWithdrawest réassigné uniquement quand le PDAauthorityle détient toujours. Les lancements créés à partir du 2026-08-27 portent déjàtransfer_fee_extension_authsur cette autorité à partir de la création du mint, donc l’étape est ignorée. La garde est ce qui empêche la migration de revenir sur ces mints — le PDA ne peut pas renoncer à une autorité qu’il ne détient plus.
transfer_fee_extension_auth est Pubkey::default() au moment de la migration, aucune autorité ne se déplace et les deux restent avec le PDA authority de façon permanente. Voir platform-config.
Postconditions — BuyExactIn, BuyExactOut, SellExactIn, SellExactOut rejetteront à partir de ce moment avec PoolMigrated. Le pool AMM résultant est canonique et se négocie comme n’importe quel autre pool AMM v4 / CPMM.
Erreurs courantes — PoolFunding, PoolMigrated, MigrateTypeNotMatch, InvalidCpSwapConfig, MathOverflow.
Comptes restants de migration CPMM
Les clients construisantMigrateToCpswap doivent utiliser ces indices remaining_accounts fixes :
L’instruction nécessite au moins dix comptes restants sur le chemin mis à niveau. Les comptes de support-mint sont des entrées CPI en lecture seule. Dérivez les deux adresses même quand le mint n’a pas d’enregistrement de support initialisé. Les anciens constructeurs qui ajoutent toujours des comptes de verrouillage de créateur ou omettent les indices 8–9 doivent être mis à jour.
Programmes de token de migration CPMM
MigrateToCpswap prend les deux programmes de token sans condition et détermine lui-même quel programme possède chaque mint. Ses deux comptes de programme de token ont été renommés en conséquence :
Ils remplacent l’ancien
base_token_program (quel que soit le programme qui possédait le mint de base) et quote_token_program (toujours hérité). Les positions sont inchangées, donc c’est un changement de valeur plutôt qu’un changement de disposition — mais les deux valeurs sont proches d’être inversées, et un constructeur qui continue de passer son ancienne paire fournira Token-2022 où le programme hérité est requis dès que l’un des mints est un mint Token-2022.
Le programme hérité est requis même quand aucun mint ne l’utilise, car le mint LP CPMM et la clé de frais NFT de liquidité verrouillée vivent toujours sur lui.
Liste d’autorisation GlobalConfig de plateforme
PlatformConfig.restrict_global_config contrôle la vérification :
0: la plateforme accepte n’importe quelGlobalConfigvalide par ailleurs ; aucun compte d’autorisation n’est requis.1:Initialize,InitializeV2etInitializeWithToken2022doivent inclure lePlatformAllowConfigcorrespondant n’importe où dansremaining_accounts.
CreatePlatformAllowConfig et ClosePlatformAllowConfig. Ses graines sont [b"platform_allow_config", platform_config, global_config]. Les anciennes instructions PlatformGlobalAccess gérées par l’admin et le PDA sont retirés.
Règles de paramètres de lancement de plateforme
Quatre instructions gèrent un comptePlatformCurveRule. Les quatre sont signées par PlatformConfig.curve_rule_manager ou par l’admin de plateforme — le programme accepte l’admin en re-dérivant le PDA PlatformConfig à partir du signataire, donc aucun compte séparé ne le prouve. Un signataire qui n’est ni l’un ni l’autre retourne InvalidCurveRuleAuthority.
platform_curve_rule est le PDA à [b"platform_curve_rule", platform_config, global_config].
Createalloue le compte ne contenant aucun groupe. Cet état ne restreint rien.Updateupsert le groupe avec cegroup_id, le remplaçant entièrement s’il existe. Il redimensionne le compte pour l’adapter, donc le signataire complète le loyer qu’il augmente et reçoit le loyer qu’il diminue. Un nouveau groupe au-delà du dixième retourneCurveRuleGroupsExceeded; plus de 25 contraintes, un champ inconnu ou un opérateur, ou la même paire(field, op)deux fois dans un groupe retourneInvalidCurveRuleConstraint; les quatre champs dérivés deTotalSellAsur une config non-produit constant retournentCurveRuleFieldNotSupportedByCurve.Removesupprime un groupe par id, rétrécissant le compte et remboursant la différence. Un id inconnu retourneCurveRuleGroupNotExist.Closeretourne le loyer entier au signataire. La config est alors à nouveau sans restriction même sirestrict_curve_paramreste1.
UpdatePlatformConfig::RestrictCurveParam(0 | 1), que seul l’admin de plateforme peut appeler.
Sur le chemin de lancement. Tandis que restrict_curve_param est 1, InitializeV2 et InitializeWithToken2022 nécessitent le PDA de règle dans remaining_accounts — y compris quand il n’existe pas, pour que l’omission ne puisse pas contourner la vérification. Un compte manquant est NotEnoughRemainingAccounts ; un lancement qui ne satisfait aucun groupe est CurveParamNotMatchPlatformRule. La vérification s’exécute avant les propres limites de GlobalConfig et ne peut que les réduire. Modèle et playbooks : products/launchlab/curve-rules. Les deux erreurs sont évitables côté client — le SDK reflète cette vérification comme une fonction pure, voir Vérifier avant d’envoyer.
CollectFee
Récupération admin des frais commerciaux accumulés du protocole sur un seul lancement.
Arguments — aucun.
Comptes
Effet — transférer
pool_state.quote_protocol_fee de quote_vault à recipient_token_account, puis mettre le compteur à zéro. Appelable n’importe quand après le premier achat.
CollectMigrateFee
Récupération admin des frais de migration accumulés à la graduation. Même forme de compte que CollectFee avec migrate_fee_owner comme signataire (au lieu de protocol_fee_owner) et pool_state.migrate_fee comme compteur drainé.
ClaimCreatorFee
Récupération par créateur des frais de créateur accumulés sur chaque lancement que le créateur possède qui utilise le même mint de quote. Draine le coffre de frais par créateur, pas celui par pool.
Arguments — aucun.
Comptes
Effet — transférer le solde entier de
creator_fee_vault à recipient_token_account. Revient avec une vérification require-greater-than-zero si le coffre est vide.
ClaimPlatformFee
Récupération par plateforme qui draine directement le coffre de quote d’un lancement. Utilisez ceci quand une plateforme veut réclamer sa part pour un lancement spécifique sans passer par le coffre de plateforme agrégé.
Arguments — aucun.
Comptes
Effet — transférer
pool_state.platform_fee de quote_vault à recipient_token_account, mettre le compteur à zéro.
ClaimPlatformFeeFromVault
Récupération agrégée par plateforme. Draine le coffre de frais par mint de quote de la plateforme qui accumule les frais de chaque lancement acheminé via la plateforme.
Arguments — aucun.
Comptes
Effet — transférer le solde complet de
platform_fee_vault à recipient_token_account. Revient si le coffre est vide.
Instructions de vesting et de configuration de plateforme
Celles-ci sont documentées sur des pages dédiées car chacune a son propre modèle d’état :CreateVestingAccount,CreatePlatformVestingAccount,ClaimVestedTokenCreatePlatformConfig,UpdatePlatformConfig,CreatePlatformAllowConfig,ClosePlatformAllowConfigCreatePlatformCurveRule,UpdatePlatformCurveRule,RemovePlatformCurveRule,ClosePlatformCurveRuleCreateConfig,UpdateConfig
Matrice de changement d’état
Où aller ensuite
products/launchlab/code-demos— exemples TypeScript pour chaque instruction.products/launchlab/accounts— forme d’état complète.reference/error-codes— énumération d’erreur LaunchLab.
- Module Raydium SDK v2
LaunchLab - Source du programme Raydium LaunchLab

