Skip to main content
Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
LaunchLab expose un ensemble d’instructions serré : six appels accessibles aux utilisateurs plus une poignée de primitives administrateur. Le SDK les enveloppe tous ; cette page documente la surface brute pour les agrégateurs, les outils de monitoring et les programmes qui ont besoin de CPI.La mise à niveau du programme 2026-09 a reconstruit LaunchLab sur Anchor 1.0.2 / Solana 3.1.10 et a supprimé trois mécanismes de transition : l’Initialize dépréciée échoue maintenant toujours, MigrateToAmm a perdu ses trois arguments et chaque compte OpenBook, et la porte get_upgrade_timestamp qui rendait plusieurs vérifications conditionnelles à l’horloge a disparu. Elle ajoute également une instruction administrateur, CollectExcessLamports. Voir l’entrée du changelog 2026-09-09.

Inventaire des instructions

La division « ExactIn/ExactOut » reflète celle de CPMM SwapBaseInput / SwapBaseOutput — sur la chaîne, ce sont des discriminateurs d’instruction séparés avec un arrondi légèrement différent. Sélection du chemin de graduation. Chaque nouvel appel 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. L’Initialize hérité ne peut plus créer un lancement du tout (voir ci-dessous). 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é. 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. L’Initialize dépréciée est sans objet ici : son compte de programme de quote est toujours typé en SPL Token, et depuis la mise à niveau 2026-09, l’instruction échoue avant de lire un compte. Lancez via InitializeV2 ou InitializeWithToken2022. MigrateToCpswap est l’autre exception, dans la direction opposée — elle prend les deux programmes sans condition plutôt qu’un par mint. Voir les comptes de migration ci-dessous.

Initialize

