过去两天我又把 Phoenix 的交易结构扒了一遍,这次干脆把一笔交易拆开,看看到底哪些东西链上能看见,哪些看不见
━━━━━━━━━━━━━━
▎note 里到底藏了啥
Phoenix 是 UTXO 模型,每一份资产在链上叫一个 note。一个 note 里打包了三样东西:一个对金额的承诺(不是明文数字,是加密后的承诺值)、一个盲化因子(说白了就是给承诺加的随机盐,防止有人靠碰撞猜出金额)、还有一个一次性随机数,保证每个 note 都独一无二不会跟别的 note 撞上
这三样凑在一起,链上看到的只是一堆加密数据,具体转了多少钱、这个 note 到底值多少,外人完全看不出来。但网络照样能验证这些承诺加起来收支平衡,不用解密任何一个具体数字
━━━━━━━━━━━━━━
▎防双花靠 nullifier
这个设计我觉得挺妙的一点是:它不是靠“删掉旧 note”来防止重复花费,而是靠公开一个无法关联回原始 note 的消费凭证
花掉一个 note 的时候,会生成一个对应的 nullifier,这玩意儿是确定性算出来的,但外部人看着它,压根反推不出对应的是哪个 note。网络只需要盯着“这个 nullifier 出现过没有”,出现过就说明对应的 note 已经被花掉了,同一个 note 想花第二次,会生成同一个 nullifier,直接跟已有记录撞上,系统立刻拒绝
整个过程没暴露“是谁花了什么”,靠碰撞检测就搞定了
━━━━━━━━━━━━━━
▎Poseidon 哈希,撑起整套隐私状态的地基
隐私状态得存进一棵 Merkle 树里,用来做成员包含证明(证明“这个 note 确实存在于状态树里”)
普通哈希函数放进 zk 电路里算,开销巨大,Poseidon 是专门为 zk 友好设计的哈希算法,算法结构跟证明系统更贴合,能大幅压低电路里做哈希运算的成本。没有这种 zk 友好哈希,隐私状态树的证明生成会慢到没法用
@Dusk_Foundation $DUSK #dusk
在 Phoenix 交易中,什么机制能防止隐藏资产被双花?
A. Nullifier公开消费凭证防止双花
B. 删除旧Note避免重复使用
C. Poseidon哈希直接隐藏交易金额
6 дн. осталось