跳到主要内容

撮合引擎与交叉撮合

撮合引擎是 Astromarkets 的核心:基于红黑树实现的订单簿,并为预测市场场景扩展出交叉撮合语义

每次 处理订单 分两个阶段执行。

Phase 1 — 直接撮合(同代币 Bid ↔ Ask)

BidYes ↔ AskYesBidNo ↔ AskNo,与传统 CLOB 完全一致:价格优先、时间优先(FIFO),taker 享受价格改善(按 maker 报价成交)。

Phase 2 — 交叉撮合(互补代币,隐含铸造/赎回)

这是 Astromarkets 区别于普通订单簿的关键。利用 Yes + No = 1 的等价关系,让买 Yes 的人和买 No 的人直接成为对手方:

交叉方向双方协议动作
BidYes ↔ BidNo都想买入,都付 USDC铸造完整组,分别交付给两方
AskYes ↔ AskNo都想卖出,各持一种代币赎回完整组

交叉条件

COMPLEMENT_PRICE_TICKS = 1000(1.000 USDC)为基准:

  • Bid 侧:p_taker + q_maker ≥ 1000
  • Ask 侧:p_taker + q_maker ≤ 1000

成交定价(与直接撮合对称,taker 享改善)

taker 实际成交价 = 1000 − maker 报价
maker 按自己报价成交
价差 归协议(计入手续费)

示例

一个 BidYes @ 800 ticks(愿出 0.80 买 Yes)的 taker,遇到簿上 BidNo @ 300 ticks(愿出 0.30 买 No)的 maker。

800 + 300 = 1100 ≥ 1000,交叉成立。协议铸造 1 个完整组:

  • taker 实付 1000 − 300 = 700 ticks(0.70,优于其报价 0.80),得到 YES;
  • maker 按 0.30 得到 NO;
  • 两者合计支付 0.70 + 0.30 = 1.00 USDC,恰好覆盖铸造完整组的成本,多余价差归协议。

成交后更新 maker 的 交易状态(在 locked / free 之间转移资金)。手续费按直接 + 交叉的总成交量统一计算,累积到订单簿的 unclaimed_quote_lot_fees

为什么这是护城河

  1. 流动性合并:传统设计里「买 Yes 的盘」和「买 No 的盘」是割裂的两侧;Astromarkets 把它们打通成同一个深度池——同样的挂单量提供约 2× 的可成交深度,对长尾 / 新生市场的流动性冷启动尤为关键;
  2. 更优执行价:交叉撮合让两个本来不可能成交的买家互相满足,双方都可能获得优于报价的成交;
  3. 资本效率:做市商无需预先持有两种代币库存,挂单即可被交叉吃掉。