跳到主要内容

对接

前端或索引器需要的东西。协议那页讲原理,这页讲接口。

:::info 合约已上线,协议还关着

六个核心合约已经部署在链 4663 上并且冻结。但现在还发不了任何东西:公开发射是关的、没有上架任何股票、发射 router 还没被 授权、策略数是 0。

下面是生产地址,2026-09-22 在链上只读核对过。不在这一页上的地址都不是 Hedgefun——特别注意别把任何东西指向沙盒 hook, 那是另一个合约,地址看起来很像。

:::

网络

Robinhood Chain
Chain ID4663
台面hedgefun.trade——独立域名,不是应用的子域名
区块浏览器robinhoodchain.blockscout.com
发射自己的池子Uniswap V4,挂共用 hook,用股票计价
国库的股票腿只有 Uniswap V3,并用 10 分钟 TWAP 印证现价
股票预言机Chainlink,RHxxx / USD ÷ USDG 喂价——见三个价
出块时间约 0.1 秒,所以这里每一处衰减都按秒计时而不是按块

合约

生产地址

从提交 3dc07eb 部署,链 4663 的第 69,454,565 块;2026-09-22 在第 69,459,976 块做过只读核对。六个合约都有 Sourcify 的 creation 与 runtime match(不是 exact_match);Blockscout 的源码展示和 Uniswap 的路由批准是另外两回事,不会因此自动 成立。

合约地址
HedgeFunFactory0x58F6Ced8d02cD2567f1458801440Bc4eb67fA961
HedgeFunHook0x2A16d0973385952cFBE750D37f803d0958472844
TradingCalendar0xFE9E85f0C258Fc2757eB6Acd1ca032Ec860487F5
HedgeFunLaunchRouter0x470F5DeB0897118F6575F72183781C6a0610E1FA
TreasuryDeployer0x05BC7875a7d61C3bbA2D7737D40C81aF5fD10DBE
TokenDeployer0x9C0440dCc1b651C4707aa44E0eA083Fa4E0E8A6b
HedgeFunTradeRouter0xb281F7D91325A3A386A00cA0F6010BC8B1491c8C

ownerprotocol 和日历的 owner 是同一个 Safe:0x2910117dd2cB431173Ae9Fb6eAF30726321d1693,3/4 多签, pendingOwner 为零。

已上架的股票

12 只,由 owner 上架:NVDA、AMD、MU、INTC(半导体组),SPCX、CRCL、GOOGL、AMZN、GME、META、USAR、MSTR。 每只的开盘 FDV 大约 $10k。

一次上架就是三样东西,而且从工厂读、不要从我们这里抄——它们正是创作者不能自己选的预言机和池子:

listings(stock) -> (oracle, pool, openingPrice)

# 2026-09-22 链上核对
listings(NVDA) -> 0x03c77f527Aa1B0B304602e3fB9Ac994dd1c157f8 # PriceOracle
0xd4EB21209C4D6093f80B5b84f5C45cc093EA14a3 # 股票腿交易的那个 V3 池
44200000000 # 开盘价

公开发射是关的。 publicLaunch 读出来是 falsestrategyCount0,所以发射表单应该如实说明,而不是暗示今天 任何人都能发。

每个合约干什么

合约你为什么会调它
HedgeFunFactorypredict(request) 拿报价和它的哈希,launch(request, terms) 发射,以及创作者能选的上架清单
HedgeFunHook所有发射共用一个实例,状态按 pool id 分。实时税率、分账、以及税的事件
HedgeFunToken代币本身,外加它的页面——logo()description()socials()getTokenInfo()沿用 pons 的读取函数名和选择器,所以给 pons 代币写的工具不用改就能读它
HedgeFunTreasurylot、储备,以及 health()
HedgeFunLaunchRouter一笔交易完成:发射 + 创作者第一笔买入 + 给国库第一批股票
HedgeFunTradeRouter一笔交易完成 USDG ↔ 发射代币:先走 V3 这一跳(全成或全不成),再进 V4 池
PriceOracleTradingCalendar股票的 USDG 价格,以及它查询的 24/5 交易日历

ABI 打包在合约仓库的 abi/ 里,旁边有一份生成的接口清单,main 上的是最新的。要按真正部署的那个 commit 重新生成:止盈 字段在 09f42b4 加宽成了 uint32,这改变了 launchlaunchWithMetadatapredict 的选择器,比它早生成的都是过期的。

发射

发射要传请求和 terms——也就是 predict(request) 返回的哈希,代表发射者对自己看到的全部报价的承诺。如果中间有上架、默认值或 费用变了,launch 会 revert,而不是按新的值成交。

