控制与安全
创建者权限
创建者在 predict 之前一次性设定条款。发射将其冻结。发射后创建者仅保留代币页面和对收款地址变更的否决权,不再拥有其他权限。
创建者可设定的参数
| 选择 | 设定位置 | 范围 |
|---|---|---|
| 股票 | request.stock | 已上架的股票 |
| 名称、符号 | request | |
| 税率 | request.taxBps | 100 到 1500 |
| 创建者的税收份额 | request.creatorBps | 0 到 5000 |
| 策略类型 | V2TreasuryDeployer.setStrategyKind(symbol, nonce, kind) | 1 到 5;类型 0 无需调用 |
| 策略数字 | request.tp1Bps、tp2Bps、dipBps、stopBps、lotBps(分批止盈一族);setEngineConfig(symbol, nonce, kind, config)(固定仓位、再平衡) | 范围和下限在核心概念 |
| 开盘窗口 | CurveDeployer.setCurveConfig(symbol, nonce, 7931, snipeSeconds) | 0 到 180 秒;默认 3 |
| 开盘加价免除地址 | CurveDeployer.setOpeningTaxExemptions(symbol, nonce, recipients) | 最多 40 个 |
| 过期容忍带 | request.bandBpsPerHour | 0 到 bandCeiling(stock) |
| 收款地址 | request.creator | 能调用 vetoCreator 的 EOA 或 Safe |
| 代币页面 | launchWithMetadata(..., metadata) | logo、简介、五个链接 |
每项登记都以 keccak256(abi.encode(symbol, msg.sender, nonce)) 为键,与 factory 从 (symbol, creator, nonce) 推导的 salt 相同。
其他地址登记的内容归入该地址自身的 salt,不会作用于创建者的发射。登记在发射前可以修改,不能删除;predict 之后的改动会使 launch
以 Restated 回滚,将报价时的值重新登记一次即可恢复。
创建者不可设定的参数
出售份额(79.31%)、LP 份额(募资的 70%,按股票设定)、开盘价(上架时 $2,140.38 的估值)、协议份额(30%)、池子手续费(0.20%)、
keeper 报酬、回购节奏、门限、预言机和池子。它们都来自 factory 的默认值和上架信息,也都在 terms 里。
发射时冻结
计入 terms 哈希、此后不可变的有:供应量;开盘价;出售份额;开盘窗口和免除地址;税率;创建者份额;协议份额;池子费率和 tick
spacing;策略类型及其数字或引擎字段;lpBps;上架的预言机和 V3 池;门限和卖出 chunk;keeper 报酬;回购参数;最小 lot。曲线的
费用收款方不可变。金库的逻辑可以由 owner 通过两天控制器替换;其数字不能替换。
发射之后
- 代币页面。 发射地址拥有元数据,可以指定一个编辑者,也可以永久锁定。协议对它没有权力。
- 否决权。 owner 对创建者的池子提议新的创建者收款地址时,创建者调用一次
vetoCreator即终止,并且 180 天内不得再次提议。应使用能够发出该 调用的地址。 - 首买。 创建者自己的买入免除开盘加价,但须缴税;可通过
launchAndBuy纳入发射交易。
创建者不能提取金库的股票、池子的流动性或曲线的储备;不能修改税率、分配方式或策略数字;不能暂停交易。
owner 与升级
factory 的 owner 是一个 Safe。它负责上架股票,设定后续发射将冻结的默认值,并对已存在的发射项目持有一组有限的权力。所有权通过两步 转移;放弃所有权被禁用。
对后续发射
| 调用 | 设定内容 |
|---|---|
setDefaults | 整个 Defaults 结构:税率范围、分配、池子费率、门限、keeper 报酬、回购节奏、发射费 |
list、setListingGates、setBandCeiling | 上架、门限、容忍带上限 |
V2TreasuryDeployer.setLpBps | 按股票的 LP 份额,10% 到 100% |
setLauncher、setPublicLaunch | 哪些 router 可以代创建者发射;是否开放公开发射 |
registerKind、registerEngineKind、registerPolicy | 追加策略类型或 policy;不能移除 |
disablePolicy | 停止某个 policy 的新发射;已发射的金库保留自己的 |
在这些变动之前已报价的发射以 Restated 回滚。已发射的项目不受影响。
升级控制器
类型 0 到 6 都是代理,实现指针保存在 V2TreasuryUpgradeController,向代理的存储写入数据无法改变逻辑。
| 步骤 | 调用 | 规则 |
|---|---|---|
| 1 | owner 调用 schedule(treasury, implementation, migrationCalldata) | 记录实现的运行时代码哈希、calldata 哈希、当前 ownershipEpoch 和 readyAt = 现在 + UPGRADE_DELAY(2 天) |
| 2 | readyAt 之后任何人调用 execute(treasury, migrationCalldata) | 候选实现必须仍有记录的代码哈希,报告与金库相同的配置哈希和存储 schema 标识,calldata 哈希必须等于记录值;迁移失败时变更和提案一起回滚 |
owner 调用 cancel(treasury) | 执行之前 | |
| factory 所有权交接完成 | ownershipEpoch 加一;所有待执行提案作废,A→B→A 也算 |
通过的实现可以改变金库的资产保管方式和策略行为。哈希检查是身份检查,不是对新代码的审查。升级无法改变冻结的数字,因为候选实现 必须报告相同的配置哈希。无论金库如何变更,流动性 vault 都没有升级或撤出路径。
对已发射项目
| 权力 | 边界 |
|---|---|
| 安排金库逻辑升级 | 控制器:2 天延时,哈希匹配,配置相同 |
| 通过日历停止交易 | 计划外的休市;价格仍是预言机的 |
setProtocol(poolId, to) | 某个池子里协议自己的收款地址 |
proposeCreator(poolId, to) | 链上公示 14 天;创建者的 vetoCreator 即终止,180 天内不得再次提议 |
owner 的限制
owner 不能从 vault 撤出流动性;不能从金库或曲线提款;不能修改已冻结的费率、分配方式或策略数字;不能修改曲线的费用收款方;不能在 hook 上创建 factory 未发射 的池子;不能修改出售份额。
安全与恢复
协议的大部分环节没有特权操作者。出现异常时,合约等待、拒绝或回滚,用于恢复的调用对任何人开放。
| 情况 | 合约行为 | 可处理方 |
|---|---|---|
| 股票价格源过期(夜间、周末、假日) | health() 为 false;book()、execute() 和止损不运行;代币照常交易;buyback() 按代币池继续 | 任何人,价格新鲜之后 |
oraclePaused()(公司行动) | 同上 | 任何人,发行方的暂停结束之后 |
| 日历显示休市 | 同上,除非这次发射带过期容忍带;止损从不在只有池价时触发 | 任何人,开盘后 |
| 股票池被推离预言机 | 现价偏离预言机或池子 600 秒均价超过 0.5% 时 health() 为 false | 任何人,套利把池价拉回之后 |
| owner 通过日历停止某一天的交易 | 当天股票腿不交易 | owner 解除 |
| 募资额超过股票池承接能力 | 曲线永远无法达到 Rg;保持 Active,持有人卖回曲线 | 链上无人可处理;上架检查在发射前拒绝此类上架 |
| 毕业过程中某一步失败 | 整笔跨线买入回滚;曲线保持 Active | 下一位买家再次买入即构成重试 |
| 毕业股票不能当场记账 | 作为 unbookedStock() 等待 | 任何人在价格可用时调用 book() |
| 股票发行方拒绝向金库交付 | vault 保留股票,下次 collectFees() 时重试;代币销毁照常完成 | 任何人,再次调用 |
| 某个收款方被股票发行方拦截 | 另外两方的领取和交易不受影响;被拦的 claim 等待 | 该收款方,解除之后 |
| 金库已有 128 个 lot | 记账和回调买入暂停;止损和止盈仍执行 | 任何人,执行一次到期的卖出 |
| keeper 落后 | 动作保持到期状态;不会造成任何损失 | 任何人均可发送并获得报酬 |
| 创建者收款地址失联 | owner 可在链上公示 14 天后提议新地址 | 创建者否决;延时后任何人接受 |
| 金库逻辑需要替换 | owner 公示两天后安排 | 延时后任何人执行;执行前 owner 可取消 |
不会发生的情况
- 没有人能撤出 vault 的流动性。vault 没有这个函数,hook 的
beforeRemoveLiquidity对所有人回滚。 - 没有人能从金库提款。股票和 USDG 只通过策略的交易和回购离开金库。
- 没有人能在 hook 上创建 factory 未发射的池子:
beforeInitialize和beforeAddLiquidity仅对已注册的池子及其 vault 放行。 - 没有人能对代币转账收税。hook 只作用于交换。
可执行方
| 调用 | 调用方 | 时机 |
|---|---|---|
book()、execute()、buyback() | 任何人 | 到期时 |
claimFees(recipient)、sweep(poolId)、collectFees() | 任何人 | 有待领取费用时 |
graduate(id) | 任何人 | 只对已经 Ready 的曲线 |
vetoCreator(poolId) | 创建者 | 收款地址提案期间 |
日历停市、setProtocol、proposeCreator、升级控制器 | owner | 按 owner 与升级的边界 |
风险披露
- 金库做多一只股票。 每一种策略在下跌中都持有股票。没有创建者设的止损就不会在下跌途中卖出,回购销毁金库从不卖出。
- 毕业没有保证。 未达到
Rg的曲线始终保持Active,持有人只能卖回曲线。募资额超过股票 V3 池承接能力的发射永远不能毕业。 - 退出深度。 早期曲线买家退出时面对的池子仅持有其投入资金的 70%,加上之后买家投入的部分。一笔卖出可收回的金额取决于池子深度 与代币流通量的对比。
- 销毁不是价格底。 供应量减少仅在该代币仍有需求时才对价格有支撑作用。
- owner 可以在公示两天后更改金库逻辑。 通过的实现可以改变保管方式和策略行为;哈希检查是身份检查,不是审查。锁定流动性不在 这个权力之内。
- 股票代币可由其发行方升级,发行方可以暂停或拒绝转账。金库的持仓、vault 的股票和每一笔费用 claim 都依赖这个代币。
- 持币人对金库没有索取权(目前没有,后续可以增加)。没有赎回,没有分红。
- 审查状态。 本版本经过内部审查、fuzz 和 fork 演练,列在审计。v2 代码没有已发布的外部审计报告。
- 发射不代表背书,股票发行方、协议或任何人都不背书。任何人都可以用任何名字在任何已上架股票上发射。
- 法律地位未经评估。 金库累积代币化股票的代币没有经过法律顾问审查。产品不向美国人士和受制裁地区开放: 使用资格限制。
这里没有任何内容构成投资建议、出售要约或购买邀约。Hedgefun 不是基金:没有份额、没有净值、没有赎回、没有管理人。 使用条款。
审计
v2 代码没有已发布的外部审计报告。 v2.0 标签带有内部工程审查、fuzz 和不变量测试,以及 fork 演练。每份文档均自行注明:
“内部工程审查,不是外部审计”“本地审查不是第三方审计”。下表是标签处实际存在的内容。
审查轮次
| 审查 | 日期 | 范围 | 记录的结论 |
|---|---|---|---|
对抗性审查(V2_ADVERSARIAL_REVIEW.md) | 2026-09-23 | 885123e 处的 v2 曲线、factory、hook 和金库路径;三条审查线;多用户排序、回调防御、独立记账、真实场所 fork | 该提交处代码审查与集成 GO;不批准之后的改动 |
双引擎审查(V2_DUAL_ENGINE_REVIEW.md) | 历史 | 毕业同时为池子和金库注资的改动、费用 vault 及其风险 | 被双向费用改动取代 |
发布与测试网审查(V2_RELEASE_REVIEW_2026_09_29.md、V2_TESTNET_REVIEW.md) | 2026-09-29 | 部署、收款权限、创建者身份、预言机和日历配置、发射流程 | 公共测试网试点有条件 GO;当时的快照主网 NO-GO |
| 审计第 1 到 4 轮 | 截至 2026-09-27 | 上游仓库 audit/ 目录里的问题清单;第 3 轮(M-2、M-3)产生了上架检查,第 4 轮产生了引擎下限和税率、募资的决定 | 发现项已在源码和流程中处理,见 STRATEGY_ENGINE.md、SpotEngineConfig.sol、V2_DEPLOYMENT_REHEARSAL.md |
循环审查与审计记录(V2_CYCLE_INTEGRATION_REVIEW.md、V2_SIMPLE_CYCLE_AUDIT.md) | 2026-10-03 | 循环类型及其与 dust 处理的集成 | GO,发现并修复一个 P2 |
fuzz 与 fork 测试
FUZZ_TESTNET_2026-10-03.md和V2_FUZZ_SUPPLEMENT_REPORT.md:针对百分比额度、成本记账和 dust 处理的 Foundry fuzz 与有状态 不变量测试,加一轮公共测试网交易闭环。docs/fuzz/:2026-10-04 的可升级类型测试(离线套件、三轮带种子的收入与升级测试、存储布局比对、21 个场景的测试网 fork)和带 独立审计日志的金库画像测试。V2_DEPLOYMENT_REHEARSAL.md和发布手册:主网部署的 fork 演练和端到端 fork 套件,九个测试,从部署到每种类型各一次发射、再到 对真实池子和预言机的每个策略动作,在发布提交上运行。- 仓库的测试套件,包括
V2CurveSecurity.t.sol、V2TradablePercentAudit.t.sol和各审查里点名的对抗性套件。
结论
合约经过作者和独立内部审查线的审查、fuzz,以及 fork 演练。没有经过外部机构审计。发射上线后除金库逻辑外不可变,金库逻辑可由 owner 公示两天后替换。应将审查状态视为风险之一。
支持
| 邮箱 | team@hedgehood.app |
| X | @0xHedgehood |
| 安全联系方式 | — |
| 漏洞赏金 | — |
| 状态页 | — |
| 合约仓库 | Hedgefun-trade 仓库,v2.0 标签 |
发现漏洞请先发送邮件,再进行任何其他披露。标为“—”的各项尚未建立,建立后将补充。