1. 引言
前序博客:
- Polygon Miden zkRollup中的UTXO+账户混合状态模型
- Polygon Mide状态模型:解决状态膨胀,而不牺牲隐私和去中心化
本文基本结构为:
- 何为nullifiers?为何需要nullifiers?
- 使用nullifiers存在的问题?
- Polygon Miden如何记录nullifiers?
- 其它项目方如何记录nullifiers?
2. 何为nullifiers?为何需要nullifiers?
为何需要nullifiers?
nullifiers用于:断开 隐私保护链中senders和receivers 之间的linkability(关联性)。
nullifiers的工作原理为:
其中:
- Note DB中包含了所有已创建notes的承诺值。
- Nullifier DB中包含了所有已消费notes的nullifier值。
- 已知某note的承诺值,无法确定该note的nullifier值。
消费notes的流程为:
3. 使用nullifiers存在的问题?
使用nullifier存在的问题是:
- nullifier set会无限增长。
- 为验证某nullifier值是否在nullifier set中,网络需记录已创建的所有nullifiers。
- 若tps为1000,则持续10年,存储nullifier set需要10TB空间。
- 若tps为10000,则持续10年,存储nullifier set需要100TB空间。
4. Polygon Miden如何记录nullifiers?
Polygon Miden中使用nullifiers,希望实现:
- Authenticated data structure for non-membership proofs
- Constant nullifier DB size at given TPS
- No time limits on spending notes
- 用户维护其notes spendable所需的工作量最小化(Minimal work by users to keep their notes spendable)
Polygon Miden中的nullifiers采用Nullifier tree结构来存储:
其中:
- Nullifier tree:depth为256的Compact Sparse Merkle tree
- Nullifier值:为Nullifier tree中的path。
- 叶子节点值:表示该nullifier是否已被消费,若为1则表示已被消费,0值表示未消费。
- 但该Nullifier tree会无限增长。
为此,Polygon Miden中不只有一棵Nullifier tree,而是每个epoch(每个epoch可为6个月)都有一棵Nullifier tree。网络仅保留最新2个epoch(即window)内的完整Nullifier tree,以及所有历史Nullifier tree的roots。
这样,就可实现如下关键属性:
- 新的nullifiers仅插入到current epoch的Nullifier tree中。
- 节点仅记录最新2个epoch(即current window)的nullifiers,以及其他历史nullifier trees的roots。
- epoch具有固定时长,如6个月。
不过,需额外:
- 根据notes的创建时间,来为该note分配epochs(如 n c n_c nc)
- 验证某note的nullifier值,不存在与任意epochs ≥ n c \geq n_c ≥nc的nullifier trees中
这样,Polygon Miden中消费notes的流程调整为:
这样调整后,对用户端的影响为:
- 对于在最近2个epochs中创建的notes,无影响。
- 对于最近2个epochs之前创建的notes,用户端需:
- 下载并存储对old nullifier trees的non-membership proofs(once per epoch,且可把下载和存储任务委托给第三方)。
- 额外 验证old nullifier tree的non-membership proofs 的开销。
这样调整后,对网络的影响为:
- 额外 在前一nullifier tree中检查某nullifiers值 的开销。
5. 其它项目方如何记录nullifiers?
其它项目方记录nullifiers的方案有:
- Mutator sets:见Neptune团队2023年论文Mutator Sets and their Application to Scalable Privacy,其对non-membership proofs采用Sliding Window Bloom Filters。
- Liveness masks:Polygon zero团队采用Sparse Merkle trees和modified Huffman coding,具体见2021年博客:Privacy on Mir。
- Sharded nullifier space:ZCash daira 2019年研究https://github.com/daira/scaling。
参考资料
[1] 2023年9月Polygon Miden联合创始人Bobbin Threadbare在Fenbushi Capital的分享视频 Efficient tracking of nullifier sets by Bobbin from Polygon Maiden
Miden系列博客
- zk、zkVM、zkEVM及其未来
- Polygon L2扩容方案揭秘
- 混合Rollup:探秘 Metis、Fraxchain、Aztec、Miden和Ola
- Polygon Miden:扩展以太坊功能集的ZK-optimized rollup
- Polygon Miden zkRollup中的UTXO+账户混合状态模型
- Polygon Miden交易模型:Actor模式 + ZKP => 并行 + 隐私
- Polygon Mide状态模型:解决状态膨胀,而不牺牲隐私和去中心化