Supprimée en effet à partir de la mise à niveau 2026-09 — cette instruction échoue toujours. Le gestionnaire d’initialize n’est maintenant qu’un journal de Not supported. Please use initialize_v2 instruction et NotApproved (6000). Elle est conservée uniquement pour que son discriminateur reste occupé et l’IDL garde une forme stable. (La struct Accounts est inchangée, donc la validation générée par Anchor s’exécute toujours en premier ; la transaction s’annule de toute façon.)Auparavant, elle était contrôlée par l’horloge : elle fonctionnait jusqu’à trois jours après la coupure get_upgrade_timestamp et échouait après. Cet assistant d’horloge a disparu, donc l’échec est maintenant inconditionnelle. Les lancements existants créés via celle-ci ne sont pas affectés — ils échangent et diplôment normalement via MigrateToAmm ou MigrateToCpswap selon leur migrate_type stocké.Les arguments et la liste de comptes ci-dessous sont ceux d’InitializeV2. L’Initialize obsolète prend les mêmes 18 comptes dans le même ordre et seulement les trois premiers arguments — elle n’a pas d’amm_fee_on — et son emplacement quote_token_program est typé SPL Token plutôt qu’Interface<TokenInterface>.
Créer un nouveau lancement. InitializeV2 n’ajoute que l’argument amm_fee_on par rapport à l’Initialize obsolète ; le nombre et l’ordre des comptes sont identiques, et la seule différence au niveau des comptes est que quote_token_program est typé Interface<TokenInterface> afin qu’un mint de quote Token-2022 soit accepté. Arguments Quatre arguments positionnels, et non une seule struct. (InitializeWithToken2022 en ajoute un cinquième, transfer_fee_extension_param: Option<TransferFeeExtensionParams> ; l’Initialize obsolète supprime amm_fee_on.)
La variante doit correspondre à global_config.curve_type, sinon l’instruction est annulée avec InputNotMatchCurveConfig (6003). Il n’y a pas d’open_time, pas d’argument quote_mint (il provient de global_config), pas de struct fees et pas de post_graduation_lp_policy — la disposition du LP est définie sur PlatformConfig, et non par lancement. Comptes — 18 au total (16 déclarés plus les deux ajouts de #[event_cpi]) 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_type est reconnu.
Postconditions
  • base_mint a supply = curve_param.supply, tout dans base_vault.
  • L’autorité de frappe est révoquée dans cette même instruction (set_authority(MintTokens, None)) juste après la frappe de l’offre — et non à la graduation. Le mint de base est donc définitivement à offre fixe, et aucune instruction ultérieure ne peut en frapper davantage.
  • PoolState initialisé avec status = Fund (0), real_a = 0, real_b = 0.
  • total_fund_raising_b vient directement de curve_param.total_quote_fund_raising.
  • Pour InitializeWithToken2022 avec un TransferFeeConfig attaché : transfer_fee_config_authority = launch_authority, et withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth lorsque ce champ est défini, sinon launch_authority. Le côté retrait est écrit à la création du mint précisément pour que la plateforme puisse balayer les frais retenus avant la graduation. Voir platform-config.
Erreurs courantes — NotApproved (6000, inconditionnellement, pour l’Initialize obsolète), InvalidInput (6002, un plancher d’offre / de taux / de lever de fonds de GlobalConfig violé), InputNotMatchCurveConfig (6003, la variante curve_param ne correspond pas à global_config.curve_type), MigrateTypeNotMatch (6007, migrate_type != 1), MathOverflow (6008), VestingRatioTooHigh (6010), NoSupportExtension (6017), NotEnoughRemainingAccounts (6018), InvalidPlatformAllowConfig (6022), CurveParamNotMatchPlatformRule (6025). Un échec de vérification Anchor address = / constraint = se manifeste par un code 2xxx, et non par l’un de ceux-ci — aucun de InvalidQuoteMint, FeeRateTooHigh ou InvalidCurveParams n’existe dans l’énumération d’erreurs du programme.

Buy (variante canonique : BuyExactIn)

L’utilisateur fournit un quote_in fixe ; la courbe calcule base_out. Arguments
Comptes Comptes restants — la plomberie des frais, lue exactement dans cet ordre :
  1. share_fee_receiver — uniquement lorsque share_fee_rate > 0.
  2. system_program — toujours ; vérifié == System::id(), sinon InvalidInput.
  3. platform_fee_vault — PDA [platform_config, quote_token_mint] ; créé à la première utilisation.
  4. creator_fee_vault — PDA [creator, quote_token_mint] ; créé à la première utilisation.
Être à court en retourne NotEnoughRemainingAccounts (6018). Il n’y a pas d’emplacement associated_token_program, et system_program est un compte restant plutôt qu’un compte déclaré. Préconditions
  • launch_state.status == Active.
  • now ≥ open_time.
  • user_quote_ata.balance ≥ quote_in.
  • quote_in > 0.
Effet
  1. Diviser quote_in en quote_in_after_fee et les parties de frais.
  2. Résoudre Newton la courbe pour base_out étant donné la quote post-frais.
  3. require(base_out ≥ minimum_base_out) sinon annuler ExceededSlippage.
  4. Déplacer quote_in utilisateur → coffre. Déplacer base_out coffre → utilisateur.
  5. Mettre à jour base_sold += base_out, quote_reserve_real += quote_in_after_fee × (lp_share / total_share).
  6. Mettre à jour les compteurs de frais (protocol_fees_quote, creator_fees_quote).
  7. state_data.num_buys += 1.
  8. Si quote_reserve_real ≥ quote_reserve_target après la mise à jour, le SDK enchaîne généralement une ix Graduate dans la même transaction. Le programme ne diplôme pas automatiquement à l’intérieur de Buy — un Graduate ultérieur est requis.

BuyExactOut

L’utilisateur spécifie le base_out exact ; le programme calcule quote_in. Arguments
Mêmes comptes que BuyExactIn. Utilise l’intégrale quadratique de forme fermée (ou inverse CPMM, pour curve_type 1) plutôt que l’itération 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 les produits intégrés bruts. Préconditions —
  • user_base_ata.balance ≥ base_in.
  • La vente ne peut pas pousser base_sold en dessous de 0 (redondant avec ce qui précède étant donné que la comptabilité est cohérente).
  • Le lancement est Active.
Effet — symétrique à Buy. base_sold diminue, quote_reserve_real diminue. Les frais s’accumulent toujours.

Frais de transfert côté quote

Lorsque le mint de quote porte un TransferFeeConfig, 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 par rapport au 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 les produits sans frais comme minimum_amount_out, annule avec ExceededSlippage.
  • real_quote n’avance que par ce qui a atteint le coffre. Un BuyExactIn de amount_in sur un mint de quote à 5% déplace real_quote de amount_in × 0.95.
Un mint de quote à frais 100% (10000 points de base) ne peut pas être inversé et annule 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.

Comptes restants d’échange

Les quatre instructions d’échange prennent leur plomberie de frais via remaining_accounts, dans cet ordre :
Modifié en 2026-09 : les trois derniers sont maintenant inconditionnels, et system_program est validé. Avant cette version, le programme ne les lisait que lorsque unix_timestamp >= get_upgrade_timestamp(), et sautait complètement la division des frais plateforme/créateur avant ce moment. L’horodatage est bien passé, donc le comportement sur mainnet est inchangé en pratique — mais la branche a disparu du code, et un constructeur qui omet toujours les trois comptes échoue maintenant toujours avec NotEnoughRemainingAccounts (6018) au lieu de seulement après la coupure. L’emplacement system_program est en outre vérifié par rapport à System::id() et retourne InvalidInput (6002) s’il contient autre chose, où auparavant n’importe quel compte était accepté à cette position.

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-only. MigrateToAmm est conservé pour les pools existants dont le migrate_type stocké est 0. Qui signe
  • MigrateToAmm — le migrate_to_amm_wallet enregistré sur la GlobalConfig de liaison.
  • MigrateToCpswap — le migrate_to_cpswap_wallet enregistré sur la GlobalConfig de liaison.
Ces portefeuilles sont généralement détenus par la manivelle de graduation exploitée par Raydium ; en pratique, la graduation arrive quelques secondes après le franchissement du seuil, quel que soit celui qui a déclenché l’achat final. Arguments Aucun.
Changement de rupture (portefeuille de migration uniquement, 2026-09). MigrateToAmm a supprimé les trois arguments — base_lot_size, quote_lot_size, market_vault_signer_nonce — et neuf comptes. Ses données d’instruction sont maintenant le discriminateur nu, donc un ancien constructeur envoie à la fois 17 octets d’argument inattendus et fournit une liste de comptes qui ne s’aligne plus.Cela suit la propre suppression d’OpenBook d’AMM v4 : l’Initialize2 d’AMM v4 ne prend plus market_program ou amm_open_orders, donc LaunchLab n’avait rien d’autre à transférer. Le programme a également arrêté de CPI-er initialize_openbook_market, ce que les trois arguments configuraient.Comptes supprimés : openbook_program, request_queue, event_queue, bids, asks, market_vault_signer, market_base_vault, market_quote_vault et amm_open_orders. Le compte market reste à sa position — AMM v4 l’enregistre toujours comme champ de référence — mais il est maintenant déclaré comme un simple #[account(mut)] : pas de contrainte de propriétaire, d’adresse ou de graines. Il est complètement non validé, il est transféré directement dans le CPI Initialize2 d’AMM v4, et le programme ne l’initialise plus. Un appelant qui veut que le compte market soit un vrai marché initialisé doit le créer lui-même au préalable.La liste restante de 23 comptes est, dans l’ordre : payer, base_mint, quote_mint, market, amm_program, amm_pool, amm_authority, amm_lp_mint, amm_base_vault, amm_quote_vault, amm_target_orders, amm_config, amm_create_fee_destination, authority, pool_state, global_config, base_vault, quote_vault, pool_lp_token, spl_token_program, associated_token_program, system_program, rent_program.MigrateToCpswap n’est pas affecté — elle n’a jamais eu d’arguments.
Effet (commun aux deux)
  1. Vérifier pool_state.status == Migrate (c.-à-d., quote_reserve_target a été atteint). Sinon, annuler avec PoolMigrated (le statut était déjà Migrated) ou PoolFunding (toujours en financement).
  2. Vérifier pool_state.migrate_type correspond à l’instruction (0 pour AMM, 1 pour CPMM). Sinon, annuler avec MigrateTypeNotMatch.
  3. Calculer les réserves post-graduation :
    • base_amount_out = base_vault.amount − vesting_schedule.total_locked_amount
    • quote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
  4. CPI dans le programme cible (AMM v4 Initialize2 ou CPMM InitializeWithPermission) avec ces réserves pour créer le pool post-graduation.
  5. Pour les migrations CPMM exécutées après la mise à niveau 2026-08-17, combiner platform_scale + creator_scale en une part LP verrouillée détenue par la plateforme et frapper au maximum une NFT Fee Key vers platform_nft_wallet. Brûler le reste burn_scale. Avant la mise à niveau, creator_scale était verrouillé séparément et sa Fee Key allait au créateur de token. Les migrations historiques complétées ne sont pas modifiées. Pour la graduation AMM v4 hérité, la disposition LP suit le flux existant de cette instruction.
  6. (Pas d’étape d’autorité de mint. base_mint.mint_authority était déjà défini sur None à la création du lancement — voir la note ci-dessous.)
  7. Basculer pool_state.status = Migrated, définir vesting_schedule.start_time = block_time + cliff_period.
Transfert d’autorité d’extension de frais de transfert Token-2022 — lorsque le mint de base est un mint Token-2022 portant 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_authority est toujours réassigné. Le PDA authority du lancement le détient pendant toute la phase pré-graduation, donc il y a toujours quelque chose à déplacer.
  • WithheldWithdraw est réassigné uniquement lorsque le PDA authority le détient toujours. Les lancements créés à partir du 2026-08-27 portent déjà transfer_fee_extension_auth sur cette autorité à partir de la création du mint, donc l’étape est sautée. La garde est ce qui empêche la migration d’annuler sur ces mints — le PDA ne peut pas renoncer à une autorité qu’il ne détient plus.
Si 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.
L’approvisionnement du mint de base est fixé à partir de la création, pas à partir de la graduation. InitializeV2 et InitializeWithToken2022 frappent l’approvisionnement entier dans le coffre de base, puis révoquent immédiatement MintTokens dans la même instruction, donc base_mint.mint_authority est None pour toute la vie du lancement. La migration ne le touche pas. (Les révisions antérieures de cette page plaçaient la révocation à la graduation ; c’était faux.) Les seules autorités que la migration peut déplacer sont celles de frais de transfert Token-2022 décrites ci-dessous.
Postconditions — BuyExactIn, BuyExactOut, SellExactIn, SellExactOut rejetteront à partir de ce moment avec PoolMigrated. Le pool AMM résultant est canonique et échange comme n’importe quel autre pool AMM v4 / CPMM. Erreurs courantes — PoolFunding, PoolMigrated, MigrateTypeNotMatch, InvalidCpSwapConfig, MathOverflow.

Comptes restants de migration CPMM

Les clients construisant MigrateToCpswap doivent utiliser ces indices remaining_accounts fixes : L’instruction nécessite au moins dix comptes restants. Les comptes de support-mint sont des entrées CPI en lecture seule. Dérivez les deux adresses même lorsque 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.
Modifié en 2026-09. Deux nettoyages, dont aucun ne change un constructeur correct :
  • Le chemin CPMM autorisé est maintenant le seul chemin. MigrateToCpswap avait l’habitude de choisir entre InitializeCpSwap et InitializeCpSwapWithPermission en fonction de unix_timestamp >= get_upgrade_timestamp(). L’assistant d’horloge et le CPI hérité ont tous deux disparu, donc le chemin autorisé — et donc le minimum de dix comptes — s’applique sans condition.
  • Trois contraintes d’adresse ont été déplacées de la struct de compte dans le corps de l’instruction. platform_config, base_vault et quote_vault sont toujours requis pour correspondre aux valeurs stockées sur PoolState, mais l’inadéquation est maintenant levée par require_keys_eq! plutôt que par la contrainte address = d’Anchor. La vérification est équivalente ; seule la surface d’erreur diffère — vous obtenez le RequireKeysEqViolated générique d’Anchor (2502) au lieu de ConstraintAddress (2012), et il est signalé sans nom de compte. Mettez à jour tout traitement d’erreur qui correspondait à 2012 pour ces trois comptes.

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 lorsqu’aucun mint ne l’utilise, car le mint LP CPMM et la NFT Fee Key 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 quel GlobalConfig autrement valide ; aucun compte d’autorisation n’est requis.
  • 1 : Initialize, InitializeV2 et InitializeWithToken2022 doivent inclure le PlatformAllowConfig correspondant n’importe où dans remaining_accounts.
L’administrateur de plateforme crée ou ferme le PDA avec CreatePlatformAllowConfig et ClosePlatformAllowConfig. Ses graines sont [b"platform_allow_config", platform_config, global_config]. Les anciennes instructions PlatformGlobalAccess gérées par l’administrateur et le PDA sont retirés.

Règles de paramètres de lancement de plateforme

Quatre instructions gèrent un compte PlatformCurveRule. Les quatre sont signées par PlatformConfig.curve_rule_manager ou par l’administrateur de plateforme — le programme accepte l’administrateur 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].
  • Create alloue le compte ne contenant aucun groupe. Cet état ne restreint rien.
  • Update upsert le groupe avec ce group_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 grandit et reçoit le loyer qu’il rétrécit. Un nouveau groupe au-delà du dixième retourne CurveRuleGroupsExceeded ; plus de 25 contraintes, un champ inconnu ou un opérateur, ou la même paire (field, op) deux fois dans un groupe retourne InvalidCurveRuleConstraint ; les quatre champs dérivés de TotalSellA sur une config non-constant-product retournent CurveRuleFieldNotSupportedByCurve.
  • Remove supprime un groupe par id, rétrécissant le compte et remboursant la différence. Un id inconnu retourne CurveRuleGroupNotExist.
  • Close retourne le loyer entier au signataire. La config est alors à nouveau non restreinte même si restrict_curve_param reste 1.
