双头寸发射
自 2026-09-12 的修订以来,不再有联合曲线。全部供应量从创建交易本身起就进入锁定的 Uniswap v4 流动性。自 2026-09-28 起已写进代码:LiquidityLock.launchMarket 在市场的创建交易内完成这一切,测试也固定了 Lens 读取的开盘价格,即每枚代币 3,401,582,525 wei。
为什么取消了曲线
旧曲线是基于虚拟储备的恒定乘积:
x = VIRTUAL_ETH + netReserve (3.75 ETH + 流入的数量)
y = TOKEN_RESERVE - tokensSold (1.1 B − 流出的数量)
这恰恰就是一个集中流动性头寸:v3/v4 的虚拟储备正是那个偏移量。这种对应关系不是近似,而是用另一种写法写出的同一个方程。
取消它带来的好处:没有迁移——协议风险最高的时刻——没有可供抽取的毕业费,费用路径只有一条而不是两条,而且市场从第一个区块起就能被聚合器路由。
两个区间
tick 195000
开盘"] -->|区间 1 · 700M 枚代币 · 7.535 ETH| B["FDV 34.091 ETH
tick 171960
10x"] B -->|区间 2 · 300M 枚代币 · 无上限| C["tick −887220
价格上限"]
| 区间 1 | 区间 2 | |
|---|---|---|
| 代币 | 700,000,000 | 300,000,000 |
| Tick | [171960, 195000] |
[−887220, 171960] |
| 深度 | 穿越需要 7.535 ETH | 2× 时 14.5 ETH · 20× 时 45.7 ETH · 200× 时 144.6 ETH |
tickSpacing 为 60,没有 LP 手续费。
这些是默认的发射设置。自 2026-10-05 起,供应量、区间 1 中的代币数量(其余归区间 2)、发射 tick、两个区间的下沿 tick、tick 间距和 LP 手续费构成 StockFun 所有者的一项设置,即工厂合约上的 setLaunchConfig,适用于此后创建的市场。它会拒绝任何池子都无法容纳的形态:空的区间、不在间距上或顺序错误的 tick、超出范围的 tick 间距或 LP 手续费,以及一个 tick 无法承载其流动性的区间。每个池子保留它创建时的形态、LP 手续费和 tick 间距:锁定合约记录其 tick,Lens 则给出每个市场的 LP 手续费和 tick 间距。
微妙之处:开盘价格
两个头寸在发射时都只持有代币。正是这一点让协议无需垫付任何 ETH:池子将来持有的每一个 ETH 都来自买家。
要让一个头寸只包含代币,当前价格必须位于其区间上沿或更高。因此:
sqrtStartX96 = TickMath.getSqrtPriceAtTick(BAND1_UPPER); // not sqrt(raw FDV)
发射 FDV 的精确 tick 是 194,977.95,其上方最近的可用 tick 是 195,000。如果从原始 FDV 推导 sqrtStart,价格就会落在区间 1 之内,而 LiquidityLock 的 NotSingleSided 检查会拒绝这笔存入。
量化使实际 FDV 为 3.4016 ETH,而不是 3.409,偏差为 −0.22 %。
实际效果
在默认设置下,从发射开始,连续进行每笔 2 ETH 的买入:
| 已花费 | FDV | 持有的供应量 |
|---|---|---|
| 2 ETH | ~$27,600 | 36.1 % |
| 4 ETH | ~$50,400 | 53.3 % |
| 10 ETH | ~$164,000 | 74.8 % |
| 50 ETH | ~$2.78 M | 93.9 % |
第一笔买入拿走了 36.1 % 的供应量——旧曲线上则为 36.99 %。发射的表现与之前相同,误差在一个点以内,而这正是选择这些参数时所依据的标准。
区间的结构性上限
如果 100 % 的供应量都位于某个区间中,该区间所能吸收的 ETH 恰好等于其两端 FDV 的几何平均数:
$$ E{\max} = \sqrt{\text{FDV}{\text{start}} \times \text{FDV}_{\text{end}}}
$$
这正是约束参数的因素:你无法同时自由选择发射价格、区间上沿和深度——代币数量使这个系统闭合。
终止模式
与代币一样,锁定合约无法升级:正是它的代码把流动性保留在池子中。自 2026-10-02 起,它有一个出口,即终止模式,用于项目关闭的情形。
- 宣布。StockFun 的所有者调用
end(),锁定合约随即公开记录 30 天之后的日期。从那时起,不能再发射新的市场,也不能再创建$STOCKFUN头寸,因此每个市场都能获得完整的事先公告期。交易和手续费收取照常进行 - 事先公告期。在 30 天内,每个池子都照常交易。所有者可以随时通过
cancelEnd()取消,发射随之恢复 - 回收。30 天期满后,所有者可以取出一个池子的每一个头寸——一个市场的两个区间、
$STOCKFUN的单一头寸——并把其中的 ETH 和代币(包括未收取的捐赠)发送到任意地址(recoverLiquidity)。被回收的池子不再收取任何东西,也不再算作已锁定;之后的取消会让它保持为空
这 30 天是给持有者的事先公告期。它们是锁定合约的一个常量 END_DELAY,不是一项设置:这是协议中唯一固定的延迟。
在终止模式之外,没有任何东西能触及这些头寸。自 2026-10-05 起,一次手续费收取中被接收方拒收的那一份,由锁定合约为该接收方保留,直到任何人支付它(payOwed);StockFun 的所有者还可以把误发给锁定合约的东西转出(rescue、rescueClaims、rescueNft):任何代币、超出它所保留份额的 ETH、v4 claims、一个 NFT。锁定合约没有通用调用:借助 PoolManager,这样的调用可能绕过 30 天,直接达成终止模式的回收。