「幽灵成交」九个月帮交易方避开逾6100万美元亏损

Ghost-Filled Orders: Detecting and Testing Atomicity Violations in Non-Custodial Prediction Markets

Zhiyang Chen, Fan Long, Zhendong Su

cs.CR

2026-09-16

多伦多大学与苏黎世联邦理工把 Polymarket 182万笔结算回滚按前置条件归因,用户侧占97.2%;在临近或已收盘的市场里,94%的回滚在避开亏损,合计6128万美元。

这篇在解决什么

非托管预测市场把订单簿放在链下,把成交放到链上智能合约。用户自己管钱包,不必把钱交给平台。代价是原子性缺口:一张单在链下被接受甚至匹配时有效,结算交易上链时可能已经失效。社区把这种「前端显示成交、链上 revert」叫做幽灵成交(ghost-filled orders)。

缺口来自检查时到使用时(TOCTOU)窗口。匹配之后、结算之前,挂单人仍能改 nonce、转走抵押品或结果代币、撤掉授权。新信息一到,比如球赛终场或五分钟 BTC 盘收盘,挂单人相当于拿到单边期权:赚钱的单让它过,亏钱的单把它弄失效。

方法

多伦多大学与苏黎世联邦理工把问题拆成两半:分析已经发生的回滚,以及审计别的市场是不是还能被打。

分析侧对着 Polymarket 五个结算合约、九个结算函数。先从合约里抽出所有 revert 守卫,标成操作者侧 O1–O7 和用户侧 U1–U6(nonce、ERC-20/1155 授权与余额、ERC-1155 接收 hook)。detector 重放回滚交易定位失败腿,probe 再顺着责任地址往回找把前置条件打假的那笔交易。数据窗口是 2025-08-12 到 2026-05-22,共 1,824,926 笔回滚。

审计侧只用普通交易员权限:API 下一张 taker 单,等 API 显示已成交后再在链上失效,测量还能等多久。三个被测市场因负责任披露暂时匿名。

结果

分类覆盖 100%。用户可控前置条件占 1,774,655 笔(97.2%),其中 96.6% 找到了失效交易。均摊失效成本只有 0.0174 美元。平均延迟 2558.7 个区块(约 1.2 小时)被长尾过期单拉高;真正像攻击的是短延迟:ERC-20 余额失败里 46.2% 与结算同块,71.7% 在一块之内。

案例一只看临近收盘 60 秒内或收盘后的 757,580 笔:

角色/时机笔数避开亏损放弃盈利避开率
Maker 收盘前133,026279万20.7万85%
Taker 收盘前89,688908万12.1万81%
Maker 收盘后299,6041085万4.2万99%
Taker 收盘后235,2623855万1.0万98%
合计757,5806128万38万94%

亏盈比 161:1。78% 的避开亏损来自 BTC、ETH、SOL、XRP 的短周期涨跌盘。

案例二在盘中清簿:64,604 个回滚簇里,77% 由单一地址贡献至少 90% 的回滚,63.88% 的簇出现价格尖峰或低谷。论文找不到清盘地址和吃到便宜挂单的做市商之间的硬连接,但模式在重复出现。

另外三个市场全部可打,都能连坐同一批次里别人的单。只有专做体育、链下成交到链上最多延迟 10 秒的 Market X 被判定为可盈利:API 已经锁单,链上资产仍在用户手里。

为什么重要

非托管的卖点本身变成期权。Polymarket v2 的存款钱包让取消、授权、转账都走平台,能挡住一部分失效,也把「用户自己管钥匙」打了折扣。对做短周期盘和体育盘的做市商,匹配成功不再等于成交。

局限与存疑

6128 万是反事实的避开亏损,不是链上已实现利润。案例二承认清盘方和获利做市商对不上号。三个市场名字未公开。分析假设平台操作者诚实。ERC-1155 余额那一类漏了 47,026 笔归因。与 Shen 等人同期工作比,这篇强调前置条件形式化和反事实损益,没有去量化已实现利润。

术语

原文与代码

社区讨论

相关论文

全部论文解读