跳转到主要内容

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.

本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
本页推导通用结合曲线数学。LaunchLab 的具体实现详见 products/launchlab/bonding-curve。推导采用连续形式;链上代码用定点算术实现离散类似物。

什么是结合曲线

结合曲线是一个确定性价格函数 p(s),将代币价格与当前流通量(s 代表”已售供应量”)关联起来。买方通过向合约发送抵押品来购买;合约以曲线指定的边际价格发行新代币单位。卖方返还代币单位并获得累积退款。 与 CPMM 池相比的两个关键属性:
  • 无需对手方。发行合约本身是做市商;流动性由规则直接产生。
  • 单调价格。每次净买入时价格上升,每次净卖出时价格下降。
当发行方不想用抵押品预先为 AMM 池注入流动性时,结合曲线是标准的启动机制。

通用定价公式

对于任何连续价格函数 p(s) 即期价格(供应量为 s):
p(s) = the curve formula
s_0 买到 s_1 的成本s_1 > s_0):
cost(s_0, s_1) = ∫_{s_0}^{s_1} p(s) ds = P(s_1) − P(s_0)
其中 P(s) = ∫ p(s) ds 是曲线的原函数。几何上,costps_0s_1 之间的曲线下面积。 s_1 卖回到 s_0 的收益
proceeds(s_1, s_0) = cost(s_0, s_1)
(对称性:在相同区间上的买卖交换相同的抵押品 — 扣除费用。) 该买入的平均价格
avg = cost(s_0, s_1) / (s_1 − s_0)

常见曲线族

线性

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²)
价格与供应量成比例上升。用于”稳定”启动,其中发行方希望在整个生命周期内有可预测的适度加成。

二次

p(s) = k · s²                      // 或  k · (s / S_max)² 用于规范化形式
P(s)            = (k / 3) · s³
cost(s_0, s_1)  = (k / 3) · (s_1³ − s_0³)
价格二次上升。早期买家获得接近零的价格(平坦启动区域);后期买家支付更高的溢价。这是 LaunchLab 默认的曲线类型(curve_type = 0)。

虚拟储备 CPMM(Pump 风格)

该曲线是标准 CPMM,带有假想的初始报价储备 V_q
effective_y = V_q + collateral_received
effective_x = S_max − s
(effective_x) · (effective_y) = V_q · S_max      // 不变量
即期价格:
p(s) = effective_y / effective_x
     = V_q · S_max / (S_max − s)² · ... (可通过隐函数求导推导)
s_0 移动到 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))
该变体有一个优雅的性质:在毕业时(s = S_graduate),边际价格等于用储备 (S_max − S_graduate, V_q + cost(0, S_graduate)) 注入的下游 CPMM 池的开盘价格。交接无缝。LaunchLab 将其公开为 curve_type = 1

离散实现

链上,scost 都是整数(最小面额单位)。每当存在闭式形式时(线性、二次),连续积分 cost(s_0, s_1) 直接从闭式计算。对于没有闭式逆函数的曲线(二次,给定 costs_1),使用牛顿迭代:
# 求解二次: (k/3)·s_1³ = (k/3)·s_0³ + cost
# 初始化 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 将迭代次数限制在约 10 次,如果残差仍高于容差则以 NotConverged 回滚。实际上这仅在域极端触发;生产交换通常在 2-3 次迭代内收敛。

费用集成

费用应用于曲线成本之上,而不是其中。买入时:
cost_curve  = cost(base_sold, base_sold + base_out)
fee         = ceil(cost_curve · buy_numerator / buy_denominator)
quote_in    = cost_curve + fee
卖出时:
proceeds_curve = cost(base_sold − base_in, base_sold)
fee            = ceil(proceeds_curve · sell_numerator / sell_denominator)
quote_out      = proceeds_curve − fee
费用的 LP 部分保留在 quote_vault 中,对后续买家来说有效地使曲线变陡 — 储备增长而不发行更多供应。协议和创建者部分在单独的计数器中跟踪,以供后续清扫。

毕业阈值

当曲线收到足够的抵押品以在匹配当前曲线价格的价格为外部 AMM 池提供资金时,曲线”毕业”。对于参数为 (k, S_max, S_graduate) 的二次曲线:
quote_to_graduate = cost(0, S_graduate) · (1 + buy_fee_rate)
                  = (k / 3) · S_graduate³ · (1 + f_buy)
一旦 quote_vault ≥ quote_to_graduateGraduate 指令创建一个 CPMM 池,包含:
cpmm_base_reserve  = S_max − S_graduate        // 未售曲线供应
cpmm_quote_reserve = quote_vault − accrued_fee_counters
cpmm_initial_price = cpmm_quote_reserve / cpmm_base_reserve
对于虚拟储备曲线,根据构造:
cpmm_initial_price == p(S_graduate)           // 精确相等
对于二次曲线,相等是近似的;“偏差”被吸收到 S_graduate 的舍入中(通常为 0.8 · S_max)和达到阈值买入的剩余抵押品中。

与 CPMM 池的无常损失对比

纯结合曲线启动在 Uniswap 意义上没有无常损失:市场上没有”另一方”来重新平衡。曲线按需发行供应,唯一的”LP”是合约本身。 毕业后,产生的 CPMM 池表现得像任何其他 CPMM 池 — 如果 LP 未被销毁,它们会承受常见的无常损失动力学。这就是为什么销毁 post-graduation 政策在公开启动中占主导:它保持池永久化并消除任何 LP 取款驱动的价格冲击。

详细示例

曲线:二次,k = 40S_max = 1e9S_graduate = 0.8 · S_max = 8e8。买入费 1%。

s = 5e8 时的价格

p(5e8) = 40 · (5e8 / 1e9)² = 40 · 0.25 = 10
每基础单位 10 个报价单位。

首次买入 1e6 基础的成本

cost(0, 1e6) = (40/3) · (1e6)³
             = (40/3) · 1e18
             ≈ 1.333e19     (最小报价单位)
带 1% 费用:
quote_in = 1.333e19 · 1.01 ≈ 1.347e19

毕业阈值

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

毕业时的价格

p(8e8) = 40 · 0.64 = 25.6

毕业后的 CPMM 储备

cpmm_base  = 1e9 − 8e8 = 2e8
cpmm_quote ≈ 6.827e27  (扣除费用计数器扣除)
cpmm_price ≈ 3.41e19 per base — 考虑单位后与 p(8e8) 匹配
(单位:小数需要仔细跟踪;该示例仅为说明用。)

相关链接

来源:
  • Raydium LaunchLab 程序源代码(二次和虚拟储备曲线实现)。
  • Bancor 白皮书(线性结合曲线,历史文献)。
  • Pump.fun 公开事后分析(虚拟储备变体)。