双头寸发射

自 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 的虚拟储备正是那个偏移量。这种对应关系不是近似,而是用另一种写法写出的同一个方程。

取消它带来的好处:没有迁移——协议风险最高的时刻——没有可供抽取的毕业费,费用路径只有一条而不是两条,而且市场从第一个区块起就能被聚合器路由。

两个区间

graph LR A["FDV 3.409 ETH

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 起,它有一个出口,即终止模式,用于项目关闭的情形。

  1. 宣布。StockFun 的所有者调用 end(),锁定合约随即公开记录 30 天之后的日期。从那时起,不能再发射新的市场,也不能再创建 $STOCKFUN 头寸,因此每个市场都能获得完整的事先公告期。交易和手续费收取照常进行
  2. 事先公告期。在 30 天内,每个池子都照常交易。所有者可以随时通过 cancelEnd() 取消,发射随之恢复
  3. 回收。30 天期满后,所有者可以取出一个池子的每一个头寸——一个市场的两个区间、$STOCKFUN 的单一头寸——并把其中的 ETH 和代币(包括未收取的捐赠)发送到任意地址(recoverLiquidity)。被回收的池子不再收取任何东西,也不再算作已锁定;之后的取消会让它保持为空

这 30 天是给持有者的事先公告期。它们是锁定合约的一个常量 END_DELAY,不是一项设置:这是协议中唯一固定的延迟。

在终止模式之外,没有任何东西能触及这些头寸。自 2026-10-05 起,一次手续费收取中被接收方拒收的那一份,由锁定合约为该接收方保留,直到任何人支付它(payOwed);StockFun 的所有者还可以把误发给锁定合约的东西转出(rescue、rescueClaims、rescueNft):任何代币、超出它所保留份额的 ETH、v4 claims、一个 NFT。锁定合约没有通用调用:借助 PoolManager,这样的调用可能绕过 30 天,直接达成终止模式的回收。