Skip to main content
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 à l’Initialize : constant-product (la plus courante, la forme de réserve virtuelle de la courbe x · y = k standard), linear-price, et fixed-price. La formule du seuil de graduation est commune à tous les trois. Cette page détaille les mathématiques 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 structure 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 type Pump utilisent cette forme. La courbe prétend qu’il existe une réserve de citation virtuelle V_q et une réserve de base virtuelle V_b dès le début (stockées sous virtual_quote et virtual_base sur PoolState), donc le pool effectif ressemble à un CPMM avec ces réserves. Les achats suivent les mathématiques x · y = k :
résolu pour base_out :
Prix effectif au base-vendu s :
L’invariant x · y = k identique que LaunchLab applique avant la graduation est alors littéralement la courbe CPMM (ou AMM v4) post-graduation, donc la transmission de graduation est mécaniquement transparente : le prix marginal à base_sold = base_supply_graduation égale le prix auquel le pool post-graduation s’ouvre avec (quote_vault, base_vault_remaining) comme réserves.

Courbe à prix fixe (curve_type = 1)

Une courbe à prix plat. Chaque achat/vente se fait à un prix constant, configurable à l’Initialize :
Utile pour les lancements équitables où l’équipe souhaite une tarification uniforme pour tous les participants indépendamment de quand ils achètent. La graduation se déclenche quand base_supply_graduation a été vendu (la relation de coût linéaire rend quote_reserve_target simple à dériver).

Courbe de prix linéaire (curve_type = 2)

Le prix augmente linéairement avec base_sold :
Coût intégré :
Quadratique en base_sold — les premiers acheteurs paient presque zéro, les derniers acheteurs paient beaucoup plus, le prix marginal augmentant toujours à une pente fixe. L’implémentation on-chain vit dans curve/linear_price.rs.

Comparaison des formes de courbe

Seuil de graduation

quote_reserve_target est calculé à l’Initialize comme la citation requise pour conduire base_sold de 0 à base_supply_graduation :
Un lancement se diplôme dès que quote_vault.balance ≥ quote_reserve_target. Comme les achats arrivent à des tailles discrètes, le solde réel à la graduation peut légèrement dépasser la cible — l’excédent devient de la liquidité supplémentaire du côté citation dans le pool CPMM résultant.

Exemple travaillé — 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.
Prix initial (s = 0) : 0 (la quadratique pure commence à zéro). Prix à 50 % vendu (s = 500_000_000) :
Prix à la graduation (s = 800_000_000) :
Citation requise pour atteindre la graduation (coût intégré) :
Donc ≈ 6.827 unités natives de citation (dans la menthe de citation 6-décimale configurée, par exemple ~6 827 USDC si la citation est USDC). Frais appliqués par-dessus :
Premier achat de 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.9s ≈ 6.22e6 jetons de base achetés.
  • Frais 1% (0.1 USDC) répartis : lp 0.06, creator 0.02, protocol 0.02. La part lp reste dans quote_vault ; les deux autres routent vers leurs compteurs de cumul respectifs.
Achat à 75 % vendu (approchant la graduation) : Les mêmes 10 USDC achètent beaucoup moins de base maintenant parce que la courbe est raide. Une résolution Newton à s₀ = 750e6 avec quote_in_after_fee = 9.9 donne approximativement ∆s ≈ 0.4e6 — une réduction ~15× de base par USDC comparée au premier achat.

Mécanique des frais pendant la phase de courbe

À chaque Buy :
  • lp_share est laissé dans quote_vault. C’est ce qui rend la courbe effective plus serrée (plus de réserve de citation contre le même approvisionnement en base).
  • protocol_share incrémente LaunchState.state_data.protocol_fees_quote.
  • creator_share incrémente LaunchState.state_data.creator_fees_quote.
Sur Sell la même répartition s’applique mais les frais sont prélevés sur la quote_out sortante. Les deux compteurs sont balayés via CollectFees (admin ou creator, chacun sur son propre compteur).

Précision

  • Montants du côté base : u64.
  • Montants du côté citation : u64.
  • Cubes / produits intermédiaires : u128.
  • Les résolutions Newton pour « acheter citation exacte » et « vendre citation exacte » itèrent en u128 à point fixe avec un nombre d’itérations max configurable (par défaut 10). Le mode d’échec est NotConverged — rare en dehors des cas limites proches de la graduation.

Transmission au CPMM

Quand Graduate se déclenche :
Pour la courbe quadratique, cpmm_initial_price est mécaniquement price(base_sold) (c’est le prix de courbe marginal au moment de la transmission). Le pool CPMM s’ouvre exactement à ce prix, donc un observateur passant de l’interface de courbe à l’interface CPMM ne voit aucun saut.

Où aller ensuite

Sources :