#dusk 我重新看了 @Dusk 最新的交易生命周期文档,里面一个很容易被界面藏掉的细节是:节点返回“202 Accepted”,只代表它接收了交易并准备路由,不代表交易已经进真实内存池,更不代表执行成功或最终确认。很多钱包把提交成功做成绿色提示,普通用户看到后自然会以为钱已经到位,真正的状态却可能还隔着好几层。$DUSK

Dusk L1上一笔交易要经过构建签名、提交、节点预验证、进入本地内存池、向其他节点传播、被出块者选择、执行,最后等区块进入finalized状态。即使交易已在接受区块中执行,也要检查错误字段是否为空;接受区块仍可能回滚。Moonlight还涉及顺序nonce,同一nonce想替换交易必须提高Gas价格,新的交易ID也要一并对账。

这套流程本身并不反常,真正的坑是应用把不同状态压成一个“成功”。网络超时后如果重新生成并签一笔新交易,而不是重播同一份已签名字节,可能造成重复意图;只盯本地内存池,也会漏掉暂存于预队列的未来nonce交易。官方给交易所的接入建议甚至明确要求:不能按余额变化、内存池记录或未最终确认区块直接入账。

所以我看链上体验,不会只看广播快不快。更关键的是钱包能否把“已提交、已执行、已最终确认”分开显示,失败后是否保留原交易ID,服务端能否用幂等规则避免重复记账。速度可以做成动画,最终性和对账才是真正不能省掉的部分。