Skip to main content
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 aux nouveaux comptes ou instructions.
Une plateforme pouvait déjà restreindre les formes de lancement que ses créateurs pouvaient choisir, via PlatformConfig.curve_params. Ce mécanisme testait l’égalité exacte uniquement : une entrée épinglait soit un champ à une valeur, soit le remplaçait par un caractère générique. Il contenait également au maximum 10 entrées sur tous les GlobalConfig qu’une plateforme supportait, et il résidait sur le compte PlatformConfig lui-même, l’augmentant de 491 octets par entrée. Ces trois propriétés sont entrées en collision à mesure que le protocole ajoutait des configurations. Exprimer « un objectif de levée de fonds entre 50 et 200 SOL » nécessitait une entrée par valeur autorisée et était donc impossible. Les propres planchers de GlobalConfig avaient entre-temps été largement ouverts — taux de 1 bps, limites d’approvisionnement de 99999 — précisément pour que chaque plateforme rentre sous eux, ce qui laissait les plateformes sans moyen de les réduire. Cette version remplace la liste blanche par des règles de courbe : un compte PlatformCurveRule par paire (plateforme, configuration), contenant jusqu’à 10 groupes de vérification, chacun contenant jusqu’à 25 contraintes (champ, opérateur, valeur) sur 19 paramètres de lancement, avec Eq, Gte, Lte et Neq. Les contraintes à l’intérieur d’un groupe sont en ET, les groupes sont en OU. Une plage est un Gte plus un Lte sur le même champ. Le modèle complet et neuf scénarios détaillés se trouvent sur la nouvelle page : products/launchlab/curve-rules.

Résumé pour les intégrateurs

  • PlatformConfig conserve sa taille et tous les décalages de champs existants. C’est un compte fixe de 944 octets. curve_params a disparu ; restrict_curve_param (u8), curve_rule_manager (Pubkey) et les 4 octets que le préfixe de longueur du vecteur occupait sortent tous du remplissage, qui rétrécit de 107 à 78.
  • Les décodeurs doivent abandonner le vecteur final. Un décodeur qui s’attend toujours à Vec<PlatformCurveParam> après le remplissage lira les deux nouveaux champs comme des octets de vecteur. Tout avant le remplissage n’est pas affecté, donc un décodeur qui lit uniquement les portefeuilles de frais et les taux continue de fonctionner sans modification.
  • Les constructeurs de lancement ont besoin d’un compte supplémentaire quand l’indicateur est activé. Tant que restrict_curve_param est 1, InitializeV2 et InitializeWithToken2022 nécessitent le PDA de règle dans remaining_accountsy compris quand le compte n’existe pas, afin que l’omission ne puisse pas contourner la vérification. Dérivation : [b"platform_curve_rule", platform_config, global_config].
  • Aucune plateforme n’est restreinte par défaut. restrict_curve_param est 0 sur chaque compte existant, et 0 signifie que le programme ne lit pas du tout les règles.
  • Deux instructions sont supprimées : UpdatePlatformCurveParam et RemovePlatformCurveParam. Quatre sont ajoutées : CreatePlatformCurveRule, UpdatePlatformCurveRule, RemovePlatformCurveRule, ClosePlatformCurveRule.
  • UpdatePlatformConfig gagne deux variantes : RestrictCurveParam(u64) à l’index de dispatch 13 et CurveRuleManager(Pubkey) à 14. Les indices existants 0–12 sont inchangés.
  • Sept codes d’erreur sont ajoutés, 60246030. 6020 CurveParamIsNotExist est conservé comme espace réservé même si son dernier appelant a disparu, donc rien après lui ne se décale. Voir reference/error-codes.
  • Une actualisation de l’IDL est requise. Nouveau type de compte, quatre nouvelles instructions, deux supprimées, deux nouvelles variantes de dispatch, sept nouveaux codes d’erreur.
  • Vérifiez les règles hors chaîne avant d’envoyer quoi que ce soit. Le SDK expose checkLaunchAgainstCurveRule (reflète la vérification au moment du lancement, comportement de fermeture en cas d’échec inclus) et checkCurveRuleGroupWritable (reflète la validation au moment de l’écriture). Les deux sont des fonctions pures. Voir Vérifier avant d’envoyer.
  • Répétez sur devnet avant d’activer sur mainnet. Activer restrict_curve_param change immédiatement ce que vos créateurs peuvent faire. La séquence recommandée — y compris le lancement d’un jeton qui devrait être rejeté, pour prouver que votre constructeur passe vraiment le compte de règle — se trouve dans Tester sur devnet d’abord.

Ce qu’une règle peut exprimer que la liste blanche ne pouvait pas

Les 19 champs incluent les quatre taux dérivés — SellRateA, LockRate, MigrateRateA, FundRaisingRateB — ce qui rend une règle portable sur les approvisionnements au lieu d’être épinglée à un seul.

Gestion déléguée

