Bonding Curves
下面我用比较数学 PhD/形式机制设计+经济数学的程度,把 bonding curves 的机制、形式化模型、性质、问题,以及一个近年在研究里提出的 “configuration spaces + conservation functions” 框架解释清楚,并给出主要参考文献链接。若你要,我可以再写出更严谨的定理+证明草稿。
一、Bonding Curve 的严格形式化模型
Bonding Curve 最基本的是一个连续(或至少在正实数上定义)函数,用于把 代币供给量 SS 与 当前代币单位价格 PP 联系起来;同时还有一个 储备(reserve)资产 或资产池 RR,作为买入/卖出代币时的资金流动平台。
符号设定
令 S∈R>0S \in \mathbb{R}_{>0}:现存的、流通中的代币总量(供给)。
令 R∈R≥0R \in \mathbb{R}_{\ge 0}:储备资产余额(例如以 ETH 或某 stablecoin)在智能合约中被锁定。
令 P(S)P(S):在供应为 SS 时,购买或售出边际代币的单位价格(边际价格或 “spot price”)。
还有一个参数,常叫 reserve ratio 或 reserve weight,记为 FF,或 κ\kappa,或者在某些情况下多个参数,决定曲线的“陡峭度”(sensitivity)。
基本关系与公式
一个经典的例子是由 Bancor 协议 使用的那种 continuous token + constant reserve ratio 模型。下面是这种模型的公式(简化版本):
边际价格与储备、供应的关系:
P(S)=RF⋅SP(S) = \frac{R}{F \cdot S}
这里 F∈(0,1]F \in (0,1] 是一个常数(储备比率)。当 F=1F = 1,价格与储备/供应线性反比;当 F<1F < 1,则价格会更加敏感于供给变化。
购买代币(“mint”)时:给定投入的储备资产 ΔR\Delta R,获得代币 ΔS\Delta S
通过积分或幂函数可得:
ΔS=S((1+ΔRR)F−1)\Delta S = S \left( \left(1 + \frac{\Delta R}{R} \right)^F - 1 \right)
即如果你存入 ΔR\Delta R,代币供应由 SS 增加为新的 S+ΔSS + \Delta S,价格也随之上升。
售出代币(“burn”)时:烧掉 ΔS\Delta S,得到储备资产 ΔR\Delta R
ΔR=R(1−(1−ΔSS)1/F)\Delta R = R \left( 1 - \left(1 - \frac{\Delta S}{S} \right)^{1/F} \right)
这样定义确保储备足够;也保证买入、卖出操作是对称(在无滑点、手续费、前置条件等情况下)。
这些公式在各种资源中有推导。比如 yos.io 的 “Bonding Curves” 一文里有这些详细公式和例子。 (Yos Riady · Software Craftsman)
二、配置空间(Configuration Space)与守恒函数(Conservation Function)的形式化结构
在较新的研究里(Zargham, Shorish, Paruch 等人,论文 “From Curved Bonding to Configuration Spaces”),他们把 bonding curve 加以更形式化地装入机制设计/状态空间模型中,以便证明某些全局性质(invariants),以限制系统的可能状态空间(configuration space)。下面是这个框架的主要结构和数学内容:
状态空间与变量
他们定义一个系统的状态变量集,包括:
SS:代币供应量
RR:储备余额
PP:spot price(可由 S,RS,R 经函数关系算出)
还有可能的参数 FF 或 “reserve weight / curvature parameter” κ\kappa 等。
所以状态 xx 可以表示为向量,例如:
x=(R,S,P,F)∈Xx = (R, S, P, F) \in \mathcal{X}
其中 X\mathcal{X} 是“全状态空间”。 (WU Wirtschaftsuniversität Wien)
守恒函数/不变量(Conservation Function or Invariant)
他们引入一个不变量函数(conservation function) V(R,S)V(R, S),用来将状态限制在某条曲线上。一个常见形式是多项式形式:
V(R,S):=SκRV(R, S) := \frac{S^\kappa}{R}
或者等价地:
SκR−1=V0S^\kappa R^{-1} = V_0
其中 V0V_0 在系统初始化时由初始供应 S0S_0、初始储备 R0R_0 决定:
V0=S0κR0V_0 = \frac{S_0^\kappa}{R_0}
这个守恒函数意味着:在所有合法状态里,(R,S)(R,S) 必须满足
Sκ/R=V0S^\kappa / R = V_0
从而,系统的可达状态(即所有可能经过一系列“mint”或“burn”动作后可能到达的 (R,S)(R,S))构成一个子集,也就是 configuration space。 (WU Wirtschaftsuniversität Wien)
spot price 由守恒函数导出的关系
因为 PP 是边际价格,通常可以由下面这个关系导出(用不变量的导数方式):
P(S)=dRdSP(S) = \frac{dR}{dS}
联合守恒函数 V(R,S)=CV(R,S)=C (常数)及其定义,可求出 RR 关于 SS 的函数形式,进而得到 P(S)P(S)。例如,如果
R=SκV0R = \frac{S^\kappa}{V_0}
那么:
P(S)=dRdS=κSκ−1V0P(S) = \frac{dR}{dS} = \frac{\kappa S^{\kappa - 1}}{V_0}
这是一个幂函数形式的 bonding curve,其中 κ\kappa 控制价格随着 supply 增长的陡峭程度。若 κ<1\kappa < 1,价格增长是 sublinear(增速减慢),若 κ>1\kappa > 1,是超线性。这个一致对应 “reserve ratio” 或 “reserve weight” 与价格敏感性之间的关系。 (WU Wirtschaftsuniversität Wien)
三、性质、稳定性、问题 —— 数学/机制设计角度
在形式的模型中,有一些关键问题要分析/证明/注意:
液性/储备充足性(Liquidity / reserve adequacy)
要能保证“卖”操作总能被合约处理(用户烧掉代币能拿回储备资产)。即:储备(reserve)必须足够支撑任意规模的赎回操作。通常在模型里假设 “即时赎回”(instant liquidation)成立,或至少赎回某个上界内成立。
在 Bancor 风格的模型中,因为定价函数与储备与供给量的关系确定,所以可以证明在这些公式之下,只要设计得当,储备永远不会被耗尽。若某些 earn 机制或费用/滑点被引入,这个性质可能被破坏。
价格敏感性(Price Sensitivity / Slippage)
根据 κ\kappa 或 reserve ratio 的不同,边际价格对供给的变化有高或低敏感性。敏感度高:小量买入就推动价格上升很多;敏感度低:价格平缓变化。高敏感性可能导致用户买入成本极高,或者卖出滑点大。
供给和价格的连续性与可微性
若公式设计是幂函数或指数函数,需要确认在整个供给域内函数是连续可微,以便积分/导数操作成立。特别是在 “买入/卖出一定量代币” 时积分计算成本或赎回金额要用到这些性质。
平衡/投机行为与反馈循环
在某些设置下,早期买入者获利,晚期买入者成本高,这可能鼓励市场里存在投机行为。除非有机制(例如烧毁、费用、税、治理权稀释、收益分配等)来抑制这种不公平或导致系统不稳定。
配置空间的约束与全局性质
在 Zargham 等人的框架中,通过不变量(conservation function)约束系统状态,能够保证某些宏观性质(如价格弹性、储备与供给比、收益模型)在所有可能路径下成立。这是一种 机制设计中的“先声明不变性/守恒律,然后只允许动作那些保持这些不变性”的方式。
四、例子与具体参数
举一个具体的例子,设定参数:
初始供应 S0=1S_0 = 1
初始储备 R0=1R_0 = 1
κ=F=0.5\kappa = F = 0.5 (reserve ratio 是 0.5)
则守恒函数:
S0.5R=V0=10.51=1\frac{S^{0.5}}{R} = V_0 = \frac{1^{0.5}}{1} = 1
所以
R=S0.5R = S^{0.5}
边际价格:
P(S)=dRdS=12S−0.5P(S) = \frac{dR}{dS} = \frac{1}{2} S^{-0.5}
这里随着 SS 增加,PP 会下降,典型是边际价格随着供给增加而下降,这里供给越大价格越低 ——但是这只是边际价格;买入新的代币需要支付的总金额是积分:
Cost(S→S+ΔS)=∫SS+ΔSP(u) du=∫SS+ΔS12u−0.5 du=[u0.5]SS+ΔS\text{Cost}(S \to S + \Delta S) = \int_{S}^{S + \Delta S} P(u) \, du = \int_{S}^{S + \Delta S} \frac{1}{2} u^{-0.5} \, du = [u^{0.5}]_{S}^{S + \Delta S}
如果你希望价格随供给 上升 而上升(通常 bonding curve 是价格随供给上升价格也上升的情形),则 κ\kappa 要大于 1,或者设计成像上面 P(S)=κSκ−1V0P(S) = \frac{\kappa S^{\kappa-1}}{V_0} 那样,当 κ>1\kappa > 1,你得到增长函数。
五、来源 /关键文献
下面是比较核心、权威,以及讲得比较形式化的文献,你若要深入读它们里边的证明、模型假设,非常有帮助。
“From Curved Bonding to Configuration Spaces” (Michael Zargham, Jamsheed Shorish, Krzysztof Paruch, 2019) —机制设计 + 状态空间 +守恒函数框架。PDF 文章全文在 Vienna University Research。 (arXiv)
“Token Bonding Curves” on yos.io / Medium 的解释/Bancor 风格公式,包括求 “purchase return” 与 “sale return” 的公式推导。 (Yos Riady · Software Craftsman)
“Bonding Curves and Bonding Curve Accessories” by Meni Rosenfeld 等博客/Medium 文本,讨论仓储比率、敏感性、初始参数设定等。 (Medium)
六、可能的严格定理/命题说明
下面我可以写一个典型的形式命题(草稿形式),说明在这些模型中可证明的性质:
命题(储备充足性与状态限制) 在一个 bonding curve 模型中,假设初始状态 (S0,R0)(S_0, R_0) 给定,且 reserve ratio F∈(0,1]F\in (0,1] 或者等价地守恒函数参数 κ>0\kappa >0 给定,并假设买入/卖出操作按照 Bancor 样式公式(上面那种 purchase-return 与 sale-return)执行,则对于任何通过一系列 buy(mint)或 sell(burn) 操作从初始状态到新的状态 (S,R)(S,R),都有:
R>0R > 0
并且状态 (S,R)(S,R) 必须落在 configuration space
{(S,R):Sκ/R=S0κ/R0}\{ (S, R) : S^\kappa / R = S_0^\kappa / R_0 \}
上。 并且 spot price P(S)=dRdS=κSκ−1V0P(S) = \frac{dR}{dS} = \frac{\kappa S^{\kappa - 1}}{V_0}。 如果再假设交易手续费/滑点为零,那么任何购入量/赎回量的资金流与代币流可以通过上述购买/赎回公式计算。
这样的命题在 Zargham et al. 的论文里已被形式化地提出并讨论。 (WU Wirtschaftsuniversität Wien)
如果你愿意,我可以写一个完整的 proof sketch(带假设、命题、证明)基于 Zargham 等人的模型,或者为某个具体曲线(幂函数形式或 Bancor 形式)写出连续时间极限下的稳定性分析。你要哪个方向深入?
直观
好的,我来写一个更 直观 的版本,帮你把上面 PhD 级的推导转化成容易抓住直觉的理解。
1. Bonding Curve 是什么?
想象你开了一家“自动售卖机”,里面卖的是代币。
每次有人买,机器里的价格会自动上升;
每次有人卖回去,机器的价格会自动下降。 这就是 Bonding Curve:一条预先写在机器里的“价格曲线”,价格不靠买卖双方讨价还价,而是靠公式决定。
2. 为什么要这么做?
在普通市场里:
如果没人挂单,你想买,就可能买不到。
如果没人接盘,你想卖,就可能卖不掉。
Bonding Curve 的好处:
自动流动性:永远有人接单,因为就是合约接你的单。
价格透明:未来买一手要多少钱、卖一手能拿回多少,都能提前算出来。
早期激励:早买的人价格更便宜,随着供给量增加,价格越来越贵 → 鼓励早期参与。
3. 数学直觉
你可以把它看作一个 积分器:
“代币价格”是曲线的斜率(导数)。
“总花费”是曲线下面积(积分)。
举个最常见的幂函数例子:
P(S)=k⋅SαP(S) = k \cdot S^\alpha
SS:已经发行的代币数
k,αk, \alpha:参数,决定曲线的陡峭程度
如果 α>0\alpha > 0,每多买一点代币,价格就更贵一点(就像越来越陡的坡)。 如果 α<0\alpha < 0,则反过来,越买越便宜(通常不会这样设计)。
4. 一个买卖例子
假设曲线是 P(S)=SP(S) = S,也就是价格等于已经发行的代币数。
当供给是 10 的时候,边际价格 = 10。
你想再买 5 个代币,花费是多少?
花费 = 积分
∫1015S dS=12(152−102)=12(225−100)=62.5\int_{10}^{15} S \, dS = \frac{1}{2}(15^2 - 10^2) = \frac{1}{2}(225 - 100) = 62.5
所以,买 5 个代币不是 “5 × 10 = 50”,而是 更贵,因为随着你买入,价格已经被你自己推高了。
5. 跟 Uniswap 的关系
Uniswap 其实就是一种特殊的 Bonding Curve:
x⋅y=kx \cdot y = k
这条曲线保证:
买多了 token A,token B 就变少,A 的价格变贵。
卖多了 token A,token B 变多,A 的价格变便宜。
和上面讲的“自动售卖机”一模一样,只不过曲线换成了乘法关系。
6. 要点总结
Bonding Curve = 用公式写好的自动定价规则。
它让代币市场不需要人类挂单,价格跟着供给量自动跑。
数学上:价格是曲线的导数,花费是积分。
直觉上:买得越多,坡越陡;卖回去,坡往下滑。
要不要我帮你画一张 价格曲线的示意图(比如线性、幂函数、Uniswap 曲线三种对比),让你一眼看到不同 bonding curve 的感觉?
Last updated