主页 > 其他  > 

ZKRollup

ZKRollup

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

零知识证明的基本概念 零知识证明:证明者能够向验证者证明某个陈述为真,而不泄露任何关于证明过程的信息。zk-SNARK:一种零知识证明系统,生成简洁且高效的证明。zk-STARK:一种透明且可扩展的零知识证明系统,不依赖可信设置。 生成零知识证明的步骤 交易收集和打包: Rollup 操作员收集用户提交的交易,将其打包成一个批次。 计算状态转移: 操作员在链下执行所有交易,计算初始状态和最终状态之间的状态转移。记录所有账户的状态变化。 构建电路: 使用算术电路或布尔电路描述状态转移逻辑。电路描述了如何从初始状态通过交易到达最终状态。电路中包括交易的有效性检查、余额更新、签名验证等逻辑。 生成证明(Prover): 证明者(Prover)使用初始状态、交易数据和最终状态作为输入,通过预定义的电路生成一个零知识证明。证明过程确保所有交易都是有效的,并且状态转移是正确的。生成的证明非常简洁,通常只有几百字节。 提交证明和数据: 证明者将零知识证明和交易数据的压缩形式(如交易根哈希、账户状态根哈希)提交到以太坊主链。这些数据包括批次的状态根哈希和交易数据的压缩形式,用于在主链上验证。 验证证明(Verifier): 验证者(Verifier)在以太坊主链上使用零知识证明验证程序,快速验证提交的证明。由于证明非常简洁且验证过程高效,这一步可以在以太坊主链上快速完成。验证通过后,主链更新 Rollup 链的状态。 ZK Rollup 生成证明的关键技术 zk-SNARK

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

生成和验证:

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

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

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

以下是使用 ZoKrates 的示例:

定义电路(file.zok):

def main(private field a, private field b) -> (field): field result = a * b return result

编译电路:

zokrates compile -i file.zok

生成可信设置:

zokrates setup

计算和生成证明:

zokrates compute-witness -a 3 4 zokrates generate-proof

验证证明:

zokrates export-verifier zokrates verify 总结

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


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

ZKRollup由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“ZKRollup