Skip to main content
Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
PlatformConfig est la surcouche au niveau de la plateforme qui s’ajoute à GlobalConfig. Tandis que GlobalConfig définit les règles au niveau du protocole (« les frais de trading sont de 1 %, l’offre doit être d’au moins 10M, seul ce portefeuille peut diplômer »), PlatformConfig est ce que chaque plateforme de lancement — pump.fun, l’interface propre de Raydium, les launchpads tiers — utilise pour ajouter ses frais, réclamer sa part du LP post-graduation, restreindre les formes de courbes que leurs lancements peuvent choisir, et afficher leur image de marque (nom, site web, image) on-chain.

Qu’est-ce que c’est

Un compte PlatformConfig gère cinq préoccupations transversales pour une plateforme :
  1. Image de marque — nom, site web, lien d’image, tous stockés en ligne pour que tout explorateur ou agrégateur puisse afficher la plateforme qui a lancé un token.
  2. Frais de plateforme — un frais de trading supplémentaire (fee_rate) en plus du trade_fee_rate du protocole. S’accumule dans le platform_fee_wallet de la plateforme. Plafonné à 100 bps par GlobalConfig.max_share_fee_rate.
  3. Répartition de migration LP — trois entiers stockés (platform_scale, creator_scale, burn_scale) qui totalisent 1_000_000. Avant la mise à jour du 2026-08-17, l’échelle du créateur produisait une clé de frais créateur séparée. Les migrations exécutées après la mise à jour combinent les deux premières en une seule part LP verrouillée appartenant à la plateforme ; le reste est brûlé.
  4. Liste blanche des paramètres de courbe — un Vec<PlatformCurveParam> listant exactement quelles combinaisons (supply, total_base_sell, total_quote_fund_raising, migrate_type, migrate_cpmm_fee_on, vesting_params...) sont autorisées sur cette plateforme. Si le vecteur est vide ou toutes les entrées sont invalides, toute combinaison est autorisée ; sinon les lancements doivent correspondre exactement à l’une des entrées.
  5. Liste blanche de configuration globale — une restriction optionnelle qui nécessite un PlatformAllowConfig créé par la plateforme pour le GlobalConfig sélectionné.
Dérivation PDA :
(Voir create_platform_config dans le code source pour la liste canonique des seeds.)

Disposition

platform_scale + creator_scale + burn_scale doit égaler 1_000_000. Avant la mise à jour du 2026-08-17, creator_scale était verrouillé séparément et sa clé de frais allait au créateur du token. Pour les migrations exécutées après la mise à jour, elle est ajoutée à platform_scale et ses droits LP verrouillés vont à la plateforme à la place. Exemples de résultats selon la logique mise à jour :
  • (0, 100_000, 900_000) — 90 % du LP brûlé, 10 % verrouillé pour la plateforme.
  • (50_000, 100_000, 850_000) — 85 % brûlé, 15 % verrouillé pour la plateforme.
  • (0, 0, 1_000_000) — brûlage complet, pas de frappe NFT. Lancements stricts « sans initiés ».

Champs d’image de marque

name, web et img sont des tableaux d’octets en ligne complétés avec des zéros jusqu’à leurs constantes de taille. Pour les lire en tant que chaînes, découpez jusqu’au premier \0 :
Les constantes sont délibérément généreuses (name: 64, web: 256, img: 256) pour que les plateformes puissent inclure suffisamment de métadonnées pour les explorateurs et agrégateurs sans recourir au stockage hors-chaîne. Tout ce qui dépasse ces tailles revient à CreatePlatformConfig avec InvalidInput.

Mécanique des frais

Un swap sur une courbe liée à un PlatformConfig facture trois frais en couches :
  • trade_fee s’accumule dans le protocol_fee_owner du protocole (réclamé via CollectFee).
  • platform_fee s’accumule dans un coffre par plateforme (réclamé via ClaimPlatformFee ou ClaimPlatformFeeFromVault ; voir instructions).
  • creator_fee s’accumule dans un coffre par créateur clé par la clé publique du créateur + le mint de cotation (réclamé via ClaimCreatorFee).
creator_fee_rate est plafonné par MAX_CREATOR_FEE_RATE = 5000 (50 bps). fee_rate (les frais de plateforme) est plafonné à 10000 (100 bps) par GlobalConfig.max_share_fee_rate.

Répartition de migration NFT (CPMM uniquement)

Quand un lancement diplôme vers CPMM, l’instruction de migration divise les tokens LP frappés par CPMM::InitializeWithPermission de deux façons :
Si lp_to_platform est non-zéro, le programme LP-Lock l’enveloppe dans un NFT clé de frais appartenant à platform_nft_wallet. Cela remplace le comportement pré-mise à jour qui créait des clés de frais de plateforme et de créateur séparées. Les clés de frais créées par les migrations complétées avant la mise à jour restent inchangées. Ce droit de frais LP est séparé des frais de créateur CPMM contrôlés par platform_cp_creator. La part brûlée est brûlée directement, donc aucun compte ne peut la retirer ou réclamer les frais LP représentés par cette part. Les lancements existants avec migrate_type = 0 stocké peuvent toujours utiliser le chemin AMM v4 hérité. La nouvelle initialisation rejette ce type de migration.

Liste blanche des paramètres de courbe