Aucune des quatre ne change si les règles sont appliquées. C’est UpdatePlatformConfig::RestrictCurveParam(0 | 1), que seul l’administrateur 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 lorsqu’il n’existe pas, pour que l’omission ne puisse pas ignorer 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

Balayage administrateur des frais commerciaux accumulés du protocole sur un seul lancement. Arguments — aucun. Comptes
quote_mint vient avant recipient_token_account ici — l’inverse de ClaimCreatorFee, ClaimPlatformFee et ClaimPlatformFeeFromVault, qui placent tous le destinataire en premier. Les deux emplacements ont des types Anchor différents (Mint vs TokenAccount), donc les échanger fait échouer la désérialisation à l’exécution et ressemble à un bug de mauvais compte. CollectMigrateFee a le même ordre que CollectFee.
Effet — transférer pool_state.quote_protocol_fee de quote_vault vers recipient_token_account, puis mettre à zéro le compteur. Appelable n’importe quand après le premier achat.

CollectMigrateFee

Balayage administrateur 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

Balayage 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 vers recipient_token_account. Annule avec une vérification require-greater-than-zero si le coffre est vide.

ClaimPlatformFee

Balayage par plateforme qui draine le coffre de quote d’un lancement directement. Utilisez ceci lorsqu’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 vers recipient_token_account, mettre à zéro le compteur.

