付款页面卡住五秒,手一抖又点了一次。普通支付还能查两笔流水,可隐私交易把金额和参与者都藏住后,网络凭什么知道你没有把同一笔钱花两次?
我顺着这个问题重新拆了 @Dusk 的Phoenix。它不把资金记成公开余额,而是拆成加密note,并把note承诺写入Merkle树。花费时,零知识证明负责证明这笔note真实存在、由用户控制且输入输出守恒,却不公开具体金额和对应note。
真正抓“双花”的是nullifier,可以理解为note用过后留下的唯一作废标记。外界不能由它倒推出原note,但网络可以检查该标记是否已经出现。同一note被构造成两笔交易,就会在相同nullifier上冲突,两笔不能同时成立。
Dusk当前文档还写明:Phoenix交易在内存池里发生nullifier冲突时,只有Gas价格严格更高的新交易才能替换旧交易。提高费用重发,可能是在替换付款,不是新增一笔。可一旦交易进入已接受区块并执行,即使合约返回错误,相关note和Gas也会被消耗;还要等区块进入finalized,才算真正终局。
所以密码学解决的是资产不能被复制,钱包仍要解释待处理、已替换、执行失败和最终确认。只显示“失败”,用户照样可能反复重试。
$DUSK是Gas与质押资产,但不能替产品体验背书。我更想看钱包能否展示替换关系、note消耗原因与最终性状态。隐私可以遮住细节,却不能遮住交易是否发生。
#dusk $DUSK