原创 | Odaily 星球日报( @OdailyChina )
作者 | Asher( @Asher_ 0210 )
昨晚,Polymarket 进入维护窗口,暂停交易并清空订单簿,随后正式上线 CLOB V2。
按照官方此前披露, 这次升级包括新合约、新订单簿、新抵押代币 Polymarket USD,以及新版 CLOB-Client SDK 。对用户来说,PUSD、SDK、订单结构这些变化未必马上有明显感知。 真正第一时间值得关注的,是长期困扰 Polymarket 的 Ghost Fills,也就是社区常说的“幽灵订单”问题。
V2 的确对这个问题做了处理。此前最容易被利用的 nonce 机制被移除,订单结构和撤单方式也发生了变化。但这并不意味着幽灵订单已经彻底消失,因为 Polymarket 的核心交易模式仍然是链下撮合、链上结算,只要这两个环节之间存在时间差,类似问题就很难被完全抹掉。
订单显示成交,为什么最后失败?
所谓幽灵订单,简单说就是 一笔订单在链下看起来已经撮合成功,但最终没有在链上完成结算 。
Polymarket 采用的是链下订单簿撮合,再回到链上完成结算的模式。这种设计的优势很明显,交易速度更快,成本更低,也更适合 5 分钟市场这类短周期、高频次的预测市场。
问题也正出在这个时间差上。链下订单簿已经显示成交,并不意味着链上结算一定成功。在一些短周期市场里,用户可能看到订单已经显示成交,以为自己已经买到了对应方向;但等到交易真正提交到链上时,结算却失败了。
前一秒看起来已经完成的交易,后一秒又被系统撤回。
对用户来说,这种体验最难受的地方不是单纯失败,而是不确定性。以为已经完成买入或卖出,结果最后没有成交;等重新下单时,价格可能已经变了,交易机会也可能已经错过。
旧版本的问题,是撤单成本太低
在 V1 中,幽灵订单最容易被利用的一条路径来自 incrementNonce。 nonce 可以理解为订单里的状态标识。原本它是为了帮助系统管理订单,但在旧版本中,攻击者可以通过调用 incrementNonce,让某个地址下带有旧 nonce 的订单在链上结算时失效。
这就给了攻击者一个时间差操作空间。攻击者可以先让订单在链下完成撮合,让系统显示“成交已经发生”;随后在结算真正上链之前更新 nonce,使这些订单最终执行失败。结果就是,一笔看似已经完成的交易,最后没有在链上真正落地。
问题的关键在于,这种操作成本极低,却能影响一批订单。 攻击者只需要付出很低的 gas 成本,就能让本应成交的订单在结算阶段失败 。前端看到的是订单先成交、后失败,实际造成的是交易结果不稳定,甚至让用户错过原本的成交价格和交易机会。
幽灵订单问题不是简单的前端显示错误,也不是偶发的链上失败,而是会直接影响用户对交易结果的信任。
V2 做了修补,但不是彻底根除
这次 V2 最关键的变化,是移除了原来的全局 nonce 设计。也就是说,过去通过 incrementNonce 一次性影响一批旧订单的方式,已经被堵上了。同时,V2 简化了订单结构,撤单也转向更细粒度的单笔 order hash。 相比旧版本,撤单影响范围被明显压缩,攻击者很难再用一次低成本操作破坏大量挂单。
这对幽灵订单问题是一次实质性修补。过去的问题在于,攻击成本低、影响范围大,复现门槛也不高。V2 之后,最容易被利用的一条路径被移除。攻击者如果想继续制造类似问题,需要付出更高成本,也更依赖具体的系统响应。此外,pauseUser 等机制加入延迟,也是在减少某些状态变化在撮合和结算窗口内被即时滥用的可能。
整体来看,V2 的方向比较清楚:先处理最容易被攻击者利用的环节,再降低类似攻击的收益空间。
但这还不能等同于幽灵订单被彻底解决 。原因在于,Polymarket 仍然没有改变链下撮合、链上结算的基本模式。只要订单不是在同一个环境中完成撮合和结算,链下与链上之间就一定存在状态差。余额变化、授权问题、订单状态变化、撤单行为或合约执行失败,都可能让一笔链下已撮合的订单,最终无法在链上落地。
换句话说,V2 解决的是旧版本里最明显、最容易被利用的攻击路径,而不是幽灵订单产生的基础条件。
其他更新,更多是为交易系统补底座
除了幽灵订单,V2 还带来了 PUSD、SDK 和 1271 签名等更新:
- PUSD 为新的抵押稳定币,Polymarket 从 USDC.e 迁移到由 USDC 1:1 支持的 Polymarket USD,普通用户基本无感,但底层资产处理会更统一;
- 新版 CLOB-Client SDK 则主要面向做市商、机器人和系统集成方。V2 后,相关用户需要升级客户端,并用新的订单结构重新签名订单;
- 1271 签名支持,则意味着智能合约钱包、多签账户、机构账户和更复杂的 bot 钱包可以更顺畅地接入 Polymarket。
总的来说, Polymarket 不是单纯修一个漏洞,而是在把自己从一个预测市场应用,改造成更接近交易所的底层系统。 当做市商、API 用户和自动化交易者越来越多时,订单能不能稳定成交、结算和兑现,就会比“市场够不够好玩”更重要。
V2 不是终点,而是持续修补的开始
V2 上线后,Polymarket 至少把幽灵订单中最明显的一条攻击路径堵上了。过去那种低成本撤单、批量影响订单的方式,已经很难再照原样复现。对一个正在快速放大的交易平台来说,这是必须完成的一步。
但幽灵订单背后的根源,并不会因为一次版本升级就完全消失。只要 Polymarket 仍然采用链下撮合、链上结算的模式,系统就需要不断处理链下状态和链上结果之间的差异。V2 更像是第一步—— 先解决最明显、最容易被利用的问题,再通过后续更新继续补齐撮合、结算、监控和风控能力。
预测市场本来交易的就是不确定性,如果连订单本身也充满不确定,用户面对的就不再只是市场风险,而是系统风险。
相关内容
被卡住的Polymarket:走过流量红利的真正大考来了