ClaimPlatformFeeFromVault

Balayage agrégé 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 vers recipient_token_account. Annule si le coffre est vide.

CollectExcessLamports

Balayage administrateur des lamports assis au-dessus du minimum exempt de loyer sur les comptes que LaunchLab contrôle. Ajouté dans la mise à niveau 2026-09 pour que le protocole puisse récupérer le sur-financement que la réduction de loyer SIMD-0437 laisse derrière sur les comptes créés avant chaque étape. Seul l’excédent se déplace. Les soldes de token, les données de compte, les propriétaires, l’état de la courbe et le vesting ne sont pas touchés, et l’instruction est un no-op par rapport à un compte déjà à son minimum — donc il est sûr de réexécuter après chaque étape de déploiement. Arguments — aucun. Comptes Choisir authority Le compte est passé sans vérification et résolu par le programme, qui re-dérive les trois PDAs d’autorité de LaunchLab et correspond : Une clé ne correspondant à aucune des trois échoue l’instruction entière avec InvalidOwner (6001).
Groupez vos comptes source par autorité. Un appel porte une authority, et le programme de token nécessite que le propriétaire réel du compte signe. Un compte de token détenu par un PDA différent de celui des trois que vous avez passé comme authority fait échouer le CPI et prend la transaction entière avec lui. Balayez les coffres de pool, les coffres de frais de plateforme et les coffres de frais de créateur dans des transactions séparées.Les PDAs détenues par le programme sont l’exception — elles sont débitées directement, donc elles peuvent voyager avec n’importe quelle autorité.
Comment chaque compte source est traité Les mints de base ne peuvent pas être balayés. InitializeV2 et InitializeWithToken2022 révoquent MintTokens sur le mint de base dans la même instruction qui frappe l’approvisionnement, donc aucune clé ne peut signer un WithdrawExcessLamports pour lui — le loyer du mint reste où il est de façon permanente. Erreurs courantes — InvalidOwner (6001, mauvais signataire ou une authority qui n’est aucun des trois PDAs), LamportsCalculateError (6031, l’aller-retour wSOL n’a pas net à zéro), et InsufficientFunds du chemin détenu par le programme lorsqu’un compte détient moins que son propre minimum de loyer. Pas de constructeur SDK. @raydium-io/raydium-sdk-v2 n’expédie pas de constructeur pour cette instruction, et non plus le repo raydium-sdk-V2-demo — c’est un chemin administrateur. Encodez-le à la main, de la façon que le balayage côté portefeuille dans solana-fundamentals/rent-and-reclaimable-rent le fait pour l’instruction du programme de token.

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 :

Matrice de changement d’état

Où aller ensuite

Sources :