PlatformConfig.curve_rule_manager est un portefeuille actif qui peut créer, mettre à jour, supprimer et fermer les comptes de règles de cette plateforme. Éditer les règles est une routine et une clé d’administrateur de plateforme est généralement un multisig ; c’est le champ qui garde le multisig hors de la boucle. Définissez-le une fois via UpdatePlatformConfig::CurveRuleManager. L’administrateur de la plateforme conserve le même pouvoir en parallèle — le programme l’accepte en re-dérivant le PDA PlatformConfig à partir du signataire — donc une clé gestionnaire perdue est récupérable en faisant pivoter le champ. Pubkey::default() signifie administrateur uniquement. Une clé gestionnaire compromise peut assouplir ou supprimer les règles de paramètres et récupérer le loyer d’un compte de règle. Elle ne peut pas basculer restrict_curve_param, toucher à un portefeuille de frais, un champ de vesting ou une configuration CPMM, ou violer une limite GlobalConfig.

Loyer et taille

Un compte de règle est créé sans groupe et redimensionné à chaque modification, donc une plateforme paie pour les règles qu’elle a réellement écrites, et supprimer un groupe rembourse la différence au signataire. Parce que la taille est dynamique, les décodeurs doivent lire la longueur réelle du compte plutôt que d’assumer une constante.

Coût de calcul au lancement

La vérification s’exécute à chaque lancement tant qu’elle est activée. Mesuré de bout en bout — dérivation PDA, scan remaining_accounts, désérialisation, évaluation : Une contrainte dérivée coûte environ 223 CU contre environ 48 pour une lecture de champ direct. Même une règle complètement chargée reste dans un tiers du budget par instruction par défaut de 200 000 CU. Les groupes sont évalués jusqu’à ce qu’un corresponde, donc le niveau le plus utilisé doit être en premier.

La migration unique

Les plateformes qui utilisaient la liste blanche ont été migrées par le protocole en une seule passe, avant que l’indicateur soit disponible pour s’activer. Une autorité dédiée a exécuté une transaction par plateforme qui a traduit chaque entrée héritée dans les groupes de vérification du compte de règle de la configuration qu’elle nommait, a effacé les entrées de PlatformConfig et a réduit ce compte à 944 octets. La traduction a préservé exactement l’ancienne sémantique : chaque entrée est devenue un groupe, chaque champ non-sentinelle est devenu une contrainte Eq, et une entrée tout-sentinelle — qui correspondait à chaque lancement — est devenue un groupe sans contraintes, qui correspond également à chaque lancement. La migration a écrit les règles mais ne les a pas activées. Une plateforme migrée est restée sans restriction jusqu’à ce qu’elle définisse elle-même restrict_curve_param à 1. L’instruction de migration a été supprimée du programme maintenant que la passe est terminée, ainsi que le champ hérité qu’elle lisait.

Ce qui n’a pas changé

  • GlobalConfig. Même disposition, mêmes limites, mêmes instructions. Les règles réduisent ces limites et sont vérifiées aux côtés d’elles ; elles ne peuvent jamais en élargir une.
  • Les listes de comptes et les arguments des instructions de lancement. InitializeV2 et InitializeWithToken2022 prennent les mêmes comptes fixes et les mêmes arguments. Seul remaining_accounts gagne une entrée, et uniquement tant que l’indicateur est activé.
  • Les chemins de trading, graduation, frais et vesting. Inchangés.
  • PlatformAllowConfig. Inchangé et sans rapport : il décide quelles configurations les lancements d’une plateforme peuvent utiliser, tandis qu’une règle décide quels paramètres dans une configuration. Les deux indicateurs sont indépendants.
  • Codes d’erreur 60006023. Inchangés, 6020 inclus.
  • La taille de PlatformConfig et les décalages pré-remplissage. Inchangés, donc les comptes existants n’ont besoin d’aucune migration propre.

Pages mises à jour

  • products/launchlab/curve-rulesnouvelle page. Le modèle à trois niveaux, les tableaux des 19 champs et 4 opérateurs, neuf scénarios, la restriction de type de courbe, les deux assistants de vérification hors chaîne, la séquence de répétition devnet, la gestion déléguée, le loyer, l’ordre de déploiement et le coût de calcul.
  • products/launchlab/platform-config — « Liste blanche des paramètres de courbe » remplacée par « Règles de paramètres de lancement » ; disposition mise à jour pour restrict_curve_param, curve_rule_manager et le remplissage de 78 octets ; tableau du chemin de mise à jour, extrait du chemin de lecture et pièges réécrits.
  • products/launchlab/instructions — nouvelle section « Règles de paramètres de lancement de plateforme » couvrant les quatre instructions, leurs comptes, arguments et erreurs ; ligne d’inventaire remplacée.
  • products/launchlab/accountsPlatformCurveRule ajouté à l’inventaire et donné sa propre section avec la disposition complète et l’avertissement de taille variable.
  • reference/error-codes60246030 documentés ; 6018 et 6020 annotés.