订单簿撤单的两条路:Immutable 软取消与链上硬取消的时序差异 图 1
订单簿撤单的两条路:Immutable 软取消与链上硬取消的时序差异 · 图 1

在基于订单簿的 NFT 市场挂出一张单之后,‘撤销它’并不是一句简单的话。Immutable 的官方文档把撤单拆成两个动作:软取消(soft cancel)不花 Gas,硬取消(hard cancel)上链。多数人以为撤单就要付一笔链上费用,实际上两条路各自解决完全不同的问题,选错了要么白花钱、要么根本没撤干净。

理解差别要先看官方公布的成交结构:它运营一个中心化的订单簿,但在交易执行时不做中介,成交由智能合约结算。一笔成交分五步走——买家在界面选中订单;订单簿为结算合约生成交易载荷,文档标注这一步有约 90 秒的准备窗口;买家把带签名的交易提交给合约;合约执行换货与付款。软取消作用在第 2 步:把订单从订单簿里摘下来,让它不再被任何人匹配。硬取消作用在第 4 步:直接让合约层面的订单数据作废。一个是货架上撤掉,一个是仓库里盖章销毁。

软取消是大多数人真正需要的操作。挂单不花 Gas(订单是一段签名数据,不是链上对象),撤它同样不花:你向订单簿证明自己对该订单的所有权,索引器把它从可匹配集合里剔除,页面上很快显示已取消。代价是软取消只约束这一套订单簿服务——如果同一份签名订单曾被转发、缓存或提交给别的撮合入口,那些副本不受这个订单簿管束。这就要用到硬取消:向结算合约发一笔交易,把对应订单的执行状态在链上标记为不可成交,任何持有该订单副本的人都再也无法用它换货。硬取消要付 Gas。

什么时候必须硬取消?典型场景有三种。第一,你怀疑签名订单已经外泄:比如你曾把一段看似无害的签名提交给了钓鱼站点,事后要确认那笔授权不可能被兑换。第二,订单可能被聚合器复用:一些聚合入口会抓取多个订单簿的公开订单,只在一处软取消不足以让所有入口失效。第三,你要撤销的是长期有效的授权类签名,宁可付 Gas 换链上确定性。反过来,如果只是单纯不想卖了、想改价重挂,软取消足够,付链上费纯属浪费。

还要澄清一个常见误解:软取消不等于’什么都不发生’。你的取消请求本身会被订单簿记录并执行,取消生效后,之前复制过这张订单的人不能再用这个订单簿完成匹配——他们手里剩下的只是一段签名,而这段签名对应的那条索引记录已经被标记为不可撮合。反过来说,硬取消改变的也不是订单的’存在’,而是合约里该订单的填充状态:链上会把这张单标记为不可执行,之后任何带着同一份载荷来的成交请求都会在合约层被挡下。两种取消都不会动你的 NFT 本体,也不需要把藏品转来转去,这正是订单簿模式与托管式市场的区别——藏品全程在你钱包里,撤单撤掉的只是’愿意按某条件成交’的意向记录。理解了这一点,也就理解了为什么这类市场挂单不限数量:没有资产搬家,自然没有搬运成本。

操作细节上文档有两条提示:取消前你需要拿到订单 ID,且只有订单的所有者——也就是签名的一方——才有权取消。另外要注意那 90 秒窗口的含义:一笔成交在’载荷已生成、交易未上链’之间是有时间缝的,你在窗口内做的软取消能拦住它,一旦买家的签名交易进了区块,再取消就是徒劳——这时检查链上状态比检查页面更重要。给普通用户的顺序建议是:先软取消止损,再评估订单副本可能扩散到哪里,评估结论决定要不要花 Gas 硬取消。撤单不是一个动作,是一套按风险分级的流程。

本文为机制说明,不构成任何投资建议。

订单簿撤单的两条路:Immutable 软取消与链上硬取消的时序差异 图 2
订单簿撤单的两条路:Immutable 软取消与链上硬取消的时序差异 · 图 2