上周帮客户对接跨境汇款,因为网络卡顿点了两次确认,系统直接判定"重复交易"给拦下来了,卡了半天没人给个说法。这事搁在链上其实是同一个问题,只是解法完全不一样。
Dusk的Moonlight账户模型(就是它那套透明账户)靠的是nonce防重放——每个账户绑定一个计数器,每笔交易的nonce必须比当前值正好大1,多一少一都会被网络直接拒掉。不是靠系统事后"猜你是不是重复点了",是靠数字本身把顺序卡死,谁都赖不掉,也不用等客服判断。
这跟Phoenix那边防双花的思路完全不是一回事——Phoenix靠的是nullifier,一次性标记某个UTXO已经花掉,花过就作废;Moonlight靠的是nonce,按顺序递增卡住重放。两套账户模型,两套不同的防重复逻辑,白皮书里分得挺清楚,不是同一套代码换个名字两边复用。
这个设计解决的是"同一笔交易被网络收到两次怎么办",但没解决"用户自己手滑转错账户怎么办"——nonce管的是顺序和唯一性,不管交易内容本身对不对,这块还是得靠钱包端的确认交互兜底。
$DUSK
#dusk @Dusk