Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
LaunchLab supporte trois formes de courbe sélectionnées à
Initialize : constant-product (la plus courante, forme de réserve virtuelle de la courbe standard x · y = k), linear-price, et fixed-price. La formule du seuil de graduation est partagée entre les trois. Cette page détaille les mathématiques du constant-product ; les formes linéaire et fixe sont résumées à la fin.Paramètres stockés sur LaunchState
Les noms de champs dans la struct Rust correspondent aux champs
PoolState décrits dans accounts ; les unités ci-dessus sont conceptuelles.
Courbe constant-product avec réserves virtuelles (curve_type = 0)
La courbe par défaut et la plus utilisée. Tous les lancements de style Pump utilisent cette forme. La courbe prétend qu’il existe une réserve de quote virtuelle V_q et une réserve de base virtuelle V_b dès le départ (stockées comme virtual_quote et virtual_base sur PoolState), de sorte que le pool effectif ressemble à un CPMM avec ces réserves. Les achats suivent les mathématiques x · y = k :
base_out :
s :
x · y = k que LaunchLab applique avant la graduation est alors la courbe CPMM après la graduation, de sorte que la transition est mécaniquement transparente : le prix marginal à base_sold = base_supply_graduation est égal au prix auquel le pool post-graduation s’ouvre avec (quote_vault, base_vault_remaining) comme réserves.
Courbe fixed-price (curve_type = 1)
Une courbe à prix plat. Chaque achat/vente se fait à un prix constant, configurable à Initialize :
base_supply_graduation a été vendu (la relation de coût linéaire rend quote_reserve_target simple à dériver).
Courbe linear-price (curve_type = 2)
Le prix augmente linéairement avec base_sold :
base_sold — les premiers acheteurs paient près de zéro, les derniers acheteurs paient beaucoup plus, le prix marginal augmentant toujours à une pente fixe. L’implémentation on-chain se trouve dans curve/linear_price.rs.
Comparaison des formes de courbe
Seuil de graduation
quote_reserve_target est calculé à Initialize comme le quote requis pour faire passer base_sold de 0 à base_supply_graduation :
quote_vault.balance ≥ quote_reserve_target. Comme les achats arrivent en tailles discrètes, le solde réel à la graduation peut légèrement dépasser la cible — l’excédent devient une liquidité supplémentaire du côté quote dans le pool CPMM résultant.
Exemple détaillé — un lancement quadratique
Paramètres :base_supply_max = 1_000_000_000(1 milliard de jetons de base, 6 décimales)base_supply_graduation = 800_000_000(80% vendus déclenchent la graduation)k = 40(échelle de prix)- Frais : 1% achat, 1% vente, répartition
lp:creator:protocol = 60:20:20.
s = 0) : 0 (la quadratique pure commence à zéro).
Prix à 50% vendu (s = 500_000_000) :
s = 800_000_000) :
10 USDC :
- État virtuel :
s = 0,quote_vault = 0. - Soustraire les frais :
quote_after_fee = 10 × 0.99 = 9.9. - Résoudre
(40 / (3e18)) × s³ = 9.9e6— 9,9 USDC en unités natives à 6 décimales, les mêmes unités que celles du6.827e9ci-dessus ⇒s ≈ 9.06e7jetons de base achetés. - Frais de 1% (
0.1 USDC) répartis : lp0.06, creator0.02, protocol0.02. La part lp reste dansquote_vault; les deux autres vont vers leurs compteurs d’accumulation respectifs.
s₀ = 750e6 avec quote_in_after_fee = 9.9e6 donne ∆s ≈ 4.4e5 — une réduction de ~200× en base par USDC comparé au premier achat.
Mécanique des frais pendant la phase de courbe
À chaqueBuy :
lp_sharereste dansquote_vault. C’est ce qui rend la courbe effective plus serrée (plus de réserve de quote contre la même offre de base).protocol_shareincrémenteLaunchState.state_data.protocol_fees_quote.creator_shareincrémenteLaunchState.state_data.creator_fees_quote.
Sell, la même répartition s’applique mais les frais sont prélevés sur le quote_out sortant.
Les deux compteurs sont balayés via CollectFees (admin ou créateur, chacun vers son propre compteur).
Précision
- Montants côté base :
u64. - Montants côté quote :
u64. - Cubes / produits intermédiaires :
u128. - « Acheter quote exact » et « vendre quote exact » s’inversent sous forme fermée — la courbe à produit constant algébriquement, la courbe à prix fixe par division, la courbe à prix linéaire par une racine carrée. Il n’y a pas de solveur de Newton dans le programme, pas de plafond d’itérations, et pas d’erreur
NotConverged.
Transition vers CPMM
QuandGraduate se déclenche :
cpmm_initial_price est exactement price(base_sold), le prix marginal de la courbe au moment de la transition, de sorte qu’un observateur passant de l’interface de courbe à l’interface CPMM ne voit aucun saut. Pour une courbe à prix quadratique, ce n’est pas le cas : la moyenne intégrée est supérieure au prix marginal (d’un facteur 4/3 dans l’exemple ci-dessus), et un saut à la transition est donc attendu.
Où aller ensuite
products/launchlab/accounts— les champsLaunchStatestockant ces paramètres.products/launchlab/instructions— listes de comptesBuy,Sell,Graduate.algorithms/constant-product— les mathématiques CPMM que le pool post-graduation utilise.
- Raydium SDK v2
LaunchLabmodule - Source du programme Raydium LaunchLab

