ZK Rollup

时间:2025-03-02 07:13:24

ZK Rollup 通过生成零知识证明来确保所有提交的交易都是有效的。生成零知识证明的过程涉及复杂的密码学运算,通常使用的是 zk-SNARK(零知识简洁非互动知识论证)或 zk-STARK(零知识可扩展透明知识论证)。以下是 ZK Rollup 生成证明的详细过程。

零知识证明的基本概念

  • 零知识证明:证明者能够向验证者证明某个陈述为真,而不泄露任何关于证明过程的信息。
  • zk-SNARK:一种零知识证明系统,生成简洁且高效的证明。
  • zk-STARK:一种透明且可扩展的零知识证明系统,不依赖可信设置。

生成零知识证明的步骤

  1. 交易收集和打包
    • Rollup 操作员收集用户提交的交易,将其打包成一个批次。
  2. 计算状态转移
    • 操作员在链下执行所有交易,计算初始状态和最终状态之间的状态转移。记录所有账户的状态变化。
  3. 构建电路
    • 使用算术电路或布尔电路描述状态转移逻辑。电路描述了如何从初始状态通过交易到达最终状态。
    • 电路中包括交易的有效性检查、余额更新、签名验证等逻辑。
  4. 生成证明(Prover)
    • 证明者(Prover)使用初始状态、交易数据和最终状态作为输入,通过预定义的电路生成一个零知识证明。
    • 证明过程确保所有交易都是有效的,并且状态转移是正确的。
    • 生成的证明非常简洁,通常只有几百字节。
  5. 提交证明和数据
    • 证明者将零知识证明和交易数据的压缩形式(如交易根哈希、账户状态根哈希)提交到以太坊主链。
    • 这些数据包括批次的状态根哈希和交易数据的压缩形式,用于在主链上验证。
  6. 验证证明(Verifier)
    • 验证者(Verifier)在以太坊主链上使用零知识证明验证程序,快速验证提交的证明。
    • 由于证明非常简洁且验证过程高效,这一步可以在以太坊主链上快速完成。
    • 验证通过后,主链更新 Rollup 链的状态。

ZK Rollup 生成证明的关键技术

zk-SNARK
  1. 可信设置:zk-SNARK 需要一次性可信设置,生成公共参数(public parameters)。

  2. 生成和验证:

    • Prover:使用公共参数生成证明。
    • Verifier:使用公共参数验证证明。
zk-STARK
  1. 透明性:zk-STARK 不依赖可信设置,使用公开的随机性来生成公共参数。
  2. 可扩展性:能够处理更大规模的数据,适合大规模应用。

示例代码和工具

生成零知识证明通常需要使用专门的库和工具,如:

  • libsnark:用于 zk-SNARK 的 C++ 库。
  • ZoKrates:基于 zk-SNARK 的工具链,用于生成和验证零知识证明。
  • CairoStarkNet:用于 zk-STARK 的框架和工具。

以下是使用 ZoKrates 的示例:

  1. 定义电路(file.zok):

    def main(private field a, private field b) -> (field):
        field result = a * b
        return result
    
  2. 编译电路

    zokrates compile -i file.zok
    
  3. 生成可信设置

    zokrates setup
    
  4. 计算和生成证明

    zokrates compute-witness -a 3 4
    zokrates generate-proof
    
  5. 验证证明

    zokrates export-verifier
    zokrates verify
    

总结

ZK Rollup 通过零知识证明技术(zk-SNARK 或 zk-STARK),将大量交易的有效性压缩到一个简洁的证明中提交到以太坊主链上,从而实现高效的交易验证和状态更新。这一过程涉及交易收集、状态计算、构建电路、生成和验证证明等多个步骤,利用复杂的密码学技术确保交易的安全性和有效性。


往期精彩回顾:
区块链知识系列
密码学系列
零知识证明系列
共识系列
公链调研系列
BTC系列
以太坊系列
EOS系列
Filecoin系列
联盟链系列
Fabric系列
智能合约系列
Token系列