Langsung ke konten utama

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →

Apa itu bonding curve

Bonding curve adalah fungsi harga deterministik p(s) yang menghubungkan harga token dengan jumlah yang saat ini beredar (s singkatan dari “supply sold”). Pembeli melakukan pembelian dengan mengirim collateral ke kontrak; kontrak mengeluarkan unit token baru dengan harga marginal yang ditentukan oleh kurva. Penjual mengembalikan unit token dan menerima pengembalian dana terintegrasi. Dua properti utama dibandingkan dengan pool CPMM:
  • Tidak perlu counterparty. Kontrak penerbit adalah market maker; likuiditas ada berdasarkan ketetapan.
  • Harga monoton. Harga naik dengan setiap net-buy dan turun dengan setiap net-sell.
Bonding curve adalah mekanisme peluncuran standar ketika entitas penerbit tidak ingin pre-seed pool AMM dengan collateral.

Formula penetapan harga umum

Untuk setiap fungsi harga kontinu p(s): Harga spot pada supply s:
p(s) = the curve formula
Biaya untuk membeli supply dari s_0 ke s_1 (dengan s_1 > s_0):
cost(s_0, s_1) = ∫_{s_0}^{s_1} p(s) ds = P(s_1) − P(s_0)
di mana P(s) = ∫ p(s) ds adalah antiturunan kurva. Secara geometris, cost adalah area di bawah p antara s_0 dan s_1. Hasil dari penjualan supply kembali dari s_1 ke s_0:
proceeds(s_1, s_0) = cost(s_0, s_1)
(Simetri: membeli dan menjual di selang yang sama menukar collateral yang sama — terlepas dari biaya.) Harga rata-rata untuk pembelian:
avg = cost(s_0, s_1) / (s_1 − s_0)

Keluarga kurva umum

Linear

p(s) = a + b · s
P(s)            = a·s + (b/2)·s²
cost(s_0, s_1)  = a·(s_1 − s_0) + (b/2)·(s_1² − s_0²)
Harga naik sebanding dengan supply. Digunakan untuk peluncuran “stabil” di mana penerbit menginginkan markup yang dapat diprediksi dan moderat selamanya.

Kuadratik

p(s) = k · s²                      // atau  k · (s / S_max)² untuk bentuk ternormalisasi
P(s)            = (k / 3) · s³
cost(s_0, s_1)  = (k / 3) · (s_1³ − s_0³)
Harga naik secara kuadratik. Pembeli awal mendapatkan harga mendekati nol (wilayah mulai datar); pembeli akhir membayar premium yang lebih curam. Ini adalah tipe kurva yang menjadi default LaunchLab (curve_type = 0).

Virtual-reserves CPMM (gaya Pump)

Kurva adalah CPMM standar dengan reserve quote awal pura-pura V_q:
effective_y = V_q + collateral_received
effective_x = S_max − s
(effective_x) · (effective_y) = V_q · S_max      // invariant
Harga spot:
p(s) = effective_y / effective_x
     = V_q · S_max / (S_max − s)² · ... (dapat diturunkan via diferensiasi implisit)
Biaya untuk bergerak dari s_0 ke s_1:
cost(s_0, s_1) = V_q · S_max / (S_max − s_1) − V_q · S_max / (S_max − s_0)
              = V_q · (s_1 − s_0) · S_max / ((S_max − s_0) · (S_max − s_1))
Varian ini memiliki properti elegan bahwa pada kelulusan (di mana s = S_graduate), harga marginal sama dengan harga pembukaan pool CPMM hilir yang disemai dengan reserve (S_max − S_graduate, V_q + cost(0, S_graduate)). Pengalihan lancar. LaunchLab mengekspos ini sebagai curve_type = 1.

Implementasi diskrit

On-chain, s dan cost keduanya adalah bilangan bulat (satuan denominasi terkecil). Integral kontinu cost(s_0, s_1) dihitung langsung dari bentuk tertutup kapan pun ada (linear, kuadratik). Untuk kurva tanpa invers bentuk tertutup (kuadratik, diberikan cost, temukan s_1), iterasi Newton digunakan:
# Selesaikan kuadratik: (k/3)·s_1³ = (k/3)·s_0³ + cost
# Inisialisasi dengan s_guess ≈ cbrt(3·cost/k + s_0³)
for i in 0..MAX_ITER:
    f    = (k/3)·s_guess³ − (k/3)·s_0³ − cost
    f'   = k·s_guess²
    step = f / f'
    s_guess -= step
    if |step| < precision_floor: break
