/zkevm-circuits

Primary LanguageRustMIT LicenseMIT

Circuits for zkEVM

This is the zkEVM circuits used in Scroll Mainnet. It was forked from PSE zkevm-circuits and added a lot of new features later:

  1. SHA256 / MODEXP / EC precompiles
  2. RLP circuit / MPT circuit / Poseidon circuit
  3. multi block chunking
  4. proof aggregation
  5. >99.5% compatibility with official EVM test vector
  6. Many optimizations like read/write memory in word instead of byte

Docs

High level design: https://docs.scroll.io/en/technology/zkevm/zkevm-overview/
Detailed circuit docs: https://github.com/scroll-tech/zkevm-circuits/tree/develop/docs

Getting started

We recommend developers to go to our circuit playground repo for a detailed step-by-step guide on how to run proving.

Project Layout

This repository contains several Rust packages that implement the zkevm. The high-level structure of the repository is as follows:

bus-mapping

  • a crate designed to parse EVM execution traces and manipulate all of the data they provide in order to obtain structured witness inputs for circuits.

circuit-benchmarks

  • (Deprecated) Measures performance of each circuit based on proving and verifying time and execution trace parsing and generation for each subcircuit

eth-types

  • Different types helpful for various components of the EVM

external-tracer

  • Generates traces by connecting to an locally linked Geth EVM tracer

gadgets

geth-utils

  • Provides output from geth tracing APIs as circuit inputs

integration-tests

  • Integration tests for all circuits

keccak256

  • (Deprecated) Modules for Keccak hash circuit

mock

  • Testing module. Mock definitions and methods that are used to test circuits or opcodes

testool

  • Parser and driver of official Ethereum Execution Tests

zkevm-circuits

  • Main package that contains all circuit logic

zktrie

  • Wrapper of scroll binary poseidon trie