底层机制
定价:签名指数价
所有交易按 Binance USDⓈ-M 指数价结算,价格在链下签名,并在同一笔交易中链上验签。
来源#
结算采用 Binance USDⓈ-M 的 BTCUSDT、ETHUSDT 指数价:由多家主流交易所加权计算,成分与权重公开。该指数以 USDT 计价,与结算币一致,无需换算。
签名#
独立的价格签名者运行在单独的机器上,不持有任何资金,对每一条指数更新连同其事件时间戳进行 EIP-712 签名;价格不变时同样签名。
链上校验#
每个批次在结算任何交易之前,为每个市场推入一条签名价。PriceOracle 合约要求:
- 当前价格签名者的有效签名;
- 时间戳位于新鲜窗口 [now − 3,000 ms, now + 2,000 ms] 内;
- 时间戳不早于该市场上一次使用的价格,以防止回放。
任一条件不满足,整批回滚,不结算任何交易。没有新鲜签名价时,该市场暂停一切结算,直至新鲜价格恢复。
示例:新鲜窗口#
某批次在时间戳为 T 的区块中结算,relayer 可附带以下签名价。
| 签名时间戳 | 规则 | 结果 |
|---|---|---|
| T − 2.5 秒 | 不早于 T − 3 秒 | 接受 |
| T − 3.5 秒 | 早于 T − 3 秒 | 拒绝,整批回滚 |
| T + 1.5 秒 | 不晚于 T + 2 秒 | 接受 |
| T + 2.5 秒 | 晚于 T + 2 秒 | 拒绝,整批回滚 |
| 早于上次使用的价格 | 禁止回放 | 拒绝,整批回滚 |
接受 ⇔ T − 3,000 ms ≤ 时间戳 ≤ T + 2,000 ms
且 时间戳 ≥ 该市场上次使用的时间戳
← 公式过长时可横向滑动
因此,每笔交易的结算价格都是其所在区块之前不超过 3 秒内观测到的价格。
交叉校验#
接受开仓前,relayer 将签名价与 OKX 指数价进行比对。两者偏差超过设定容差,或任一数据源中断时,该市场暂停开仓;平仓与清算不受影响。
公开核验#
每条签名价均公开于 /query/prices/signed,链上使用过的每个价格均以事件记录,可与 Binance 公开的指数价历史对照。
信任假设#
合约无法直接读取 Binance,结算依赖签名者如实报告指数。上线时仅有一个签名者。guardian 可即时吊销被盗用的签名者;新签名者只能经 24 小时 Timelock 设定。详见风险。