Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ch10-02 预测市场、二元期权、区间市场和 LP vault

返回本章

先看市场问题

这里先从市场定义往下看。“预测市场、二元期权、区间市场和 LP vault”服务的是 Predict 市场如何被定义、定价、mint、settle 或索引;不要把它读成普通现货订单簿的变体。

源码入口

  • packages/predict/sources/market_key/range_key.move(oracle, expiry, lower, higher] 的 market key 定义。
  • packages/predict/sources/predict.movemintredeemsupplywithdraw 的外部入口。
  • packages/predict/sources/vault/vault.movevault/plp.move:LP 资金池、敞口和 PLP 份额。

读市场参数

Predict 的交易单位是一个在到期时支付 0 或 quantity 的区间头寸。range_key.move 把头寸定义为 (oracle_id, expiry, lower_strike, higher_strike),结算规则是价格落在 (lower, higher] 内则支付 quantity,否则支付 0。二元 UP 市场可以表示为 (strike, +inf],DOWN 市场可以表示为 (-inf, strike],更宽的区间市场则直接设置两个有限 strike。

LP vault 是交易对手方。用户 mint 时从 PredictManager 扣 quote,vault 接收 fair value 和 LP fee,同时记录潜在赔付;用户 live redeem 时 vault 支付当前 fair value 扣 fee;到期后 redeem 按 settlement price 精确支付。LP 通过 predict.move::supply 获得 PLP,通过 withdraw 烧毁 PLP 取回 vault value 的份额。

PTB 构造上,二元市场和区间市场的差异只体现在传给 mint<Quote>RangeKey。UP 可以使用正无穷 sentinel 作为 upper bound,DOWN 可以使用负无穷 sentinel 作为 lower bound;有限区间则传两个 strike。无论 UI 标签怎么写,链上 key 都必须携带 oracle ID 和 expiry。

LP 不是被动收取固定利息,而是在 vault 中承担所有未结算区间的对手方风险。服务层报价时应同时返回 fair value、fee、all-in ask、vault MTM、max payout 和是否满足 exposure limit。

Predict 边界判断

  • 市场卡片必须展示 oracle、expiry、strike range 和 quote asset,而不是只显示 UP/DOWN。
  • mint 前检查 PredictManager 余额、oracle 新鲜度、ask bounds 和 vault exposure。
  • LP 页面同时展示 PLP NAV、MTM、max payout、withdraw limiter 和 settlement 状态。

动手检查

  • 为什么同一个 strike 在不同 oracle 或 expiry 下不是同一个市场?
  • 用户 live redeem 和 settled redeem 分别由 vault 支付什么金额?
  • LP vault 的 balancetotal_mtmtotal_max_payout 对 UI 风险提示有什么影响?