Polymarket的幽灵:当链上撮合遇到链下回滚时 The Ghosts of Polymarket: When Off-Chain Matches Meet On-Chain Reverts
揭秘Polymarket混合架构中的幽灵填充漏洞与攻击者利用模式
前置知识
预测市场
预测市场是一种允许参与者对未来事件结果进行交易的金融机制。通过买卖基于未来事件结果的合约,市场价格反映了对该事件发生的集体概率判断。在Web3语境下,这些合约通常以代币形式存在,结算时根据实际结果支付奖励。Polymarket是最大的去中心化预测市场平台,总锁仓量超过4.5亿美元。
本文研究的Ghost Fill漏洞在预测市场中尤其危险,因为预测结果的时效性很强。与传统NFT市场不同,预测市场中几分钟内价格就可能发生剧烈变化,使得链上撮合和链下结算之间的时间窗口成为攻击者的可利用机会。
混合交易架构
混合交易架构将订单撮合与结算分离在不同层:订单在中心化订单簿(CLOB)中离线撮合以实现低延迟和高吞吐量,而最终结算在区块链上执行以确保去信任化。具体流程是:用户签名提交订单到CLOB,CLOB立即报告撮合结果给双方,同时将匹配的订单排队等待链上结算。Polymarket的operator账户随后提交matchOrders交易到链上的Exchange合约,该合约验证签名并转移抵押品和结果代币。
这种架构的关键问题在于存在时间窗口:订单在CLOB中被报告为已成交,但对应的链上结算交易可能尚未被打包,甚至永远不会成功。这创造了本文核心关注的Ghost Fill现象,即离线撮合成功但链上结算失败的订单。
ERC1155代币标准
ERC1155是以太坊上的多代币标准,允许在单个智能合约中管理多种代币类型,相比ERC20和ERC721具有更高的Gas效率。在Polymarket中,结果代币通过Conditional Tokens Framework(CTF)作为ERC1155代币铸造到Polygon链上。二元市场有两个代币(YES和NO),获胜代币在事件通过UMA乐观预言机解析后可以一对一赎回抵押品。ERC1155的关键特性是接收者必须实现onERC1155Received回调函数来接受代币交付。
Ghost Fill的主要攻击向量之一——Proxy Trap,正是利用ERC1155的回调机制。攻击者部署的恶意钱包合约会在onERC1155Received回调中故意回滚,导致代币交付失败,从而使整个结算交易回滚。这个机制是理解Proxy Trap攻击的技术基础。
Nonce bumping攻击
在区块链智能合约中,nonce是一个计数器,用于防止重放攻击和确保交易的唯一性。Polymarket V1版本为每个maker维护一个per-maker nonce,通过公共的incrementNonce()函数递增。攻击者通过在结算前调用incrementNonce()来使已匹配订单中的nonce值过期,导致结算时验证失败而回滚。这种攻击需要精心选择Gas价格,确保nonce递增交易先于结算交易被打包到区块中。
这是Ghost Fill的四种主要攻击向量之一。在V1架构中,nonce bumping占所有回滚的1.3%(25,790笔交易)。虽然V2已经移除了这个机制,但它展示了攻击者如何利用合约设计中的时间依赖性问题。理解这种攻击有助于理解整个Ghost Fill漏洞的本质。
研究动机
Polymarket采用混合架构虽然兼顾了性能和去信任化,但链下撮合与链上结算之间存在关键的时间窗口。在这个窗口期内,订单在CLOB中被报告为已成交,但对应的结算交易可能尚未被打包到区块中。更严重的是,这些结算交易可能永远不会成功,导致所谓的Ghost Fill现象。在快节奏的预测市场中,这种一致性问题尤其危险。例如在5分钟BTC价格预测市场中,事件结果可能在几秒钟内揭晓,而此时结算交易还在内存池中排队。用户、AI代理和套利机器人如果基于CLOB报告的撮合结果采取行动,就会面临巨大的价格变动风险。数据显示,在最糟糕的时期,超过24.3%的已成交订单最终回滚,造成了事实上的拒绝服务攻击。
本文的目标是本文的目标是系统性地研究Ghost Fill现象,回答三个核心研究问题:RQ1询问Ghost Fill的普遍程度和经济成本;RQ2探索攻击者如何主动利用Ghost Fill进行获利;RQ3调查这种风险是否会通过代码重用传播到更广泛的生态系统。通过构建GHOSTHUNTER分析工具,作者希望不仅量化Ghost Fill的影响规模,还要识别具体的攻击模式和实现变种,最终为平台和用户提供有效的防御策略。
与已有工作不同的是,本文的独特切入角度是从链下与链上边界的系统性安全问题出发。现有的研究要么专注于预测市场的定价和套利机制,要么关注智能合约层面的安全漏洞,但很少有人研究这种跨层级的架构性问题。作者将Ghost Fill视为一种结构性的失败模式,而非孤立的bug。通过分析从链上trace重构的大量回滚交易,本文首次揭示了攻击者如何通过四种不断演化的攻击向量主动利用这个一致性缺口,以及这种风险如何通过代码重用扩散到整个生态系统。
核心方法
GHOSTHUNTER是一个基于链上trace的分析引擎,用于测量Ghost Fill的普遍性、成本、时间模式、受影响市场和攻击者行为。整个方法分为三个阶段:数据收集、交易分析和跨链重用分析。数据收集阶段从三个来源获取信息:Google BigQuery的Polygon公共数据集提供所有回滚的matchOrders交易;Polymarket的Gamma API将结果代币映射到市场slug、事件类别和流动性奖励参数;Sourcify验证合约数据集包含401条链上的3100万个验证合约。交易分析阶段对每个回滚交易进行解码和trace分析,应用启发式规则进行因果归因,识别四种攻击向量的具体实现变种。跨链重用分析阶段通过函数选择器相似度分析,识别在10条链上167个重用Polymarket设计的合约。
核心创新点在于将Ghost Fill从表面的失败原因区分开来,通过因果分析识别出恶意的Cancellation Attacks。作者观察到每个回滚都涉及参与者控制的状态检查(余额、允许额度、nonce、回调接受),因此可以在离线撮合后、链上结算前改变这些状态来强制订单回滚。GHOSTHUNTER构建了一组规则,每种规则描述一个攻击向量作为事实的合取式。规则首先检查回滚原因是否与攻击向量一致,然后寻找因果证据显示参与者在结算前的可控行为。这种两阶段设计使规则保持保守:回滚原因缩小了可能的解释范围,因果证据确定是否应将回滚归因于攻击。
方法步骤详情
GHOSTHUNTER的工作流程包含四个主要步骤。第一步,收集所有Polymarket结算合约的回滚matchOrders交易,包括区块号、合约地址、交易哈希、时间戳、原始calldata、Gas使用量和Gas价格。第二步,通过重放每个交易来解码calldata以恢复订单、参与者、代币数量和结算合约,然后解析执行trace来识别结算期间进行的内部调用、失败的调用以及相应的回滚原因。第三步,将每个回滚原因映射到官方源代码中相应的require/revert站点,将回滚分组到八个失败表面。第四步,应用向量特定的启发式规则对每个回滚交易进行因果归因,发出包含攻击向量、因果行为和相关地址的结构化记录。对于跨链分析,使用Jaccard指数计算函数选择器集相似度,识别Polymarket式设计的重用部署。
技术新颖性
技术新颖性体现在几个方面。首先,这是首次系统性研究混合交易架构中的跨层级一致性问题,突破了传统智能合约安全研究的单层限制。其次,GHOSTHUNTER引入了基于因果分析的攻击归因方法,通过构建链上证据的事实模式来区分恶意回滚和意外失败。第三,发现了35种不同的攻击实现变种,展示了攻击者与平台防御之间的动态军备竞赛。第四,首次揭示了代码重用在安全风险传播中的作用,发现167个独立部署重用了有缺陷的设计。最后,通过EIP-7702攻击向量的发现,展示了新型钱包标准如何被武器化以扩展攻击面。
实验结果
研究发现Ghost Fill是一种广泛且代价高昂的失败模式。从2025年8月15日到2026年5月6日,GHOSTHUNTER识别出1,952,440个回滚的matchOrders交易,涉及233,887个不同参与者。这些失败影响了总计17.8亿美元的抵押品结算,并烧毁了235万POL代币(约23万美元)的operator Gas。失败率在2026年初急剧上升,峰值达到所有matchOrders交易的8.5%。攻击者通过四种攻击向量主动利用Ghost Fill,包括980,133个回滚(50.2%),涉及14.4亿美元抵押品风险和217万POL Gas消耗(92%)。在2026年5月4日的峰值期,这些攻击将小时回滚率推高至24.3%,构成了事实上的拒绝服务攻击。Proxy Trap是主导向量,占所有回滚的80.7%(790,913笔),几乎全部发生在V2版本。攻击者的总实现利润达到149万美元,实际金额可能更高因为某些相关地址无法置信关联。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| Ghost Fill检测准确率 | 人工验证准确率 | 100% (95%置信度,5%误差范围) | 无基线对比 | 首次提出系统性检测方法 |
| 攻击向量覆盖 | 识别的攻击向量数量 | 4种主要向量 + 35种实现变种 | 未公开的零散报告 | 系统化分类首次完整呈现 |
| 跨链风险识别 | 受影响的独立合约部署 | 167个合约,10条链,2300万美元用户资金 | 仅关注Polymarket本身 | 首次揭示风险传播规模 |
局限与改进
研究存在几个局限性。首先,作者对攻击者利润和受害者损失的量化不完整,因为这需要推断攻击者意图(只能从链上行为推测)、完整的CLOB订单流数据(Polymarket保持私密)以及跨攻击者Sybil地址的关联链(攻击者故意构建为不可关联)。其次,研究的时间范围有限,Ghost Fills在2026年之前很少见,所以Fee Module上线之前的时期不在研究范围内。第三,跨链重用分析仅覆盖Sourcify验证的开源合约,闭源重用未被测量,该数字也是下限。最后,作者的定义故意保守,所以各向量的计数是下限;使用更宽松的规则会捕获更多drain攻击,但也会误统计在撮合附近移动资金的正常用户。
独立分析的弱点
研究的主要弱点在于因果归因的保守性可能导致低估实际攻击规模。五区块窗口和Gas比率大于1的限制可能遗漏一些真实攻击,特别是在网络拥堵情况下Gas价格波动较大的时期。此外,攻击者利润测量严重依赖于可链接的地址,而Sybil攻击和资金清洗策略使得许多利润无法关联。另一个弱点是研究仅关注已回滚的交易,可能存在攻击者尝试但未成功的取消攻击,这些尝试无法通过当前的检测方法识别。最后,跨链分析仅基于函数选择器相似度,可能遗漏那些在接口上做了轻微修改但仍然保留核心漏洞的合约。
未来方向
未来的研究方向可以包括:开发实时检测系统而非仅分析历史数据,在攻击发生前进行预警;扩展到其他采用混合架构的DEX和NFT交易平台;研究跨链桥接和Layer2解决方案如何影响Ghost Fill风险;探索更先进的地址聚类算法来追踪Sybil攻击者;开发防御性的智能合约设计模式以消除这个根本性的架构问题;研究监管和政策层面的应对措施;探索零知识证明等技术是否能够在保持隐私的前提下减少时间窗口风险。
复现评估
研究的可复现性良好。作者已开源GHOSTHUNTER工具和所有SQL查询代码在GitHub上。数据来源完全公开:Google BigQuery的Polygon数据集提供链上交易数据,Polymarket的Gamma API提供市场映射信息,Sourcify提供验证合约数据。分析使用的区块链archive node可以通过Alchemy等公共节点访问。研究明确列出了所有测量的合约地址、时间范围和参数设置。主要限制在于Polymarket的内部CLOB订单流数据不公开,这可能影响某些细节验证,但核心发现基于公开可验证的链上数据,具备良好的可复现性。研究没有访问任何私人数据或执行任何攻击,符合伦理要求。
论文图表