三种价格及其不可互换性
这条链上的每种资产同时具有三种价格。多数时候三者一致,这正是混淆它们代价高昂的原因:按错误价格计价的仓位看似安全,实际上 已在不知不觉中失去安全性。
| 定义 | 用途 | |
|---|---|---|
| 预言机价 | Chainlink 股票喂价 ÷ USDG 喂价 | NAV、份额净值、偏离闸门、收费 |
| 池价 | 池子自己的 sqrtPriceX96 | 执行检查,以及我们实际持有多少股 |
| 场内标记价 | 永续场自己的价 | 对冲的成交场所、清算的计算依据 |
LP 仓位没有固定股数:其构成是池子 tick 的函数。因此「我们持有多少股」必须从池子读取,而窄区间会使该数值极度敏感——在某次实盘 样本中,0.37% 的价差使持仓变动了 29%。按预言机为对冲计价看似安全,实际会在不知不觉中对冲不足:目标与仓位彼此一致,而两者均与 实际情况不符,因此不会触发任何断路器。
Chainlink 在 Robinhood Chain 上
该链上仅部署了 Chainlink 一家预言机。Data Feeds、Data Streams 和 CCIP 均已提供,我们使用 Data Feeds。
- 股票喂价名为
RHNVDA / USD,而非NVDA / USD,且其返回值中已经包含 token 的uiMultiplier()。若再乘一次 乘数,每一次公司行动都会被重复计算。 - 喂价为 24/5。夜间很少更新,整个周末完全停更并保持最后一个值。
latestRoundData()仍会返回该值,因此updatedAt是 唯一的判据。 - 每个股票 token 都有
oraclePaused(),在公司行动处理期间置位:乘数变更时喂价停留在最后一个有效值上。此处所有组件遇到该 标志都会失败关闭。 - 该链没有 L2 Sequencer Uptime Feed,因此无法构建 Chainlink 标准的 L2 过期闸门。我们只能依据
updatedAt。
喂价过期并不构成关于池子的证据,而且仅凭时长无法区分「按计划收盘」与「预言机故障」。因此交易日历部署在链上并优先参考, 时长仅作兜底,而非主判据。
池价
- 股票的 USDG 池是 Uniswap V3 池,tick 区间必须落在池子的 tick spacing 上。设定 ±1% 时,在 0.3% 档实际得到 ±1.3%,在 1% 档为 ±3%;费收益与宽度成反比,因此按「设定的区间」而非「实际得到的区间」进行模拟,会将费收益高估约 30% 和 3 倍。
- USDG 在有些池子里是 token0,有些池子里是 token1。 假定某一种顺序会得出一个接近零的流动性数值且不报错,其读数即为 「份额 0%,不值得进入」——与实际情况正好相反。
- 集中流动性池上的 V3 TWAP,是在一个可被买空的盘口上取 tick 均值。这正是为借贷债务计价的 mark 需要钳制的原因,也是 StockLend 将池价视为「买回成本」而非「价格」的原因。
- Uniswap V4 池没有 observation ring:预言机功能移入了 hook。V4 池的 TWAP 只能由对其采样的组件或其自身的 hook 提供。
周末
从周五收盘到周日重开,喂价停止更新而 token 照常交易。两者之间的差额即为周末溢价——StockLend 让借款人卖入的正是它, $HEDGE 国库供应股票所收取的费用也来源于它。同样,相对一个冻结的喂价得出的「溢价」或「折价」本身并非信号:其测量结果 有一半反映的是喂价停更这一事实。