Skip to content

0xPolygonZero/zk_evm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ee7e5f3 · Oct 14, 2024
Jul 8, 2024
Oct 7, 2024
Sep 16, 2024
Sep 9, 2024
Sep 30, 2024
Sep 30, 2024
Aug 28, 2024
Oct 14, 2024
Oct 4, 2024
Sep 30, 2024
Oct 14, 2024
Oct 1, 2024
Oct 14, 2024
Oct 2, 2024
Oct 14, 2024
Jul 8, 2024
Sep 6, 2024
Sep 24, 2024
Jul 15, 2024
Oct 9, 2024
Oct 11, 2024
Jul 8, 2024
Sep 27, 2023
Sep 27, 2023
Sep 23, 2024
Feb 19, 2024
Sep 26, 2024
Feb 11, 2024
Sep 30, 2024

Repository files navigation

zk_evm

A collection of libraries to prove Ethereum blocks with Polygon Zero Type 1 zkEVM, powered by starky and plonky2 proving systems.

Directory structure

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.

  • zero_bin: A composition of paladin and evm_arithmetization to generate EVM block proofs.

Dependency graph

Below is a simplified view of the dependency graph, including the proving system backends and the application layer defined within zero-bin.

Loading
%%{init: {'theme':'dark'}}%%
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]

    B --> C
    B ---> D
    C ---> D

    F{zero-bin}
    C --> F
    D --> F
    end

Documentation

Documentation is still incomplete and will be improved over time. You can look at the sequence diagrams for the proof generation flow, or go through the zkEVM book for explanations on the zkEVM design and architecture.

Branches

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.

Building

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.

License

Licensed under either of

at your option.

Contribution

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.