LaunchLab membatasi iterasi pada ~10 dan kembali dengan NotConverged jika residual masih di atas toleransi. Praktiknya ini hanya terpicu di dekat ekstremitas domain; swap produksi konvergen dalam 2–3 iterasi.

Integrasi biaya

Biaya diterapkan di atas biaya kurva, bukan di dalamnya. Pada pembelian:
cost_curve  = cost(base_sold, base_sold + base_out)
fee         = ceil(cost_curve · buy_numerator / buy_denominator)
quote_in    = cost_curve + fee
Pada penjualan:
proceeds_curve = cost(base_sold − base_in, base_sold)
fee            = ceil(proceeds_curve · sell_numerator / sell_denominator)
quote_out      = proceeds_curve − fee
Bagian LP dari biaya disimpan di quote_vault dan secara efektif membuat kurva lebih kaku untuk pembeli kemudian — reserve tumbuh tanpa mengeluarkan lebih banyak supply. Bagian protokol dan kreator dilacak dalam penghitung terpisah untuk penyapuan kemudian.

Ambang kelulusan

Kurva “lulus” ketika telah menerima cukup collateral untuk seed pool AMM eksternal dengan harga yang cocok dengan harga kurva saat ini. Untuk kurva kuadratik dengan parameter (k, S_max, S_graduate):
quote_to_graduate = cost(0, S_graduate) · (1 + buy_fee_rate)
                  = (k / 3) · S_graduate³ · (1 + f_buy)
Setelah quote_vault ≥ quote_to_graduate, instruksi Graduate membuat pool CPMM dengan:
cpmm_base_reserve  = S_max − S_graduate        // unsold curve supply
cpmm_quote_reserve = quote_vault − accrued_fee_counters
cpmm_initial_price = cpmm_quote_reserve / cpmm_base_reserve
Untuk kurva virtual-reserves, dengan konstruksi:
cpmm_initial_price == p(S_graduate)           // exact equality
Untuk kuadratik, kesetaraan bersifat aproksimasi; “slop” diserap ke dalam pembulatan S_graduate (biasanya 0.8 · S_max) dan surplus collateral dari pembelian penyeberangan ambang akhir.

Impermanence vs pool CPMM

Peluncuran bonding-curve murni memiliki tidak ada impermanence dalam pengertian Uniswap: tidak ada “sisi lain” pasar untuk menyeimbangkan kembali. Kurva mengeluarkan supply sesuai permintaan, dan satu-satunya “LP” adalah kontrak itu sendiri. Pasca-kelulusan, pool CPMM yang dihasilkan berperilaku seperti pool CPMM lainnya — jika LP tidak dibakar, mereka tunduk pada dinamika impermanent-loss biasa. Inilah mengapa kebijakan burn pasca-kelulusan dominan dalam peluncuran publik: ini membuat pool permanen dan menghilangkan setiap kejutan harga yang didorong oleh penarikan LP.

Contoh terselesaikan

Kurva: kuadratik, k = 40, S_max = 1e9, S_graduate = 0.8 · S_max = 8e8. Biaya pembelian 1%.

Harga pada s = 5e8

p(5e8) = 40 · (5e8 / 1e9)² = 40 · 0.25 = 10
10 unit quote per unit base.

Biaya pembelian pertama 1e6 base

cost(0, 1e6) = (40/3) · (1e6)³
             = (40/3) · 1e18
             ≈ 1.333e19     (smallest quote units)
Dengan biaya 1%:
quote_in = 1.333e19 · 1.01 ≈ 1.347e19

Ambang kelulusan

cost(0, 8e8) = (40/3) · (8e8)³
             = (40/3) · 5.12e26
             ≈ 6.827e27
quote_to_graduate ≈ 6.827e27 · 1.01 ≈ 6.895e27

Harga pada kelulusan

p(8e8) = 40 · 0.64 = 25.6

Reserve CPMM pasca-kelulusan

cpmm_base  = 1e9 − 8e8 = 2e8
cpmm_quote ≈ 6.827e27  (less fee-counter deductions)
cpmm_price ≈ 3.41e19 per base — which matches p(8e8) after units are accounted for
(Unit: desimal perlu dilacak dengan hati-hati; contoh bersifat ilustratif.)

Pointer

Sumber:
  • Kode sumber program Raydium LaunchLab (implementasi kurva kuadratik + virtual-reserves).
  • Bancor white paper (linear bonding curves, historis).
  • Postmortem publik Pump.fun (varian virtual-reserves).