以太坊区块证明

本文介绍了以太坊区块证明的过程,包括获取区块信息、将信息转换为prover可理解的格式(witness generation),以及运行prover。Prover可以在GPU或CPU上运行,文中提供了在GPU和CPU上运行prover的具体步骤和命令,以及验证最终证明的方法。

以太坊区块证明

以太坊区块证明包含 3 个步骤:

  • 获取关于区块的必要信息(交易、追踪等)
  • 将这些信息转换成 prover 可以理解的格式(witness 生成)
  • 运行 prover。

你可以在 GPU(更快)或 CPU 上运行 prover。

端到端运行

简而言之:

(从本仓库的主目录)

mkdir /tmp/witness

cargo run -p eth_runner --release --features rig/no_print,rig/unlimited_native -- single-run --block-dir tests/instances/eth_runner/blocks/19299001 --randomized --witness-output-dir /tmp/witness

现在,克隆 zksync-airbender(建议版本 v0.3.0)。 从 Airbender 的 tools/cli 目录 中,使用 GPU 或 CPU 运行 prover,如下所示:

使用 GPU(需要至少 22GB 的设备 RAM):

mkdir /tmp/output
CUDA_VISIBLE_DEVICES=0 cargo run -p cli --release --features gpu prove --bin ../../../zksync-os/zksync_os/evm_replay.bin --input-file /tmp/witness/19299001_witness --until final-recursion --output-dir /tmp/output --gpu --cycles 500000000

为了隐藏延迟,Airbender 使用异步分配器和内部流水线(例如,将 cpu<->gpu 传输与计算重叠)。流水线需要专用的分配。 如果你遇到错误,可能是因为你耗尽了内存。你可以通过在同步模式下使用 CUDA_LAUNCH_BLOCKING=1 运行 GPU 来降低必要的高水位线:

mkdir /tmp/output
CUDA_LAUNCH_BLOCKING=1 CUDA_VISIBLE_DEVICES=0 cargo run -p cli --release --features gpu prove --bin ../../../zksync-os/zksync_os/evm_replay.bin --input-file /tmp/witness/19299001_witness --until final-recursion --output-dir /tmp/output --gpu --cycles 500000000

使用 CPU:

mkdir /tmp/output
cargo run -p cli --release prove --bin ../../../zksync-os/zksync_os/evm_replay.bin --input-file /tmp/witness/19299001_witness --until final-recursion --output-dir /tmp/output --cycles 500000000

最终的证明将出现在 /tmp/output/recursion_program_proof.json 中。

你可以在 http://fri-verifier.vercel.app 上验证它。

详细信息

获取区块

上面的命令从 tests/instances/eth_runner 获取区块信息。

我们还在 https://github.com/antoniolocascio/ethereum-block-examples/tree/main/blocks 中放置了一些额外的区块。

或者,你可以使用来自 eth_runner 的 live-run 命令下载它们。

  • 原文链接: github.com/matter-labs/z...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
matter-labs
matter-labs
江湖只有他的大名,没有他的介绍。