Polygon Miden中的nullifier sets设计

1. 引言

前序博客:

  • Polygon Miden zkRollup中的UTXO+账户混合状态模型
  • Polygon Mide状态模型:解决状态膨胀,而不牺牲隐私和去中心化

本文基本结构为:

  • 何为nullifiers?为何需要nullifiers?
  • 使用nullifiers存在的问题?
  • Polygon Miden如何记录nullifiers?
  • 其它项目方如何记录nullifiers?

2. 何为nullifiers?为何需要nullifiers?

为何需要nullifiers?

nullifiers用于:断开 隐私保护链中senders和receivers 之间的linkability(关联性)。

nullifiers的工作原理为:
Polygon Miden中的nullifier sets设计_第1张图片
其中:

  • Note DB中包含了所有已创建notes的承诺值。
  • Nullifier DB中包含了所有已消费notes的nullifier值。
  • 已知某note的承诺值,无法确定该note的nullifier值。

消费notes的流程为:
Polygon Miden中的nullifier sets设计_第2张图片

3. 使用nullifiers存在的问题?

使用nullifier存在的问题是:

  • nullifier set会无限增长。
  • 为验证某nullifier值是否在nullifier set中,网络需记录已创建的所有nullifiers。
    • 若tps为1000,则持续10年,存储nullifier set需要10TB空间。
    • 若tps为10000,则持续10年,存储nullifier set需要100TB空间。

Polygon Miden中的nullifier sets设计_第3张图片

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结构来存储:
Polygon Miden中的nullifier sets设计_第4张图片
其中:

  • 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。
Polygon Miden中的nullifier sets设计_第5张图片
这样,就可实现如下关键属性:

  • 新的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的流程调整为:
Polygon Miden中的nullifier sets设计_第6张图片
这样调整后,对用户端的影响为:

  • 对于在最近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状态模型:解决状态膨胀,而不牺牲隐私和去中心化

你可能感兴趣的:(zkVM,zkVM)