字段是什么
namesymbol代币的名字和符号
stock工厂已经上架的股票。自带地址会被拒绝:创作者提供的预言机就是创作者控制的价格
creator永久接收股票计价卖出税里创作者那一份。必须是能调用 vetoCreator 的地址——EOA 或 Safe,不能是分账合约
taxBpscreatorBps税率和创作者的分成,都被工厂限住
tp1Bpstp2Bps两档止盈,uint32没有上限——创作者设了多大就如实显示多大
dipBps抄底在上一次卖出价往下多少处买
stopBps可选止损。0 表示没有止损,此时一个 lot 永远不低于自己的成本卖
lotBps规则按多大的 lot 工作
bandBpsPerHour过期带宽——见下。合法范围是 0..bandCeiling(stock),而这个上限在 owner 设定之前是 0;合约还会再把它限在 200 以内。出生时写进国库,之后不可改

发射费可选,三种币之一:原生 gas 代币(直接给,不换币)、USDG,或所发射的同一只股票——这样只持有 NVDA 的创作者完全不用碰 USDG。非原生币支付时多带的 msg.value 会 revert,而不是被吞掉。

launchWithMetadata 还能在同一笔交易里写代币页面。页面属于发射它的地址,该地址可以指定一个编辑者,也可以 lock() 永久 锁死;协议方对它没有任何权力。

报价

必须读实时税率。 一个池子刚开盘的几秒里,买入最高付 99%;而每次回购之后,卖出会带尖峰税率:

买入 → hook.buyRateBps(poolId) // 开盘 3 秒内 99% → 66% → 33% → 平常
卖出 → hook.sellRateBps(poolId) // 开盘时和每次回购后是尖峰,线性衰减回平常

在那些窗口里显示平常税率,报价会错最多 99 个百分点。显示 hook 返回的那个值,并且显示它正在衰减。

其他会影响你能提供什么的规则:

  • 卖出只支持 exact-input。
  • exact-output 只有「按平常税率的买入」被接受,税收在进来的股票上并做毛额换算,使路径成本相同;其余一律拒绝。
  • 发射者在发射交易里的买入不受窗口约束,且不限金额、不限笔数。如果你要展示一个发射的早期成交历史,这一点值得显示出来 而不是被平均掉。
  • 每个代币都要显示首买集中度。 发射者在发射交易里给自己拿走了多少供应量,是区分「还能买」和「已经没得买」的唯一那个 数字。前端不显示它,就是把买家最需要知道的东西藏起来了。

过期带宽,以及表单该怎么问

带宽不是让国库按池价交易。它放宽的是「现价距离上一次 Chainlink 打印可以有多远,而 health() 还不关闭」—— maxDeviationBps + bandBpsPerHour × 喂价过期小时数,上限 3000——成交本身仍然按预言机推出来的价格边界执行

bandCeiling(stock) 然后分支,不要无条件渲染这个字段:

  • 上限是 0(在 owner 设定之前每只股票都是 0):唯一合法值就是 0。这时候干脆不要渲染这个字段,直接说这个国库只认 Chainlink、休市期间不工作。摆一个禁用的滑块只会招来「为什么我不能选」。
  • 上限大于 0:给一个 0 到上限的滑块,默认取上限。并且明说:调低更安全,选 0 也是正当选择,代价只是休市的一些时段 不工作。

不要把「带宽更宽」宣传成「交易更多」:可用性几乎立刻就饱和了,再往上拓宽主要是给别人留出一个更宽的区间去钉住休市时段的 成交价。无论哪种情况,都要标明它在发射时冻结——创作者和 owner 事后都改不了。

读一次发射

视图告诉你什么
lotCount()规则现在扛着几个 lot
reserveUsdg()抄底储备
unbookedStock()已到账但还没记成 lot 的股票——任何人都可以调 book()
health()现在能不能定价和交易,以及按什么价

把一次发射显示成「在跑」之前先读 health() 它在这几种情况下是 false:喂价过期超过带宽、股票代币因公司行动被置了 oraclePaused()、日历说休市、池子与预言机的偏离超过执行闸门。定不了价就不交易,这是结构决定的——而与此同时,它的代币一周 七天照常交易。

定价

发射池的价格是代币对股票的价格,不是对 USDG。要显示 USDG 价或市值,乘以股票自己的预言机价:

price_usdg = price_in_stock × oracle_usdg(stock)
market_cap = price_usdg × (总供应量 − 已销毁量)

两件要从链上读、不要假设的事:

  • token 顺序。 哪一边是 token0 在这条链的股票池上不是常数。假定一种顺序会算出接近零的数字而且不报错,读起来像「没有 流动性」而不像 bug。这个坑已经栽过两次。
  • 种池区间。 发射仓位是单边的,从开盘 tick 上方一直到可用区间顶端,所以「走了多远」要从池子当前的 tick 算。没有毕业事件 可以监听,因为什么都不迁移。

事件

事件 topic 和解码示例会和地址一起出现在这里。值得索引的路径:发射本身、hook 在每次交易时的税分账,以及国库的 book / takeProfit / stopLoss / buyDip / buyback——它们合起来就能重建每一个 lot,不需要依赖我们的 API。

支持

team@hedgehood.app,或 @0xHedgehood

这是一个界面,不是投资建议。见使用条款