Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
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 à la nouvelle instruction ou à la disposition modifiée de
MigrateToAmm.get_upgrade_timestamp, une date limite codée en dur que plusieurs vérifications comparaient à l’horloge ; une Initialize dépréciée qui continuait à fonctionner pendant trois jours après cette date ; et la plomberie OpenBook de MigrateToAmm, qui n’avait rien à faire après qu’AMM v4 ait supprimé sa propre dépendance OpenBook en juillet. Les trois ont disparu. Sur mainnet, le basculement est plusieurs mois dans le passé, donc l’effet comportemental est nul — mais les modes de défaillance ont changé, et une liste de comptes a changé radicalement.
Le framework a également changé au même moment : Anchor 0.32.1 vers =1.0.2, Agave 2.3.0 vers 3.1.10. Et, comme sur AMM v4 et CPMM, il y a une nouvelle instruction admin pour récupérer le loyer.
Le trading, les frais, le vesting, les règles de courbe et la configuration de la plateforme sont inchangés.
TL;DR pour les intégrateurs
- Aucune instruction de trading n’a changé ses comptes, arguments ou mathématiques.
BuyExactIn,BuyExactOut,SellExactIn,SellExactOutsont identiques au byte près. Aucune disposition de compte n’a changé. Initialize(celle dépréciée) échoue maintenant toujours avecNotApproved(6000), avant de lire un compte. UtilisezInitializeV2. Les lancements déjà créés via celle-ci se négocient et se graduent normalement.MigrateToAmmest une rupture majeure pour le portefeuille de migration. Il a perdu les trois arguments (base_lot_size,quote_lot_size,market_vault_signer_nonce) et neuf comptes. Voir ci-dessous.- Les trois
remaining_accountsde trading sont maintenant inconditionnellement requis, et l’emplacementsystem_programest validé. Un constructeur qui les omet échoue maintenant toujours avecNotEnoughRemainingAccounts(6018) au lieu de seulement après le basculement. - Une instruction est ajoutée :
CollectExcessLamports. Admin uniquement. Voirproducts/launchlab/instructions. - Un code d’erreur est ajouté :
6031LamportsCalculateError. Les codes6000–6030sont inchangés. - Trois contraintes d’adresse
MigrateToCpswapont été déplacées dans le corps de l’instruction, changeant leur erreur deConstraintAddress(2012) àRequireKeysEqViolated(2502). - Un rafraîchissement IDL est requis. Une nouvelle instruction, un ensemble d’arguments supprimé, neuf comptes supprimés, une nouvelle variante d’erreur.
MigrateToAmm a perdu sa moitié OpenBook
C’est le changement le plus susceptible de casser quelque chose. Les anciennes données d’instruction portaient 17 octets d’arguments après le discriminateur ; les nouvelles données sont le discriminateur nu. Les anciennes listes de comptes portaient neuf comptes qui n’existent plus dans la struct, donc tout après la première suppression est mal aligné.
Arguments supprimés : base_lot_size: u64, quote_lot_size: u64, market_vault_signer_nonce: u8. Les trois n’existaient que pour configurer le marché OpenBook que le programme avait l’habitude d’initialiser par CPI. Ce CPI — initialize_openbook_market — a disparu, ainsi que la vérification gen_vault_signer_key qui validait le nonce.
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 dernier a disparu parce que Initialize2 d’AMM v4 ne le prend plus.
Le compte market reste, dans sa position d’origine. AMM v4 enregistre toujours le marché comme un champ de référence sur AmmInfo, donc LaunchLab le transmet toujours. Deux choses à ce sujet ont changé : le programme ne l’initialise plus, et il est maintenant entièrement non validé — sa déclaration est un #[account(mut)] nu sans contrainte de propriétaire, d’adresse ou de seeds, car owner = openbook_program.key() a disparu avec le compte openbook_program et rien ne l’a remplacé. Quel que soit le compte que le portefeuille de migration passe là, il est transféré directement dans le CPI Initialize2 d’AMM v4 et enregistré sur le nouveau pool. Un appelant qui veut un marché véritablement initialisé derrière ce champ doit le créer au préalable, et le programme ne le lui dira pas autrement.
La liste de 23 comptes résultante est documentée en intégralité sur products/launchlab/instructions.
MigrateToCpswap n’est pas affecté — il n’a jamais eu d’arguments, et sa liste de comptes est inchangée.
L’Initialize dépréciée échoue toujours
initialize exécutait auparavant une dépréciation en douceur : elle fonctionnait jusqu’à get_upgrade_timestamp() + 3 days, puis retournait NotApproved. Avec l’assistant d’horodatage supprimé, l’échec est inconditionnelle — le gestionnaire est maintenant un msg! et err!(NotApproved) et rien d’autre.
Un détail si vous lisez les journaux : la struct Accounts est inchangée et porte toujours quatre contraintes init, donc le prologue de validation de compte généré par Anchor s’exécute — et crée ces comptes — avant que le gestionnaire ne retourne. La transaction revient de toute façon, donc rien n’est réellement créé, mais l’échec apparaît après la validation du compte plutôt qu’avant.
L’instruction est conservée plutôt que supprimée pour que son discriminateur reste occupé et que l’IDL conserve une forme stable. Ses définitions d’argument et de compte valent toujours la peine d’être documentées pour décoder les transactions historiques, et la page les garde derrière un avertissement.
La porte get_upgrade_timestamp a disparu
L’assistant retournait 0 sous les fonctionnalités local et devnet et l’horodatage mainnet codé en dur 1755522000 (2025-08-18 13:00 UTC) sinon. Quatre instructions comparaient l’horloge à celui-ci, sur cinq références dans la source. Chacun devient la branche post-basculement inconditionnellement :
L’horodatage mainnet est plus d’un an dans le passé, donc un constructeur correct et à jour ne voit aucun changement de comportement. Ce qui a changé, c’est qu’un constructeur obsolète échoue maintenant de manière déterministe au lieu de sembler fonctionner contre une version devnet. La nouvelle validation
system_program est véritablement nouvelle : cet emplacement acceptait auparavant n’importe quel compte.
CollectExcessLamports
L’étape 1 de SIMD-0437 a atterri sur mainnet le 3 septembre 2026, réduisant le minimum exempt de loyer de 9 % avec quatre étapes supplémentaires à venir. Chaque coffre de pool LaunchLab, coffre de frais et PDA détenu par le programme créé avant une étape est maintenant surfinancé.
L’instruction prend quatre comptes fixes — le portefeuille signataire/destination, un PDA d’autorité de coffre, et les deux programmes de jetons — puis n’importe quel nombre de comptes source dans remaining_accounts.
L’emplacement authority est la partie qui vaut la peine d’être lue attentivement. LaunchLab a trois PDAs d’autorité de coffre (vault_auth_seed, platform_fee_vault_auth_seed, creator_fee_vault_auth_seed), et l’instruction résout celui que vous avez passé en re-dérivant les trois et en correspondant ; une clé ne correspondant à aucun échoue avec InvalidOwner (6001). Parce qu’un appel porte une autorité et que le programme de jetons exige que le propriétaire réel de chaque compte signe, les comptes source doivent être groupés par autorité — les coffres de pool, les coffres de frais de plateforme et les coffres de frais de créateur se balaient dans des transactions séparées. Les PDAs détenus par le programme sont débités directement et peuvent voyager avec n’importe quelle autorité.
Le SOL enveloppé suit la même séquence SyncNative → UnwrapLamports de taille delta → assert-unchanged que CPMM et AMM v4 utilisent, avec LamportsCalculateError (6031) si l’aller-retour ne s’élève pas à zéro. Un lancement coté en SOL conserve sa réserve de devis complète.
Les mints de base ne peuvent pas être balayés. InitializeV2 et InitializeWithToken2022 révoquez MintTokens dans la même instruction qui frappe l’offre, donc aucune clé ne peut signer un WithdrawExcessLamports pour un mint de base. Son loyer est bloqué par conception.
Le signataire peut être soit l’administrateur de programme partagé, soit un portefeuille dédié de collecte de lamports ; les adresses sont dans reference/program-addresses.
Relocalisation de contrainte MigrateToCpswap
Trois contraintes de compte ont été déplacées hors de la struct Accounts et dans le corps de l’instruction :
PoolState. Seule la surface d’erreur diffère : le RequireKeysEqViolated générique d’Anchor (2502), signalé sans nom de compte, plutôt que ConstraintAddress (2012) nommant le compte offensant. Mettez à jour tout traitement d’erreur qui correspondait à 2012 pour ces trois comptes.
Changements de chaîne d’outils et de dépendances
Les deux changements de site d’appel d’Anchor 1.0 s’appliquent également ici :
Context s’effondre de quatre paramètres de durée de vie à un, et CpiContext::new prend la Pubkey du programme plutôt que son AccountInfo. Voir sdk-api/rust-cpi.
Deux détails du système de construction sans effet on-chain : la fonctionnalité local a été remplacée par localnet, qui compile le portefeuille local en tant que admin à partir d’une variable d’environnement LAUNCHPAD_LOCALNET_ADMIN (yarn test:local-admin la câble), et le bloc [profile.release] dupliqué dans programs/launchpad/Cargo.toml a été supprimé — Cargo ignore [profile] en dehors de la racine de l’espace de travail, donc le bloc racine était déjà celui en vigueur, y compris le fait que le panic = "abort" du bloc au niveau du programme n’a jamais été appliqué.
Ce qui n’a pas changé
- Chaque disposition de compte.
PoolState,GlobalConfig,PlatformConfig,PlatformCurveRule,PlatformAllowConfig, enregistrements de vesting — mêmes tailles, mêmes décalages. - Codes d’erreur
6000–6030, y compris le6020délibérément conservé. - Mathématiques de courbe, taux de frais, accumulation de frais, calendriers de vesting et division LP de graduation.
- Règles de courbe de plateforme et liste d’autorisation
GlobalConfig. Mêmes instructions, mêmes comptes, mêmes sémantiques ; seule la porte d’horloge autour de la vérification de règle de courbe a disparu. - Liste de comptes
MigrateToCpswapet indicesremaining_accounts. - La remise d’autorité de frais de transfert Token-2022 à la graduation.
- ID du programme. Inchangé.
Pages mises à jour
products/launchlab/instructions—CollectExcessLamportsajouté avec sa liste de comptes, tableau de résolution d’autorité et avertissement de groupage ; suppressions d’arguments et de comptes deMigrateToAmmdocumentées avec la liste nouvelle complète ;Initializeprécédé d’un avertissement d’échec toujours ; nouvelle section « Trade remaining accounts » couvrant les trois comptes maintenant inconditionnels et la vérificationsystem_program;MigrateToCpswapnote sur le chemin autorisé uniquement et les contraintes relocalisées ; inventaire et lignes de matrice de changement d’état.products/launchlab/overview— bannière de version ; les invariants « CPMM uniquement » et mint de base corrigés.products/launchlab/accounts— timing de révocation d’autorité de mint corrigé à la création de lancement (il était documenté à la graduation) ; ligneCollectExcessLamportsajoutée.reference/error-codes—6031documenté.reference/program-addresses— nouvelle section « Excess-lamports collection wallets ».solana-fundamentals/rent-and-reclaimable-rent— nouvelle section « What the Raydium programs sweep on their own side ».sdk-api/rust-cpi,solana-fundamentals/toolchain— Épingles Anchor 1.0 et notes de migration CPI.

