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,026 | 279万 | 20.7万 | 85% |
| Taker 收盘前 | 89,688 | 908万 | 12.1万 | 81% |
| Maker 收盘后 | 299,604 | 1085万 | 4.2万 | 99% |
| Taker 收盘后 | 235,262 | 3855万 | 1.0万 | 98% |
| 合计 | 757,580 | 6128万 | 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 等人同期工作比,这篇强调前置条件形式化和反事实损益,没有去量化已实现利润。