价格如何形成
联合曲线规定如何用储备兑换代币。Blast 使用恒定乘积规则:买入改变储备,进而改变下一位买家的价格。它没有固定认购价。
本指南从基本概念推导公式。可在联合曲线构建器中实验。可执行公式来自 curve.move;接入参考提供精确原子单位伪代码和调用条件。
1. x × y = k 是什么意思?
跳转到“1. x × y = k 是什么意思?”乘法得到乘积。当 x × y = k 且 k 不变时,改变 x 就必须反向改变 y。
x × y = k y = k / x x = k / y以 k = 100,000 为例:
| x:曲线内代币 | y:有效报价储备 | 乘积 x × y |
|---|---|---|
| 1,000 | 100 | 100,000 |
| 800 | 125 | 100,000 |
| 500 | 200 | 100,000 |
| 250 | 400 | 100,000 |
公式是 x × y = k,不是 x = y × x。后一式在 x 非零时意味着 y = 1,无法描述这里的定价规则。
图形不是直线:代币储备减半,有效报价储备就翻倍。取走剩余代币的一半,并不只需上一笔买入成本的一半。
本节使用小规模、无费用的教学库存。实际 Blast 生成币初始供应量为十亿枚整币,只有其中一部分分给曲线。
2. 将字母对应到合约
跳转到“2. 将字母对应到合约”| 符号 | 含义 | 能否花费? |
|---|---|---|
M 或 x |
曲线储备中剩余代币 | 曲线开放时可供购买 |
Q |
曲线实际持有的报价币 | 为卖出和毕业分配提供资金 |
V |
对该发行固定的虚拟报价储备 | 不能;它是定价参数 |
y = V + Q |
公式使用的有效报价储备 | 只有 Q 是真实资产 |
k = M × (V + Q) |
推导本笔交易时的储备乘积 | 是数值,不是资产余额 |
T |
真实报价储备毕业目标 | 当 Q = T 时达到 |
开盘时 Q = 0,但 V > 0 让曲线仍有非零报价。创建者没有存入 V 枚报价币。它不计入目标、池流动性或可向卖方支付的余额。
下文连续数学推导保持乘积不变。合约使用整数并向下舍入输出,因此每笔交易后乘积可能略微增大。每次报价都应读取当前储备,不能假定起始 k 永远精确不变。
3. 逐步推导买入
跳转到“3. 逐步推导买入”先设 M = 1,000、V = 100、Q = 0。暂不考虑费用和原子单位舍入。买方投入 25 枚报价币。
交易前:k = 1,000 × (100 + 0) = 100,000交易后有效报价储备:y′ = 100 + 0 + 25 = 125交易后代币储备:M′ = k / y′ = 100,000 / 125 = 800付给买方的代币:1,000 − 800 = 200交易后真实报价储备:Q′ = 25100 枚虚拟报价币仍是虚拟值。曲线拥有的是 25 枚真实报价币,不是 125 枚。
将任意储备及净报价输入 n 代入:
M′ = M × (V + Q) / (V + Q + n)tokens_out = M − M′ = M × n / (V + Q + n)合约先将 tokens_out 向下舍入到代币原子单位,再扣代币费用。报价币费用在本计算之前从买方输入中扣除。
如果想买到指定数量的代币
跳转到“如果想买到指定数量的代币”将无费用买入公式按所需输出 a 重新整理:
a = M × n / (V + Q + n)a × (V + Q) = n × (M − a)n = a × (V + Q) / (M − a)在教学起始状态,购买 200 代币需要 200 × 100 / (1,000 − 200) = 25 报价币。当 a 接近全部储备时,分母接近零,所需输入无限增大。虚拟报价为正时,有限买入不能清空曲线;毕业封顶还可能更早关闭交易。
该反推式用于连续、无费用解释。构建精确输出交易时,必须按正确顺序补足两种费用、遵守原子单位向上舍入和目标封顶,并验证最终可执行报价。构建器计算的是精确输入金额。
4. 价格为什么上涨?
跳转到“4. 价格为什么上涨?”对于极小交易,储备比率给出即期价格:
spot price = (V + Q) / M [单位相同时,为每枚代币的报价币价格]可以让有效报价储备增加极小的 dy,同时取出 dx 代币:
(M − dx) × (y + dy) = M × yM × dy − y × dx − dx × dy = 0当交易趋近无限小时,dx × dy 项消失:dy / dx = y / M在投入 25 枚报价币的示例中:
| 价格 | 计算 | 报价币/代币 |
|---|---|---|
| 买入前 | 100 / 1,000 |
0.1 |
| 无费用平均成交价 | 25 / 200 |
0.125 |
| 买入后 | 125 / 800 |
0.15625 |
买方沿不断变化的曲线成交。用起始价格乘 200 会低估成本,用结束价格乘 200 会高估成本。整笔交易的平均成交价并非任一端点价格。
在没有卖出且忽略舍入时,将 M = M₀ × V / (V + Q) 代入:
M(Q) = M₀ × V / (V + Q)p(Q) = (V + Q)² / (M₀ × V)p(Q) / p(0) = (1 + Q / V)²当 M₀ = 1,000、V = 100:
| 真实报价储备 Q | 代币储备 M | 即期价格 | 起始价格倍数 |
|---|---|---|---|
| 0 | 1,000 | 0.1 | 1× |
| 25 | 800 | 0.15625 | 1.5625× |
| 50 | 666.666… | 0.225 | 2.25× |
| 100 | 500 | 0.4 | 4× |
这是仅买入路径的教学示例,不是需求或回报预测。卖出以有效代币输入沿储备关系反向移动;费用、延迟销毁和原子单位舍入会改变真正进入储备的余额。
5. 虚拟储备改变什么?
跳转到“5. 虚拟储备改变什么?”当起始曲线库存 M₀ 固定时,起始价格为 V / M₀。增大 V 会提高起始价格。在真实报价目标固定时,它也会降低曲线价格上涨的倍数。
| 同为 1,000 曲线代币及 100 真实报价目标 | V = 100 | V = 200 |
|---|---|---|
| 起始即期价格 | 0.1 | 0.2 |
| 忽略舍入的最终即期价格 | 0.4 | 0.45 |
| 最终/起始价格 | 4× | 2.25× |
| 达标时剩余代币 | 500 | 666.666… |
根据目标价格倍数选择路径
跳转到“根据目标价格倍数选择路径”没有卖出且忽略舍入时,希望最终/起始价格倍数为 r > 1:
r = (1 + T / V)²V = T / (sqrt(r) − 1)M₀ = V / opening_price4× 倍数下,sqrt(4) − 1 = 1,因此 V = T;9× 时 V = T / 2。更高倍数把更多价格移动集中到同一真实报价目标。这是设计方程,不是回报承诺。推导库存仍必须符合固定原始供应量、LP、Blast 和全部项目接收方的份额。
提高虚拟储备不会增加真实卖出流动性。Q = 0 时卖出没有真实报价余额支持。即使公式返回正数,也不能支付超过真实储备的金额。
6. 加入两种资产费用
跳转到“6. 加入两种资产费用”Blast 在创建发行时快照报价币费用和代币费用,各自范围为 0–10%。两者相互独立,可同时非零。1 基点等于 0.01%;100 BPS 等于 1%;分母 D = 10,000。
合约将费用向上舍入,用户输出向下舍入到原子单位。下面全部是原子单位,不是整币:
M = 1,000,000 V = 100,000 Q = 0 T = 100,000报价币费用 = 1% 代币费用 = 1% 提供报价币 = 10,000
报价币费用 = ceil(10,000 × 100 / 10,000) = 100净报价输入 = 10,000 − 100 = 9,900毛代币输出 = floor(1,000,000 × 9,900 / 109,900) = 90,081代币费用 = ceil(90,081 × 100 / 10,000) = 901实际交付 = 90,081 − 901 = 89,180 代币原子单位新 M = 909,919新 Q = 9,900储备减少全部 90,081 个代币原子单位。其中买方获得 89,180,费用账本获得 901。平均价格使用实际花费的 10,000 报价币原子单位除以实际交付的 89,180 代币原子单位;如果币种精度不同,还需换算。
Blast 实时份额为 ceil(fee × protocol_share / D),创建者获得余数。合作伙伴的份额在支付时从 Blast 部分扣除,不给交易者增加一笔费用。参见费用与奖励。
7. 推导卖出与延迟销毁
跳转到“7. 推导卖出与延迟销毁”卖出向曲线加入有效代币并取走报价币。当实际进入储备的是 x 个代币原子单位时:
M′ = M + xy′ = M × (V + Q) / (M + x)gross_quote_out = (V + Q) − y′ = (V + Q) × x / (M + x)有代币费用或卖出销毁时,有效输入小于钱包提供的输入:
token_fee = ceil(input_tokens × token_fee_bps / D)after_fee = input_tokens − token_feepending_burn = ceil(after_fee × sell_burn_bps / D)x = after_fee − pending_burngross_quote = floor((V + Q) × x / (M + x))quote_fee = ceil(gross_quote × quote_fee_bps / D)delivered_quote = gross_quote − quote_fee接续上一笔买入,卖出 10,000 个代币原子单位,卖出销毁为 1%。代币费用为 100,待销毁为 99,进入储备的为 9,801。毛报价输出为 floor(109,900 × 9,801 / 919,720) = 1,171,报价费用为 ceil(1,171 × 1%) = 12,实际交付 1,159。新代币储备为 919,720,真实报价储备为 8,729。构建器显示每一步,并拒绝真实储备无法支付的卖出。
卖出销毁部分保留至毕业,卖出时记录供应量尚未减少。仅销毁模式之后将其销毁;固定供应模式则把处置代币发送到零地址。销毁不是报价币退款或额外支付。
卖出要求发行处于 Live 且已公开共享。达到目标后曲线买卖均关闭,后续交易场所是 DEX 池。
8. 价格影响与滑点不同
跳转到“8. 价格影响与滑点不同”价格影响是交易自身造成的价格移动。大额买入消耗显著代币储备,即使无人抢先交易,平均成交价也会劣于交易前边际价。
滑点容忍度限制相对于此前报价,交易可接受的输出减少。其他交易或过期储备快照可能改变净输出。实时路由策略还可能改变费用接收方,但该发行的总交易费率保持固定。最低输出让交易在输出不足时回滚。
minimum_output = floor(quoted_net_output × (10,000 − tolerance_bps) / 10,000)使用原子单位计算。1% 滑点容忍不代表价格影响只有 1%,也不使过期报价可执行,更不能在其他买方达标后保持曲线开放。
9. 最后一笔买入按毕业目标封顶
跳转到“9. 最后一笔买入按毕业目标封顶”目标计算扣费和卖出后的真实报价储备,不计算毛交易量。设 R = T − Q,报价费率为 fq:
若 supplied_quote − ceil(supplied_quote × fq / D) <= R: 使用全部输入否则: gross_used = ceil(R × D / (D − fq)) refund = supplied_quote − gross_used例如剩余 R = 99 原子单位、报价费率 1%、输入 150,合约使用 100、收取费用 1、给真实储备增加 99,并返还 50。返还部分不再收费。
最终买入可能达到目标却舍入为零代币输出。仅当最低输出为零时,该特殊终止交易才成功。非终止零输出买入会中止;卖出必须有正净报价输出。因此,微小交易与连续图形可能很不一样。
10. 池价格是第二个设计选择
跳转到“10. 池价格是第二个设计选择”毕业时,合约不会把所有剩余曲线代币投入池。它处置未售曲线代币和累计卖出销毁,再用单独分配的代币和最终真实报价储备中的 LP 份额建池。
名义池初始价格 = 分配给池的真实报价币 / 分配给池的代币举例:十亿代币中曲线 7 亿、LP 2 亿、V = 1,000、T = 3,000,忽略舍入:
起始价格 = 1,000 / 700,000,000 ≈ 0.000001428571 报价币/代币最终曲线储备 = 700,000,000 × 1,000 / 4,000 = 175,000,000 代币最终曲线价格 = 4,000 / 175,000,000 ≈ 0.00002285714390% 的池报价币 = 2,700名义池初始价格 = 2,700 / 200,000,000 = 0.0000135两个比率不同。若希望名义价格一致,需要 pool_tokens = pool_quote / final_curve_price,但仍需满足所有供应分配和原子单位约束。集中流动性交易场所的舍入可能留下残余资产。构建器比较这两个比率,不保证能按其中任意价格成交。
11. 精度、估值和流动性
跳转到“11. 精度、估值和流动性”9 位精度表示每整币十亿原子单位;6 位表示每整币一百万。储备公式使用原子单位,显示整币价格前需换算:
整币价格 = (V_atoms + Q_atoms) / M_atoms × 10^token_decimals / 10^quote_decimals例如,6 位精度的 1,000,000 报价币原子单位与 9 位精度的 1,000,000,000 代币原子单位,各表示一个整币。整币比率为 1,不是 0.001。格式化前保持分数;先做整数除法可能把正常价格错误显示为零。
估值用价格乘一种供应量指标。流动性是储备或池中实际可用资产。百万报价币估值不代表能够提取百万报价币。销毁后,当前记录供应量与原始十亿供应量会给出不同估值。两者都不等于流通供应量或可实现卖出收益。
交易场所种子价格为 floor(sqrt(coin_B_atoms / coin_A_atoms) × 2^64)。规范币序可能使比率反转。显示精度不参与原子计算;池边界、刻度和仓位舍入仍需检查。
12. 开盘轮与路径依赖
跳转到“12. 开盘轮与路径依赖”开盘轮在 60–300 秒后将出价合并为一笔买入。参与者按剩余余额比例领取代币和未使用报价币,每次向下舍入,最后一位领取余数。它不是按各人时间顺序逐笔买入;出价不可撤回。
无开盘轮时,创建者可在公开共享前买入。无论哪种模式,都应披露实际流程。开盘轮不会改变曲线公式,也不会消除合约、托管或管理权限风险。
分析必须说明路径:单笔合并买入、多笔买入、混合买卖,还是开盘轮结算。构建器明确采用两阶段仅买入基准;仅当某阶段输入超过 u64 时,才拆分为有界买入。任何图表都不保证未来价格、收益或未达标退款。使用规划前,请阅读分配与设计选择和安全与权限。
术语速查
跳转到“术语速查”| 术语 | 本文含义 |
|---|---|
| 报价币 | 支付与卖出收款资产,例如 SUI,不同于发行代币 |
| 原子单位 | 币的最小整数单位 |
| 虚拟储备 | 用于定价的固定数值,没有对应资产存入 |
| 毛额/净额 | 所述费用或扣减之前/之后的金额 |
| 即期价格 | 极小交易的边际储备比率 |
| 平均成交价 | 实际花费或收到的报价币除以实际收到或提供的代币 |
| 价格影响 | 交易本身规模造成的价格移动 |
| 滑点最低值 | 交易可接受的最低净输出 |
| 毕业 | 达到真实报价目标关闭曲线,再单独迁移入池 |
| 池分配 | 专门用于创建 DEX 池的资产,与未售曲线库存分开 |
| LP 费用 | DEX 仓位赚取、经金库收集和路由的费用 |
| 估值 | 价格乘以明确的供应量指标,不是可提取报价流动性 |