A collection of libraries to prove Ethereum blocks with Polygon Zero Type 1 zkEVM, powered by starky and plonky2 proving systems.
This repository contains the following Rust crates:
-
mpt_trie: A collection of types and functions to work with Ethereum Merkle Patricie Tries.
-
smt_trie: A collection of types and functions to work with Polygon Hermez Sparse Merkle Trees (SMT).
-
trace_decoder: Flexible protocol designed to process Ethereum clients trace payloads into an IR format that can be understood by the zkEVM prover.
-
evm_arithmetization: Defines all the STARK constraints and recursive circuits to generate succinct proofs of EVM execution. It uses starky and plonky2 as proving backend: https://github.com/0xPolygonZero/plonky2.
-
proof_gen: A convenience library for generating proofs from inputs already in Intermediate Representation (IR) format.
-
zero_bin: A composition of
paladin
andproof_gen
to generate EVM block proofs.
Below is a simplified view of the dependency graph, including the proving system backends and the application layer defined within zero-bin.
flowchart LR
subgraph ps [proving systems]
A1{{plonky2}}
A2{{starky}}
end
ps --> zk_evm
subgraph zk_evm [zk_evm]
B[mpt_trie]
C[evm_arithmetization]
D[trace_decoder]
E[proof_gen]
B --> C
B ---> D
C ---> D
C --> E
D --> E
F{zero-bin}
C --> F
D --> F
E --> F
end
Documentation is still incomplete and will be improved over time, a lot of useful material can be found in the docs section, including:
- sequence diagrams for the proof generation flow
- zkEVM specifications, detailing the underlying EVM proving statement
The default branch for the repo is the develop
branch which is not stable but under active development. Most PRs should target develop
. If you need a stable branch then a tagged version of main
is what you're after.
It should be assumed that develop
will break and should only be used for development.
The zkEVM stack currently requires the nightly
toolchain, although we may transition to stable
in the future.
Note that the prover uses the Jemalloc memory allocator due to its superior performance.
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http:https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http:https://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.