curve_params: Vec<PlatformCurveParam> est le mécanisme de la plateforme pour restreindre les formes de courbes que ses lancements peuvent choisir. Si le vecteur est non-vide et au moins une entrée est valide, le programme applique à Initialize que les paramètres du lancement correspondent exactement à au moins une entrée.
Chaque champ a une valeur sentinelle qui signifie joker (toute valeur correspond) : u64::MAX pour les champs u64, u8::MAX pour les champs u8, 0 pour les champs supply / sell / fund-raising. Un BondingCurveParam avec tous les sentinelles est « autoriser n’importe quoi » — équivalent au comportement de liste blanche vide. L’algorithme de correspondance à Initialize :
  1. Filtrez curve_params aux entrées dont global_config correspond au GlobalConfig choisi du lancement.
  2. Si la liste filtrée est vide, autorisez n’importe quels paramètres (la plateforme n’a rien listé en blanc pour ce GlobalConfig).
  3. Si chaque entrée de la liste filtrée a all_is_invalid() (chaque champ est le joker), autorisez n’importe quels paramètres.
  4. Sinon, itérez les entrées ; pour chaque entrée, vérifiez les paramètres du lancement contre chaque champ non-joker. Si tous les champs non-joker correspondent, acceptez et retournez.
  5. Si aucune entrée n’a correspondu, revenez avec InvalidInput.
Cela permet à une plateforme de dire « nous n’autorisons que la forme standard 1B-supply / 800M-sold / 30k-USDC-raise / no-vesting » en écrivant une seule entrée avec des valeurs concrètes pour ces quatre champs et des jokers partout ailleurs. Ou une plateforme plus stricte pourrait énumérer trois ou quatre formes discrètes, une par niveau de lancement supporté. MAX_CURVE_PARAMS = 10 plafonne la taille de la liste blanche.

PlatformAllowConfig — restreindre une plateforme

Chaque plateforme décide si elle restreint les comptes GlobalConfig que ses lancements peuvent utiliser. Définissez restrict_global_config avec UpdatePlatformConfig::RestrictGlobalConfig(0 | 1).
Seeds PDA : [b"platform_allow_config", platform_config, global_config]. L’administrateur de la plateforme crée ou ferme un compte par paire autorisée via CreatePlatformAllowConfig et ClosePlatformAllowConfig. Quand la restriction est 1, l’initialisation recherche dans remaining_accounts le PDA attendu et rejette un compte manquant avec NotEnoughRemainingAccounts. Quand la restriction est 0, aucun compte d’autorisation n’est requis. Le compte PlatformGlobalAccess géré par l’ancien administrateur du protocole et ses instructions de création/fermeture sont retirés. Les tailles existantes de PlatformConfig et GlobalConfig ne changent pas, mais les décodeurs doivent remplacer l’ancien drapeau global par le nouveau drapeau de plateforme. Les anciens PDAs d’accès ne sont pas consommés par la nouvelle vérification.

Chemin de lecture

Pour une interface montrant « d’où ce token a-t-il été lancé », PoolState.platform_config pointe directement sur le PlatformConfig d’origine — récupérez-le une fois et mettez en cache l’image de marque.

Chemin de mise à jour

Les rotations de portefeuille (platform_fee_wallet, platform_nft_wallet, platform_vesting_wallet, platform_cp_creator, transfer_fee_extension_auth, cpswap_config) passent toutes par UpdatePlatformConfig. Lisez la table de dispatch update_platform_config du code source pour les codes param exacts.

Pièges courants

  • Sentinelles de liste blanche mal définies. Un BondingCurveParam avec total_locked_amount = 0 n’est pas un joker — il correspond aux lancements qui refusent explicitement le vesting. Le joker pour ce champ est u64::MAX. Le même piège existe pour cliff_period et unlock_period. Utilisez clear() (que le programme expose) pour définir correctement les sentinelles.
  • Arrondi de répartition NFT. Les trois échelles doivent totaliser exactement 1_000_000. Les erreurs d’une unité à CreatePlatformConfig reviennent ; les erreurs d’une unité à l’exécution frapperaient ou brûleraient une unité LP supplémentaire, ce que la vérification d’égalité stricte est là pour prévenir.
  • Double allocation de vesting de plateforme. Si platform_vesting_scale > 0, la plateforme doit appeler CreatePlatformVestingAccount une fois après la fin de la levée de fonds du lancement ; si elle oublie, cette part reste non allouée et dormante à jamais (le budget total_locked_amount du lancement est consommé mais la plateforme ne réclame jamais).
  • Ambiguïté de platform_cp_creator. Quand défini à Pubkey::default(), le créateur du lancement est enregistré comme pool_creator du pool CPMM post-graduation ; quand défini à une clé réelle, cette clé est enregistrée à la place. Cela détermine le bénéficiaire des frais de créateur CPMM post-graduation et qui peut signer le chemin original CPMM::CollectCreatorFee. Le chemin de collection sans permission paie toujours les ATAs canoniques de cette clé enregistrée. Décidez au moment de la création de la configuration de plateforme quel modèle vous voulez.
  • Restriction sans compte d’autorisation. Activer restrict_global_config avant de créer le PlatformAllowConfig requis bloque les nouveaux lancements qui sélectionnent cette configuration.

Pointeurs

Sources :
  • raydium-launch/programs/launchpad/src/states/platform_config.rsPlatformConfig, PlatformParams, MigrateNftInfo, PlatformCurveParam, BondingCurveParam, is_valid_curve_param.
  • raydium-launch/programs/launchpad/src/states/platform_allow_config.rsPlatformAllowConfig.
  • raydium-launch/programs/launchpad/src/lib.rs — points d’entrée de configuration de plateforme et de configuration d’autorisation.