Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
LaunchLab は Initialize で選択できる 3 つのカーブ形状をサポートしています:constant-product(最も一般的で、標準的な x · y = k カーブの仮想リザーブ形式)、linear-price、fixed-price。卒業閾値の公式は 3 つすべてで共通です。このページでは constant-product の数学を詳しく説明し、linear 形式と fixed 形式は最後にまとめています。

LaunchState に保存されるパラメータ

Rust 構造体のフィールド名は accounts で説明されている PoolState フィールドと一致します。上記の単位は概念的なものです。

仮想リザーブを使用した constant-product カーブ(curve_type = 0)

デフォルトで最も使用されるカーブです。Pump スタイルのローンチはすべてこの形式を使用します。カーブは最初から 仮想クォートリザーブ V_q と 仮想ベースリザーブ V_b が存在すると想定し(PoolState の virtual_quote と virtual_base として保存)、有効なプールは これらのリザーブを持つ CPMM のように見えます。買いは x · y = k の数学に従います:
base_out について解くと:
ベース売却 s での有効価格:
LaunchLab が卒業前に適用する同じ x · y = k 不変量は、卒業後の CPMM カーブでもあるため、ハンドオフは機械的にシームレスです:base_sold = base_supply_graduation での限界価格は、卒業後プールが (quote_vault, base_vault_remaining) をリザーブとして開く価格と等しくなります。

Fixed-price カーブ(curve_type = 1)

フラット価格カーブです。すべての買い・売りは定数価格で発生し、Initialize で設定可能です:
チームがすべての参加者に対して買いのタイミングに関わらず統一価格を望むフェアローンチに有用です。base_supply_graduation が売却されたときに卒業がトリガーされます(線形コスト関係により quote_reserve_target の導出は簡単です)。

Linear-price カーブ(curve_type = 2)

価格は base_sold に対して線形に増加します:
統合コスト:
base_sold に対して二次関数です。早期の買い手はほぼゼロを支払い、後期の買い手は大幅に多く支払い、限界価格は常に固定スロープで上昇します。オンチェーン実装は curve/linear_price.rs にあります。

カーブ形状の比較

卒業閾値

quote_reserve_target は Initialize で計算され、base_sold を 0 から base_supply_graduation に駆動するために必要なクォートです:
ローンチは quote_vault.balance ≥ quote_reserve_target になるとすぐに卒業します。買いは離散的なサイズで来るため、卒業時の実際の残高はターゲットをわずかに超える可能性があります。余剰は結果の CPMM プールの追加クォート側流動性になります。

具体例 — 二次ローンチ

パラメータ:
  • base_supply_max = 1_000_000_000 (10 億ベーストークン、6 デシマル)
  • base_supply_graduation = 800_000_000 (80% 売却で卒業トリガー)
  • k = 40 (価格スケール)
  • フィー:買い 1%、売り 1%、分割 lp:creator:protocol = 60:20:20。
初期価格(s = 0):0 (純粋な二次関数はゼロから始まります)。 50% 売却時の価格(s = 500_000_000):
卒業時の価格(s = 800_000_000):
卒業に到達するために必要なクォート(統合コスト):
したがって、約 6.827 クォートネイティブユニット(設定されているクォートミント内、例えば USDC がクォートの場合は約 6,827 USDC)。 適用されるフィー:
最初の買い 10 USDC:
  • 仮想状態:s = 0、quote_vault = 0。
  • フィーを差し引く:quote_after_fee = 10 × 0.99 = 9.9。
  • (40 / (3e18)) × s³ = 9.9e6 を解く — 9.9 USDC をネイティブの 6 デシマル単位で表したもので、上記の 6.827e9 と同じ単位です ⇒ s ≈ 9.06e7 ベーストークンが買われます。
  • 1% フィー(0.1 USDC)分割:lp 0.06、creator 0.02、protocol 0.02。lp シェアは quote_vault に留まります。他の 2 つはそれぞれのアクルーアルカウンターにルーティングされます。
75% 売却時の買い(卒業に接近): 同じ 10 USDC では、カーブが急勾配になったため、はるかに少ないベースしか買えません。s₀ = 750e6 で quote_in_after_fee = 9.9e6 として解くと ∆s ≈ 4.4e5 となり、最初の買いと比べて USDC あたりのベースが 約 200 倍 減少しています。

カーブフェーズ中のフィーメカニクス

すべての Buy で:
  • lp_share は quote_vault に留まります。これが有効なカーブをより厳しくする(同じベース供給に対してより多くのクォートリザーブ)ものです。
  • protocol_share は LaunchState.state_data.protocol_fees_quote をインクリメントします。
  • creator_share は LaunchState.state_data.creator_fees_quote をインクリメントします。
Sell では同じ分割が適用されますが、フィーはアウトバウンド quote_out から取られます。 両方のカウンターは CollectFees を介してスイープされます(管理者またはクリエイター、それぞれ自分のカウンターへ)。

精度

  • ベース側の量:u64。
  • クォート側の量:u64。
  • 中間の立方・積:u128。
  • 「正確なクォートを買う」と「正確なクォートを売る」は 閉じた形 で反転します — 定積カーブは代数的に、固定価格カーブは除算で、線形価格カーブは平方根で反転します。プログラムに Newton ソルバーはなく、反復回数の上限も NotConverged エラーもありません。

CPMM へのハンドオフ

Graduate が発火するとき:
定積 カーブ — LaunchLab のデフォルトであり、稼働している唯一のタイプ — の場合、cpmm_initial_price はちょうど price(base_sold)、つまりハンドオフの瞬間の限界カーブ価格です。そのため、カーブ UI から CPMM UI に切り替えるオブザーバーはジャンプを見ません。二次価格カーブの場合はそうではありません:積分平均は限界価格より上に位置し(上記の例では 4/3 倍)、ハンドオフでの段差が予想されます。

次のステップ

ソース: