跳转到内容

价格如何形成

联合曲线规定如何用储备兑换代币。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,无法描述这里的定价规则。

乘积不变,储备变化当 k = 100,000 时,代币储备 1,000、800、500 分别对应有效报价储备 100、125、200。00112.5250225500337.57504501000有效报价储备(y)代币储备(x)乘积不变,储备变化当 k = 100,000 时,代币储备 1,000、800、500 分别对应有效报价储备 100、125、200。00112.5250225500337.57504501000有效报价储备(y)代币储备(x)
乘积不变,储备变化

图形不是直线:代币储备减半,有效报价储备就翻倍。取走剩余代币的一半,并不只需上一笔买入成本的一半。

本节使用小规模、无费用的教学库存。实际 Blast 生成币初始供应量为十亿枚整币,只有其中一部分分给曲线。

符号 含义 能否花费?
M 或 x 曲线储备中剩余代币 曲线开放时可供购买
Q 曲线实际持有的报价币 为卖出和毕业分配提供资金
V 对该发行固定的虚拟报价储备 不能;它是定价参数
y = V + Q 公式使用的有效报价储备 只有 Q 是真实资产
k = M × (V + Q) 推导本笔交易时的储备乘积 是数值,不是资产余额
T 真实报价储备毕业目标 当 Q = T 时达到

开盘时 Q = 0,但 V > 0 让曲线仍有非零报价。创建者没有存入 V 枚报价币。它不计入目标、池流动性或可向卖方支付的余额。

下文连续数学推导保持乘积不变。合约使用整数并向下舍入输出,因此每笔交易后乘积可能略微增大。每次报价都应读取当前储备,不能假定起始 k 永远精确不变。

先设 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′ = 25

100 枚虚拟报价币仍是虚拟值。曲线拥有的是 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 接近全部储备时,分母接近零,所需输入无限增大。虚拟报价为正时,有限买入不能清空曲线;毕业封顶还可能更早关闭交易。

该反推式用于连续、无费用解释。构建精确输出交易时,必须按正确顺序补足两种费用、遵守原子单位向上舍入和目标封顶,并验证最终可执行报价。构建器计算的是精确输入金额。

对于极小交易,储备比率给出即期价格:

spot price = (V + Q) / M [单位相同时,为每枚代币的报价币价格]

可以让有效报价储备增加极小的 dy,同时取出 dx 代币:

(M − dx) × (y + dy) = M × y
M × 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)²
真实报价币进入时即期价格上升初始 1,000 代币、100 虚拟报价时,真实报价为 0、25、50、100 时即期价格分别为 0.1、0.15625、0.225、0.4。000.125250.25500.375750.5100每枚代币的报价币价格新增真实报价币(Q)真实报价币进入时即期价格上升初始 1,000 代币、100 虚拟报价时,真实报价为 0、25、50、100 时即期价格分别为 0.1、0.15625、0.225、0.4。000.125250.25500.375750.5100每枚代币的报价币价格新增真实报价币(Q)
真实报价币进入时即期价格上升

当 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 真实报价币时,虚拟储备 100 的价格从 0.1 变为 0.4;虚拟储备 200 时从 0.2 变为 0.45。000.125250.25500.375750.5100每枚代币的报价币价格新增真实报价币(Q)虚拟储备如何改变价格路径初始 1,000 代币,新增 100 真实报价币时,虚拟储备 100 的价格从 0.1 变为 0.4;虚拟储备 200 时从 0.2 变为 0.45。000.125250.25500.375750.5100每枚代币的报价币价格新增真实报价币(Q)
虚拟储备如何改变价格路径 · 实线:V = 100。虚线:V = 200。
同为 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_price

4× 倍数下,sqrt(4) − 1 = 1,因此 V = T;9× 时 V = T / 2。更高倍数把更多价格移动集中到同一真实报价目标。这是设计方程,不是回报承诺。推导库存仍必须符合固定原始供应量、LP、Blast 和全部项目接收方的份额。

提高虚拟储备不会增加真实卖出流动性。Q = 0 时卖出没有真实报价余额支持。即使公式返回正数,也不能支付超过真实储备的金额。

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 + x
y′ = 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_fee
pending_burn = ceil(after_fee × sell_burn_bps / D)
x = after_fee − pending_burn
gross_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.000022857143
90% 的池报价币 = 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)。规范币序可能使比率反转。显示精度不参与原子计算;池边界、刻度和仓位舍入仍需检查。

开盘轮在 60–300 秒后将出价合并为一笔买入。参与者按剩余余额比例领取代币和未使用报价币,每次向下舍入,最后一位领取余数。它不是按各人时间顺序逐笔买入;出价不可撤回。

无开盘轮时,创建者可在公开共享前买入。无论哪种模式,都应披露实际流程。开盘轮不会改变曲线公式,也不会消除合约、托管或管理权限风险。

分析必须说明路径:单笔合并买入、多笔买入、混合买卖,还是开盘轮结算。构建器明确采用两阶段仅买入基准;仅当某阶段输入超过 u64 时,才拆分为有界买入。任何图表都不保证未来价格、收益或未达标退款。使用规划前,请阅读分配与设计选择和安全与权限。

术语 本文含义
报价币 支付与卖出收款资产,例如 SUI,不同于发行代币
原子单位 币的最小整数单位
虚拟储备 用于定价的固定数值,没有对应资产存入
毛额/净额 所述费用或扣减之前/之后的金额
即期价格 极小交易的边际储备比率
平均成交价 实际花费或收到的报价币除以实际收到或提供的代币
价格影响 交易本身规模造成的价格移动
滑点最低值 交易可接受的最低净输出
毕业 达到真实报价目标关闭曲线,再单独迁移入池
池分配 专门用于创建 DEX 池的资产,与未售曲线库存分开
LP 费用 DEX 仓位赚取、经金库收集和路由的费用
估值 价格乘以明确的供应量指标,不是可提取报价流动性

设置和运营限制见分配与设计选择。对象 ID、包版本、错误与精确调用见合约接入指南。