本文介绍了以太坊区块证明的过程,包括获取区块信息、将信息转换为prover可理解的格式(witness generation),以及运行prover。Prover可以在GPU或CPU上运行,文中提供了在GPU和CPU上运行prover的具体步骤和命令,以及验证最终证明的方法。
以太坊区块证明包含 3 个步骤:
你可以在 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,如下所示:
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
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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!