跳到主要内容

三种价格及其不可互换性

这条链上的每种资产同时具有三种价格。多数时候三者一致,这正是混淆它们代价高昂的原因:按错误价格计价的仓位看似安全,实际上 已在不知不觉中失去安全性。

定义用途
预言机价Chainlink 股票喂价 ÷ USDG 喂价NAV、份额净值、偏离闸门、收费
池价池子自己的 sqrtPriceX96执行检查,以及我们实际持有多少股
场内标记价永续场自己的价对冲的成交场所、清算的计算依据

LP 仓位没有固定股数:其构成是池子 tick 的函数。因此「我们持有多少股」必须从池子读取,而窄区间会使该数值极度敏感——在某次实盘 样本中,0.37% 的价差使持仓变动了 29%。按预言机为对冲计价看似安全,实际会在不知不觉中对冲不足:目标与仓位彼此一致,而两者均与 实际情况不符,因此不会触发任何断路器。

该链上仅部署了 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 国库供应股票所收取的费用也来源于它。同样,相对一个冻结的喂价得出的「溢价」或「折价」本身并非信号:其测量结果 有一半反映的是喂价停更这一事实。