发射与曲线
- 一次发射把一枚新代币放在以上架代币化股票报价的联合曲线上出售;出售份额固定为 1,000,000,000 供应量的 79.31%,每个上架都按 $2,140.38 的估值开盘,售罄时募集约 $8,205 的股票。
- 越过 79.31% 的那笔买入在同一笔交易中完成毕业:募资的 70% 锁入 Uniswap v4 池,30% 成为金库的策略本金,价格原样延续,约为开盘价的 23 倍。
- 每笔交易支付创建者设定的 1% 到 15% 的税,以股票计,分配为协议 30% / 创建者最多一半 / 金库其余;毕业后另加 0.20% 的池子手续费,计入金库的回购预算。发射费用为 0.0005 ETH。
- 创建者选择税率、开盘窗口(0 到 180 秒)和策略;发射时全部冻结。已在主网上线:2026-10-06 部署,公开发射已开放。
总览
Hedgefun v2 是一个策略代币发射协议。创建者部署一枚以代币化股票计价的代币,公众从联合曲线上买入,供应量卖出 79.31% 后, 发射毕业进入一个流动性永久锁定的 Uniswap v4 池。募集的股票中 30% 注入金库,金库按创建者选定的规则交易该股票,所得收益用于 回购代币并销毁。
主网于 2026-10-06 按这些合约 部署,创建者上限提高到一半,公开发射已开放。合约页列出地址表。
要点
| 报价资产 | 上架的股票,曲线和池子都是;不用 USDG |
| 供应量 | 1,000,000,000 枚,18 位小数,一次铸给曲线 |
| 出售份额 | 79.31%,固定在 CurveDeployer;创建者仅选择开盘窗口(0 到 180 秒)和税率(1% 到 15%) |
| 开盘估值 | 每个上架 $2,140.38;售罄时募集约 $8,205 的股票,毕业估值约 $50,000 |
| 毕业 | 在跨线买入中完成;募资 70% 注入两个锁定的 v4 头寸,30% 转入金库 |
| 费用 | 曲线和池子的每笔交易都以股票缴税,分配为协议 30% / 创建者最多一半 / 金库其余;池子手续费 0.20% 计入回购预算;keeper 报酬 0.1%;发射费 0.0005 ETH |
| 策略 | 分批止盈、回购销毁、固定仓位、再平衡、按比例回购、循环、预留现金的分批止盈(类型 0 到 6;类型 6 于 2026-10-06 注册) |
| 升级 | 仅限金库逻辑,由 factory owner 通过固定 2 天延时的控制器升级;流动性 vault 没有升级路径 |
相对 v1 的变化
| v1 | v2 | |
|---|---|---|
| 发射 | 全部供应量作为单边 v4 流动性注入 | 先经联合曲线,再毕业进入 v4 |
| 资本 | 不需要 | 买家为曲线注资;募资的 30% 成为金库资本 |
| 买入税 | 收代币,销毁 | 收股票,三方分配 |
| 回购后的卖出尖峰 | 90%,120 秒内衰减 | 没有 |
| 池子手续费 | 0 | 0.20%,计入回购预算 |
| 策略 | 一条规则,五个数字 | 七种类型,每次发射选一种 |
| 金库逻辑 | 不可变 | owner 公示两天后可升级 |
| keeper 报酬 | 0.5% | 0.1% |
| sweep 小费 | 0.5% | 0 |
v1 保持部署,不做改动:Hedgefun 协议 v1。
合约
每条链部署一次
| 合约 | 作用 |
|---|---|
HedgeFunV2Factory | 上架股票(list、setListingGates),报价(predict)并执行发射(launch、launchWithMetadata),在 strategies(id) 和 curves(id) 记录每次发射,保存每次发射都会冻结的 Defaults。graduateCurve 由曲线在跨线买入中调用;graduate(id) 是 Ready 曲线的公开入口。 |
CurveDeployer | 为每次发射部署曲线和流动性 vault。构造时写入唯一的出售份额 DEFAULT_SALE_BPS = 7931,setCurveConfig 拒绝其他值。保存创建者的开盘窗口和最多 40 个开盘加价免除地址。以 factory 的身份执行毕业。 |
TokenDeployer | 部署 HedgeFunToken。 |
V2TreasuryDeployer | 策略类型和 policy 的注册表;按股票的 LP 份额(lpBps,默认 7000,下限 1000);创建者的 setStrategyKind 和 setEngineConfig。部署每个金库。构造升级控制器。 |
V2TreasuryUpgradeController | 金库逻辑升级的 schedule、cancel、execute;UPGRADE_DELAY = 2 天。 |
HedgeFunV2Hook | 所有毕业池共用的唯一 Uniswap v4 hook。version() = 3;地址标志位 0x28CC。两个方向都以股票收税,按池记账,sweep 时支付。 |
HedgeFunV2TradeRouter | buy 和 sell,接受任何能经至多 3 跳标准 V3 池换到股票的 ERC20;毕业前对接曲线,毕业后对接 v4 池。 |
HedgeFunV2NativeRouter | 在同一条路线外层做 ETH 的进出。 |
HedgeFunV2LaunchNativeRouter | launchAndBuy:发射费、发射和创建者的首笔曲线买入,一次 ETH 付款完成。需要 setLauncher(router, true)。 |
TradingCalendar | 健康门读取的美股日历;owner 的停市开关。 |
PriceOracle | 每只股票一个:以 USDG 计的 Chainlink 价格,带日历和三种价格里的过期规则。 |
V2RebalancePolicy、V2TradablePercentRebalancePolicy | 类型 2 和 3 的无状态 policy。以 STATICCALL 调用;返回一个意图:持有、买股票、卖股票。 |
| 类型代码块 | 每个已注册类型两个惰性合约,保存金库的创建代码。 |
每次发射创建
| 合约 | 作用 |
|---|---|
HedgeFunToken | 策略代币。普通 ERC20:没有 owner、没有增发函数、不能暂停、转账不收税。带 logo、description、socials。 |
HedgeFunBondingCurve | 销售本身:未售代币、真实股票储备、税款账本、向 factory 的交接。 |
| 金库 | 七种类型之一。收取募资的 30% 和之后所有税收份额;在上架指定的股票/USDG Uniswap V3 池上交易股票。 |
V2LiquidityVault | 持有池子的两个头寸。没有撤出流动性、任意调用或升级的函数。collectFees 无需权限。 |
| v4 池 | token/stock,费率 0.20%,tick spacing 60,运行在共用 hook 上。 |
发布参数
发布脚本构造核心时使用的 factory Defaults(V2MainnetDefaults.release())。每次发射在 launch 时冻结自己的一份。owner 可以为之后的发射修改。
| 参数 | 发布值 | 含义 |
|---|---|---|
supply | 1,000,000,000 × 10¹⁸ | 代币供应量 |
saleBps | 7931(79.31%) | 曲线出售的供应量份额;CurveDeployer 的常量 |
lpBps | 7000(70%) | 募资中注入锁定池的份额;按股票设在 V2TreasuryDeployer,下限 1000 |
lpFee | 2000(0.20%) | 池子手续费,v4 单位;factory 接受 1 到 3000 |
tickSpacing | 60 | |
minTaxBps、maxTaxBps | 100、1500 | 创建者的税率范围 |
protocolBps | 3000(30%) | 协议从已收税款中获得的份额 |
maxCreatorBps | 5000(50%) | 创建者最多可获得的已收税款份额 |
spikeBps、spikeSeconds | 0、0 | 没有卖出尖峰 |
sweepTipBps | 0 | 没有 sweep 小费 |
snipeBps | 9900(99%) | 发射那一秒的买入费率 |
snipeSeconds | 3 | 默认开盘窗口;创建者可选 0 到 180 |
bountyBps | 10(0.1%) | 一次策略动作付给 keeper 的报酬,按动作产出计 |
maxSlippageBps | 100(1%) | 金库交易相对预言机的价格限制 |
maxDeviationBps | 50(0.5%) | health() 为 true 时股票池偏离预言机的最大幅度;1% 费率的池为 125 |
maxBuybackImpactBps | 300(3%) | 回购相对代币池均价的价格限制 |
buybackCooldown | 10 秒 | 两次回购之间的最短间隔 |
minLotUsdg | 5 USDG | 低于此数的金库交易不执行 |
buybackChunkUsdg | 500 USDG | 分批止盈一次回购的出价 |
sellChunkUsdg | 2,000 USDG | 单次策略卖出的上限 |
launchFeeCurrency、launchFeeAmount | Native,0.0005 ETH | launch 时支付给 protocol |
合约常量:回购 TWAP 窗口 600 秒;每个金库最多 128 个不同成本的 lot;40 个开盘加价免除地址;router 最多 3 跳。
合约仓库里的发布手册把协议份额写成 20%。部署代码把 protocolBps 设为 3000,费用文档也把改到 30% 的日期记为 2026-10-05。
这里写的是代码的值。
本版本不包含
| 项目 | 状态 |
|---|---|
| 分红和收入类型 | 在源码中;没有注册到任何发布版注册表。代理类型以后可以通过控制器接收兼容的分红实现 |
| 以 ETH 计价的发射 | v2.1 |
发射生命周期
一次发射经过三个状态,都记在曲线上:Active(0)、Ready(1)、Graduated(2)。Ready 只存在于跨线买入的那笔交易内部。
发射时
factory.launch(request, terms) 或 launchWithMetadata(request, terms, metadata),附 0.0005 ETH 的发射费,在一笔交易中完成四项操作:
- 部署
HedgeFunToken,把全部供应量 1,000,000,000 枚铸给曲线。 - 部署
HedgeFunBondingCurve,股票储备为零,带创建者冻结的条款。 - 部署所选策略类型的金库,未激活:毕业前
health()返回(false, 0)。 - 在
strategies(id)和curves(id)记录这次发射,发出Launched和CurveLaunched。
先报价:predict(request) 返回代币地址、金库地址和 terms。terms 是这次发射全部构造输入的哈希。报价和发射之间任何默认值、
上架信息、门限或已登记的选择变动,launch 都以 Restated 回滚。创建者自己的首买可以通过
HedgeFunV2LaunchNativeRouter.launchAndBuy 放在同一笔交易里。
曲线活跃期间
买家将股票支付给曲线,扣税后计入储备,价格随每笔买入上涨。卖家收回扣税后的股票,价格下跌。税在曲线内部累计为协议、创建者和金库
的 claim;任何人都可以通过 claimFees(recipient) 将某个收款方的 claim 支付出去。最初 0 到 180 秒,买入费率带
开盘窗口的加价。
曲线没有截止时间。未达到目标的曲线始终保持 Active;只要股票本身仍可转账,持有人即可卖回曲线。
跨线买入
将真实储备推至目标的那笔买入自行完成毕业。曲线进入 Ready,释放交易锁,调用 factory.graduateCurve()。factory 释放该曲线
记录的储备,按曲线最后价格初始化 v4 池,由 vault 注入两个锁定头寸,将募资的 30% 转给金库并完成接通。只有曲线读到 Graduated 时
买入才返回;中途任何失败都回滚整笔买入,付款和销毁一并撤销,曲线保持 Active。公开的 graduate(id) 入口不能让 Active 曲线
提前毕业。细节在毕业。
毕业之后
代币在共用 hook 上的 v4 池里交易,两个方向都以股票缴税,另收 0.20% 池子手续费。曲线以 Closed() 拒绝交易;其上累计的
claim 仍可领取。金库上线:收入记账,策略通过 execute() 运行,buyback() 使用回购预算。不会再次毕业,也不会迁移。
| 状态 | 交易场所 | 股票所在位置 | 金库行为 |
|---|---|---|---|
Active | 曲线 | 曲线的储备 | 不运行;health() 为 (false, 0) |
Ready | 无,瞬时 | 转移中 | 正在接通 |
Graduated | v4 池 | 70% 在 vault,30% 在金库 | 运行策略 |
联合曲线
曲线是一个以上架股票报价的常数乘积市场。一个虚拟股票余额让开盘价不为零,真实储备从零开始,由买家注资。
公式
S 为供应量,V 为虚拟股票,T 为曲线账上的代币库存。
V = ceil(openPriceE18 × S / 1e18) 虚拟股票,由上架开盘价算出
K = S × V 固定乘积
Y = ceil(K / T) 库存为 T 时的有效股票
R = Y − V 真实股票储备
Tmin = floor(S × (10000 − 7931) / 10000) 销售结束时的库存:206,900,000 枚
Yg = ceil(K / Tmin) 结束时的有效股票
Rg = Yg − V = V × 7931 / 2069 募资额,约 3.833 × V
- 终点价格:
Yg / Tmin= 开盘价 ×(10000 / 2069)²≈ 23.36 × 开盘价。$2,140.38 的开盘估值,终点约 $50,000。 - 交易两侧都按
ceil(K / T)取整;往返交易无法套取整数余量。 - 买入上限是净本金恰好到达
Rg的那笔总付款;未用完的部分以股票退回。 - 卖出返还扣税后的股票。虚拟股票永远不可支出。转给曲线的代币不影响任何数字:报价、储备、进度都不变。
出售份额
供应量的 79.31% 在曲线上出售。这个份额是 CurveDeployer 的构造参数(DEFAULT_SALE_BPS = 7931),setCurveConfig 拒绝其他值,
因此创建者、owner 及之后的任何交易均无法更改。一只股票的募资额仅由上架决定。剩余 20.69% 的供应量在毕业时进入两个锁定的池子头寸。
曲线上的费用
曲线上的每笔买入和卖出都以股票缴纳创建者设定的税,按协议 30% / 创建者最多一半 / 金库其余分配,以 claim 的形式记在曲线内部。只有 开盘窗口的加价会销毁代币。出售份额按毛代币数计,开盘销毁的部分也算进 79.31%。
读取
| 视图 | 含义 |
|---|---|
status() | 0 Active,1 Ready,2 Graduated |
realStockReserve()、terminalStock() | 距 Rg 的进度 |
tokenReserve()、minTokenReserve() | 未售库存和 Tmin |
virtualStock()、invariant() | V 和 K |
quoteBuy(maxStockIn)、quoteSell(tokenIn) | 报价;见获取报价 |
开盘窗口
发射后的最初 snipeSeconds 内,曲线的买入费率从 snipeBps(99%)起,直线降到创建者的税率。窗口由创建者选择,0 到 180 秒,
默认 3 秒。高于税率的加价从买家的代币产出里销毁;税本身是股票收入。
rate(t) = taxBps + ceil((snipeBps − taxBps) × (snipeSeconds − t) / snipeSeconds) t < snipeSeconds 时
rate(t) = taxBps 之后
burn = floor(grossTokens × (rate − taxBps) / (10000 − taxBps)) 代币,从买家的产出里扣
- 99% / 3 秒、税率 10% 时:99%、69.34%、39.67%,然后 10%。税率 15% 时:99%、71%、43%,然后 15%。
- 60 秒窗口:第 30 秒 54.5%,第 59 秒 11.49%。180 秒窗口:第 1 秒 98.51%,第 179 秒 10.5%。
snipeSeconds= 0,或snipeBps≤taxBps:从第一秒起就是固定税率。
该链每 0.1 秒产生一个区块。若无窗口,开盘即为延迟竞争;设置窗口后,开盘成为一场降价拍卖,晚一秒买入者的费率低于抢占第一个区块者。
免除地址
创建者自动免除加价。发射前创建者可以用 CurveDeployer.setOpeningTaxExemptions(symbol, nonce, recipients) 再冻结最多 40 个免除
地址;曲线在发射时发出 OpeningTaxExemptionsFixed。被免除的地址仍缴基础税。quoteBuyFor(amount, recipient) 针对指定收款人报价;
buyRateBpsFor(recipient) 给出其实时费率。
不适用窗口的情形
- 卖出侧:始终没有窗口,也没有尖峰。
- 毕业池:
registerGraduatedWithVault拒绝窗口,池子从第一笔交换起就是固定税率。hook.buyRateBps(poolId)和hook.sellRateBps(poolId)都返回税率。 - 回购:v2 把
spikeBps冻结为 0,金库回购之后卖出费率不会抬高。
毕业
毕业是曲线的终点,也是池子和金库的起点。它发生在把真实储备推到 Rg 的那笔买入里,在该买家的交易中完成,无需投票,无需等待。
分配
lpStock = floor(Rg × lpBps / 10000) vault 的股票预算;lpBps 默认 7000
treasuryStock = Rg − lpStock 转给金库,作为策略本金
lpBps 是 V2TreasuryDeployer 里按股票设置的值(默认 70%,下限 10%),属于发射的 terms,发射时对该金库冻结
(lpBpsOfTreasury)。vault 未用完的股票预算退给 factory,factory 转给金库。
两个头寸
factory 按曲线终点价初始化池子,vault 注入两个归它所有的头寸:
| 头寸 | 内容 |
|---|---|
| 全区间,salt 0 | 股票预算加约 Tmin × floor(Rg / 2) / Yg 枚代币(参考设置下约为供应量的 8.20%) |
| 单边,salt 1 | 剩余代币(约为供应量的 12.49%),从现价代币一侧的下一个可用 tick 到可用的极端 tick |
lockedSeedTokens | 取整剩余;不退回,也不是手续费收入 |
vault 没有撤出流动性、任意调用或升级的函数。此即锁定的含义。毕业时池子现价等于曲线最后价格,价格不发生跳变。毕业不销毁代币:
Graduated 保留原 ABI,tokenBurned 为 0;GraduationCapitalSplit(id, lpStock, treasuryStock, treasuryBooked) 记录金额,
以及金库是否当场记账。
金库的资本
募资的 30% 到达金库,wire() 激活策略。市场开盘、价格新鲜时股票当场记账;否则作为 unbookedStock() 等待,任何人均可调用 book()
记账。金库将终点价记为第一个回购锚点,新建的观测环不会将被操纵的现价用于第一次回购。
某一步失败时
毕业过程中的任何失败(池子拒绝注入、股票发行方拦截转账、回调回滚)都会回滚整笔跨线买入,付款和销毁一并撤销。曲线保持
Active,继续交易。募资额超过股票 V3 池承接能力的发射永远不能毕业;股票配对中的上架检查旨在
于发射前拒绝此类上架。
股票配对
每次发射都和一只 factory owner 已上架的代币化股票配对。上架确定了创建者无法替换的三项内容:这只股票的 PriceOracle、金库交易
用的股票/USDG Uniswap V3 池,以及开盘价。
listings(stock) → (oracle, v3Pool, openPriceE18, enabled)
listingGates(stock) → (maxDeviationBps, maxSlippageBps, sellChunkUsdg)
bandCeiling(stock) → 创建者可选的过期容忍带上限
预言机
每只股票一个 PriceOracle:Chainlink 的 RHxxx / USD 价格除以 USDG 价格,带交易日历和三种价格里的过期规则。
价格源是 24/5 的;公司行动期间 oraclePaused() 为 true。金库页上的健康门读取该预言机。
池子
金库只在上架指定的股票/USDG V3 池上交易,健康门也只读这个池子。其他资产的深池不予计入。因此上架取决于 V3 池的深度。
开盘价规则
openPriceE18 = floor(openingFdv × 1e18 / (price × 1e9))
openingFdv = 50,000 × 2069² / 1e8 = $2,140.38
price = 预言机实时的 tryPrice(),每股 USDG,18 位小数
因此每个上架均按 $2,140.38 的估值开盘,募集约 $8,205,毕业时约 $50,000。owner 在交易日、价格新鲜时设置。之后开盘估值随股价漂移; 重新上架可以重新校准,只影响之后的发射。
门限和份额
| 输入 | 发布值 |
|---|---|
lpBps | 默认 7000;仅在需要偏离默认值时调用 setLpBps(stock, bps),范围 1000 到 10000 |
maxDeviationBps | 50;1% 费率的池为 125 |
maxSlippageBps | 100 |
sellChunkUsdg | 2,000 USDG;0.05% 费率的池不超过上架检查打印的 chunk |
bandCeiling | owner 未设置时为 0;创建者的容忍带在 0 到上限之间 |
上架检查
tools/v2_launch_check.py --factory <factory> --stock <T> 在近期区块的 fork 上、交易日里运行,每次上架前和第一次发射前各一次。
该检查确认池子能够承接本次募资,并且募资不会把池价推出偏差门限。
区块 81,045,661(2026-10-05,美股时段)、按发布规则的首日候选:24 个里 18 个通过:NVDA、SPCX、CRCL、GOOGL、AMZN、GME、META、
MSTR、MU、AAPL、QQQ、MSFT、TSLA、USO、GLD、SGOV、SPY、DELL。PLTR 和 SLV 以几个基点之差未过偏差门限,INTC 和 AMD 差距更大;
USAR 和 TSM 的池子深度不足,无法承接募资。这是一个区块的数字;每次上架前重跑,已上架集合从 listings(stock) 读取。