Awesome
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:
- 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.
- Measures performance of each circuit based on proving and verifying time and execution trace parsing and generation for each subcircuit
- Different types helpful for various components of the zkevm, such as execution trace parsing or circuits
- Generates traces by connecting to an external tracer
- Custom circuits that abstracts away low-level circuit detail.
- What are gadgets?
- Provides output from latest geth APIs (debug_trace) as test vectors
- Integration tests for all circuits
- Modules for Keccak hash circuit
- Mock definitions and methods that are used to test circuits or opcodes
- CLI that provides tools for testing
- Main package that contains all circuit logic
- Modules for Merkle Patricia Trie circuit