Skip to content

kroma-network/zkevm-circuits

Repository files navigation

Circuits for zkEVM

In this repository, zkEVM constraints for the Kroma L2 blockchain are defined. This halo2-based zero-knowledge proof can be used to demonstrate misbehavior of Kroma Validator during the Kroma challenge process. The additional explanations about Kroma network can be found here.

Check out the work in progress specification to learn how it works.

Test

To run tests, please use: make test-all.

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 the EVM Proof and the State Proof.

circuit-benchmarks

  • 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 zkevm, such as execution trace parsing or circuits

external-tracer

  • Generates traces by connecting to an external tracer

gadgets

geth-utils

  • Provides output from latest geth APIs (debug_trace) as test vectors

integration-tests

  • Integration tests for all circuits

keccak256

  • Modules for Keccak hash circuit

mock

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

testool

  • CLI that provides tools for testing

zkevm-circuits

  • Main package that contains all circuit logic

zktrie

  • Modules for Merkle Patricia Trie circuit