Skip to content
This repository has been archived by the owner on May 3, 2024. It is now read-only.

In-circuit blockhash calculation #98

Closed
wants to merge 49 commits into from
Closed
Show file tree
Hide file tree
Changes from 48 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
9b43c24
feat: RLP circuit for block hash calculation
ggkitsas May 22, 2023
28ef033
finalized blockhash-check contraints; added blokchash-check witness g…
ggkitsas May 25, 2023
1ddefc6
blockhash: fixes errors, adds tests
ggkitsas May 31, 2023
a786df7
handles corner case of short RLP fields; fixes misc errors; minor ref…
ggkitsas Jun 5, 2023
31b6dd8
reduced the degree of pi circuit; adds RLP block header tests for cor…
ggkitsas Jun 5, 2023
c5d1298
adds rlc for blockhash calculation
ggkitsas Jun 6, 2023
2e898af
adds keccak checks for blockhash calculation
ggkitsas Jun 6, 2023
621590b
pi circuit cleanups
ggkitsas Jun 8, 2023
b823abd
pi circuit: adds checks for reconstructed values of block header fields
ggkitsas Jun 12, 2023
70529c0
pi circuit: adds parent hash checks
ggkitsas Jun 12, 2023
7f59e70
pi circuit: adds withdrawals root for blockhash calcs
ggkitsas Jun 12, 2023
b8e43bd
pi circuit: fixes handling RLP short values
ggkitsas Jun 13, 2023
19e5277
cleansup
ggkitsas Jun 14, 2023
9a2a854
cleaups, clippy, code quality
ggkitsas Jun 14, 2023
aae7300
rustfmt
ggkitsas Jun 14, 2023
ce2346b
clippy
ggkitsas Jun 14, 2023
17801f3
clippy
ggkitsas Jun 14, 2023
c305c8e
fix: wrong selectors when reconstructing block header values
ggkitsas Jun 15, 2023
1328b65
reduces lookups and columns of block hash circuit
ggkitsas Jun 16, 2023
35944ba
adds negative tests
ggkitsas Jun 19, 2023
6c4e630
optimized out some variable lenght field selectors
ggkitsas Jun 19, 2023
c64278a
rustfmt
ggkitsas Jun 19, 2023
bce8d27
ci fixes
ggkitsas Jun 19, 2023
4d16ea0
rustfmt
ggkitsas Jun 19, 2023
ea7b8e9
code imporvement
ggkitsas Jun 21, 2023
6edb468
refactoring
ggkitsas Jun 21, 2023
03979df
Merge branch 'blockhash' of github.com:taikoxyz/zkevm-circuits into b…
ggkitsas Jun 21, 2023
7c4f8b9
minor fix
ggkitsas Jun 21, 2023
a59e2e5
Some refactoring
Brechtpd Jun 21, 2023
207a5eb
Merge pull request #117 from taikoxyz/blockhash-brecht
ggkitsas Jun 22, 2023
8d1399e
minor refactoring
ggkitsas Jun 22, 2023
d53df04
test cleanups
ggkitsas Jun 22, 2023
a37a494
extends block table lookups to include tag and index
ggkitsas Jun 22, 2023
c625044
Some code refactoring
Brechtpd Jun 23, 2023
7e95c2f
Merge pull request #118 from taikoxyz/blockhash-brecht2
ggkitsas Jun 24, 2023
4de76ce
adds comments
ggkitsas Jun 24, 2023
718b923
simplifies code
ggkitsas Jun 27, 2023
d661601
fmt and clippy
ggkitsas Jun 27, 2023
8b53902
fmt + clippy
ggkitsas Jun 27, 2023
ac3c7b3
adds checks for correctly skipping leading zeros in rlc
ggkitsas Jun 27, 2023
2798ac5
fmt
ggkitsas Jun 27, 2023
ba93650
fixes constraint
ggkitsas Jun 27, 2023
5ca964e
skips artifical headers in rlc
ggkitsas Jun 27, 2023
9dd12e8
optimization: removes q_total_length column
ggkitsas Jun 28, 2023
872f182
make sure we rlc all the needed bytes
ggkitsas Jun 29, 2023
9796491
fmt
ggkitsas Jun 29, 2023
6ab8033
simplifies constraints; adds initial work on previous hashes
ggkitsas Jun 30, 2023
54d6f05
fmt + clippy
ggkitsas Jun 30, 2023
456f274
adds block hash checks for the previous 256 blocks
ggkitsas Jul 6, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ members = [
[patch."https://github.com/privacy-scaling-explorations/halo2.git"]
halo2_proofs = { git = "https://github.com/smtmfft/halo2.git", rev = "50ee8ad785c53232824e60b4ff6df32b69970358" }

[patch.crates-io]
ethers-core = {git = "https://github.com/ggkitsas/ethers-rs/", rev = "6059806c17fa1a1d7534044bcdbecfef869392e1"}

# Definition of benchmarks profile to use.
[profile.bench]
opt-level = 3
Expand Down
1 change: 1 addition & 0 deletions circuit-benchmarks/examples/pi_circuit_integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
poly::commitment::ParamsProver,
transcript::{TranscriptReadBuffer, TranscriptWriterBuffer},
};
use log;

Check failure on line 11 in circuit-benchmarks/examples/pi_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

this import is redundant

error: this import is redundant --> circuit-benchmarks/examples/pi_circuit_integration.rs:11:1 | 11 | use log; | ^^^^^^^^ help: remove it entirely | = note: `-D clippy::single-component-path-imports` implied by `-D warnings` = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports
use std::env::var;
use zkevm_circuits::pi_circuit2::{PiCircuit, PiTestCircuit, PublicData};
use zkevm_circuits::util::SubCircuit;
Expand Down Expand Up @@ -289,10 +289,10 @@
let proof = PlonkVerifier::read_proof(&vk, &protocol, &instances, &mut transcript).unwrap();
PlonkVerifier::verify(&vk, &protocol, &instances, &proof).unwrap();

let file_path = &yul_file_name.unwrap_or(String::from("./PlonkEvmVerifier.sol"));

Check failure on line 292 in circuit-benchmarks/examples/pi_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

use of `unwrap_or` followed by a function call

error: use of `unwrap_or` followed by a function call --> circuit-benchmarks/examples/pi_circuit_integration.rs:292:36 | 292 | let file_path = &yul_file_name.unwrap_or(String::from("./PlonkEvmVerifier.sol")); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from("./PlonkEvmVerifier.sol"))` | = note: `-D clippy::or-fun-call` implied by `-D warnings` = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call
File::create(file_path)
.expect(file_path)
.write_all(&loader.yul_code().as_bytes())

Check failure on line 295 in circuit-benchmarks/examples/pi_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

this expression creates a reference which is immediately dereferenced by the compiler

error: this expression creates a reference which is immediately dereferenced by the compiler --> circuit-benchmarks/examples/pi_circuit_integration.rs:295:20 | 295 | .write_all(&loader.yul_code().as_bytes()) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `loader.yul_code().as_bytes()` | = note: `-D clippy::needless-borrow` implied by `-D warnings` = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
.expect(file_path);

evm::compile_yul(&loader.yul_code())
Expand Down Expand Up @@ -370,7 +370,7 @@

pub fn write_pk(pk_file_path: &Path, pk: &ProvingKey<G1Affine>) -> Result<(), std::io::Error> {
let dir = pk_file_path.parent().unwrap();
fs::create_dir_all(dir).expect(format!("create {:?}", dir).as_str());

Check failure on line 373 in circuit-benchmarks/examples/pi_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

use of `expect` followed by a function call

error: use of `expect` followed by a function call --> circuit-benchmarks/examples/pi_circuit_integration.rs:373:29 | 373 | fs::create_dir_all(dir).expect(format!("create {:?}", dir).as_str()); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("create {:?}", dir))` | = note: `-D clippy::expect-fun-call` implied by `-D warnings` = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call
let mut file = fs::File::create(&pk_file_path)?;
pk.write(&mut file)
}
Expand Down Expand Up @@ -561,6 +561,7 @@
CIRCUIT_CONFIG.max_txs,
CIRCUIT_CONFIG.max_calldata,
public_data,
None,
),
);
assert!(block.txs.len() <= CIRCUIT_CONFIG.max_txs);
Expand Down
2 changes: 1 addition & 1 deletion circuit-benchmarks/examples/super_circuit_integration.rs
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
//! PI circuit benchmarks
use ark_std::{end_timer, start_timer};

Check failure on line 2 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused imports: `end_timer`, `start_timer`

error: unused imports: `end_timer`, `start_timer` --> circuit-benchmarks/examples/super_circuit_integration.rs:2:15 | 2 | use ark_std::{end_timer, start_timer}; | ^^^^^^^^^ ^^^^^^^^^^^ | = note: `-D unused-imports` implied by `-D warnings`

Check warning on line 2 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Bitrot check

unused imports: `end_timer`, `start_timer`

Check warning on line 2 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-unknown-unknown

unused imports: `end_timer`, `start_timer`

Check warning on line 2 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-wasi

unused imports: `end_timer`, `start_timer`
use eth_types::geth_types::GethData;

Check failure on line 3 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `eth_types::geth_types::GethData`

error: unused import: `eth_types::geth_types::GethData` --> circuit-benchmarks/examples/super_circuit_integration.rs:3:5 | 3 | use eth_types::geth_types::GethData; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Check warning on line 3 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Bitrot check

unused import: `eth_types::geth_types::GethData`

Check warning on line 3 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-unknown-unknown

unused import: `eth_types::geth_types::GethData`

Check warning on line 3 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-wasi

unused import: `eth_types::geth_types::GethData`
use eth_types::{address, bytecode, Word, U256};

Check failure on line 4 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused imports: `U256`, `Word`, `address`, `bytecode`

error: unused imports: `U256`, `Word`, `address`, `bytecode` --> circuit-benchmarks/examples/super_circuit_integration.rs:4:17 | 4 | use eth_types::{address, bytecode, Word, U256}; | ^^^^^^^ ^^^^^^^^ ^^^^ ^^^^

Check warning on line 4 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Bitrot check

unused imports: `U256`, `Word`, `address`, `bytecode`

Check warning on line 4 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-unknown-unknown

unused imports: `U256`, `Word`, `address`, `bytecode`

Check warning on line 4 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-wasi

unused imports: `U256`, `Word`, `address`, `bytecode`
use ethers_signers::LocalWallet;

Check failure on line 5 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `ethers_signers::LocalWallet`

error: unused import: `ethers_signers::LocalWallet` --> circuit-benchmarks/examples/super_circuit_integration.rs:5:5 | 5 | use ethers_signers::LocalWallet; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^

Check warning on line 5 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Bitrot check

unused import: `ethers_signers::LocalWallet`

Check warning on line 5 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-unknown-unknown

unused import: `ethers_signers::LocalWallet`

Check warning on line 5 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-wasi

unused import: `ethers_signers::LocalWallet`
use ethers_signers::Signer;

Check failure on line 6 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `ethers_signers::Signer`

error: unused import: `ethers_signers::Signer` --> circuit-benchmarks/examples/super_circuit_integration.rs:6:5 | 6 | use ethers_signers::Signer; | ^^^^^^^^^^^^^^^^^^^^^^
use halo2_proofs::arithmetic::Field;

Check failure on line 7 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `halo2_proofs::arithmetic::Field`

error: unused import: `halo2_proofs::arithmetic::Field` --> circuit-benchmarks/examples/super_circuit_integration.rs:7:5 | 7 | use halo2_proofs::arithmetic::Field; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Check warning on line 7 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Bitrot check

unused import: `halo2_proofs::arithmetic::Field`

Check warning on line 7 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-unknown-unknown

unused import: `halo2_proofs::arithmetic::Field`

Check warning on line 7 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-wasi

unused import: `halo2_proofs::arithmetic::Field`
use halo2_proofs::plonk::{create_proof, keygen_pk, keygen_vk, verify_proof};
use halo2_proofs::poly::kzg::commitment::{KZGCommitmentScheme, ParamsKZG, ParamsVerifierKZG};

Check failure on line 9 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `ParamsVerifierKZG`

error: unused import: `ParamsVerifierKZG` --> circuit-benchmarks/examples/super_circuit_integration.rs:9:75 | 9 | use halo2_proofs::poly::kzg::commitment::{KZGCommitmentScheme, ParamsKZG, ParamsVerifierKZG}; | ^^^^^^^^^^^^^^^^^

Check warning on line 9 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Bitrot check

unused import: `ParamsVerifierKZG`

Check warning on line 9 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-unknown-unknown

unused import: `ParamsVerifierKZG`

Check warning on line 9 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-wasi

unused import: `ParamsVerifierKZG`
use halo2_proofs::poly::kzg::multiopen::{ProverSHPLONK, VerifierSHPLONK};

Check failure on line 10 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused imports: `ProverSHPLONK`, `VerifierSHPLONK`

error: unused imports: `ProverSHPLONK`, `VerifierSHPLONK` --> circuit-benchmarks/examples/super_circuit_integration.rs:10:42 | 10 | use halo2_proofs::poly::kzg::multiopen::{ProverSHPLONK, VerifierSHPLONK}; | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^

Check warning on line 10 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Bitrot check

unused imports: `ProverSHPLONK`, `VerifierSHPLONK`

Check warning on line 10 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-unknown-unknown

unused imports: `ProverSHPLONK`, `VerifierSHPLONK`

Check warning on line 10 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-wasi

unused imports: `ProverSHPLONK`, `VerifierSHPLONK`
use halo2_proofs::poly::kzg::strategy::SingleStrategy;

Check failure on line 11 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `halo2_proofs::poly::kzg::strategy::SingleStrategy`

error: unused import: `halo2_proofs::poly::kzg::strategy::SingleStrategy` --> circuit-benchmarks/examples/super_circuit_integration.rs:11:5 | 11 | use halo2_proofs::poly::kzg::strategy::SingleStrategy; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Check warning on line 11 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Bitrot check

unused import: `halo2_proofs::poly::kzg::strategy::SingleStrategy`

Check warning on line 11 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-unknown-unknown

unused import: `halo2_proofs::poly::kzg::strategy::SingleStrategy`

Check warning on line 11 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-wasi

unused import: `halo2_proofs::poly::kzg::strategy::SingleStrategy`
use halo2_proofs::{
halo2curves::bn256::{Bn256, Fr, G1Affine},
poly::commitment::ParamsProver,
transcript::{
Blake2bRead, Blake2bWrite, Challenge255, TranscriptReadBuffer, TranscriptWriterBuffer,

Check failure on line 16 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused imports: `Blake2bRead`, `Blake2bWrite`, `Challenge255`

error: unused imports: `Blake2bRead`, `Blake2bWrite`, `Challenge255` --> circuit-benchmarks/examples/super_circuit_integration.rs:16:9 | 16 | Blake2bRead, Blake2bWrite, Challenge255, TranscriptReadBuffer, TranscriptWriterBuffer, | ^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^

Check warning on line 16 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Bitrot check

unused imports: `Blake2bRead`, `Blake2bWrite`, `Challenge255`

Check warning on line 16 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-unknown-unknown

unused imports: `Blake2bRead`, `Blake2bWrite`, `Challenge255`

Check warning on line 16 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-wasi

unused imports: `Blake2bRead`, `Blake2bWrite`, `Challenge255`
},
};
use mock::{TestContext, MOCK_CHAIN_ID};

Check failure on line 19 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused imports: `MOCK_CHAIN_ID`, `TestContext`

error: unused imports: `MOCK_CHAIN_ID`, `TestContext` --> circuit-benchmarks/examples/super_circuit_integration.rs:19:12 | 19 | use mock::{TestContext, MOCK_CHAIN_ID}; | ^^^^^^^^^^^ ^^^^^^^^^^^^^

Check warning on line 19 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Bitrot check

unused imports: `MOCK_CHAIN_ID`, `TestContext`

Check warning on line 19 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-unknown-unknown

unused imports: `MOCK_CHAIN_ID`, `TestContext`

Check warning on line 19 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Build target wasm32-wasi

unused imports: `MOCK_CHAIN_ID`, `TestContext`
use rand::SeedableRng;

Check failure on line 20 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `rand::SeedableRng`

error: unused import: `rand::SeedableRng` --> circuit-benchmarks/examples/super_circuit_integration.rs:20:5 | 20 | use rand::SeedableRng; | ^^^^^^^^^^^^^^^^^
use rand_chacha::{ChaCha20Rng, ChaChaRng};

Check failure on line 21 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused imports: `ChaCha20Rng`, `ChaChaRng`

error: unused imports: `ChaCha20Rng`, `ChaChaRng` --> circuit-benchmarks/examples/super_circuit_integration.rs:21:19 | 21 | use rand_chacha::{ChaCha20Rng, ChaChaRng}; | ^^^^^^^^^^^ ^^^^^^^^^
use rand_xorshift::XorShiftRng;

Check failure on line 22 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `rand_xorshift::XorShiftRng`

error: unused import: `rand_xorshift::XorShiftRng` --> circuit-benchmarks/examples/super_circuit_integration.rs:22:5 | 22 | use rand_xorshift::XorShiftRng; | ^^^^^^^^^^^^^^^^^^^^^^^^^^
use std::collections::HashMap;

Check failure on line 23 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `std::collections::HashMap`

error: unused import: `std::collections::HashMap` --> circuit-benchmarks/examples/super_circuit_integration.rs:23:5 | 23 | use std::collections::HashMap; | ^^^^^^^^^^^^^^^^^^^^^^^^^
use std::env::var;

Check failure on line 24 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `std::env::var`

error: unused import: `std::env::var` --> circuit-benchmarks/examples/super_circuit_integration.rs:24:5 | 24 | use std::env::var; | ^^^^^^^^^^^^^
use std::io::Read;

Check failure on line 25 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `std::io::Read`

error: unused import: `std::io::Read` --> circuit-benchmarks/examples/super_circuit_integration.rs:25:5 | 25 | use std::io::Read; | ^^^^^^^^^^^^^
use zkevm_circuits::pi_circuit::{PiCircuit, PiTestCircuit, PublicData};

Check failure on line 26 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused imports: `PiCircuit`, `PiTestCircuit`, `PublicData`

error: unused imports: `PiCircuit`, `PiTestCircuit`, `PublicData` --> circuit-benchmarks/examples/super_circuit_integration.rs:26:34 | 26 | use zkevm_circuits::pi_circuit::{PiCircuit, PiTestCircuit, PublicData}; | ^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^
use zkevm_circuits::super_circuit::SuperCircuit;
use zkevm_circuits::test_util::rand_tx;

Check failure on line 28 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `zkevm_circuits::test_util::rand_tx`

error: unused import: `zkevm_circuits::test_util::rand_tx` --> circuit-benchmarks/examples/super_circuit_integration.rs:28:5 | 28 | use zkevm_circuits::test_util::rand_tx; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
use zkevm_circuits::util::SubCircuit;

Check failure on line 29 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `zkevm_circuits::util::SubCircuit`

error: unused import: `zkevm_circuits::util::SubCircuit` --> circuit-benchmarks/examples/super_circuit_integration.rs:29:5 | 29 | use zkevm_circuits::util::SubCircuit; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

#[test]
fn bench_super_circuit_prover() {
Expand Down Expand Up @@ -70,7 +70,7 @@

block.sign(&wallets);

type TestSuperCircuit = SuperCircuit::<Fr, 4, 32, 512>;
type TestSuperCircuit = SuperCircuit<Fr, 4, 32, 512>;
let (_, circuit, instance, _) = TestSuperCircuit::build(block).unwrap();
let instance_refs: Vec<&[Fr]> = instance.iter().map(|v| &v[..]).collect();

Expand Down Expand Up @@ -160,7 +160,7 @@
verifier::{self, SnarkVerifier},
};
use std::fs::{self, File};
use std::{io::Cursor, io::Write, rc::Rc, time::Instant};

Check failure on line 163 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused imports: `io::Cursor`, `time::Instant`

error: unused imports: `io::Cursor`, `time::Instant` --> circuit-benchmarks/examples/super_circuit_integration.rs:163:11 | 163 | use std::{io::Cursor, io::Write, rc::Rc, time::Instant}; | ^^^^^^^^^^ ^^^^^^^^^^^^^

type PlonkVerifier = verifier::plonk::PlonkVerifier<KzgAs<Bn256, Gwc19>>;

Expand Down Expand Up @@ -234,13 +234,13 @@

File::create("./PlonkEvmVerifier-super.sol")
.expect("PlonkEvmVerifier-super.sol")
.write_all(&loader.yul_code().as_bytes())

Check failure on line 237 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

this expression creates a reference which is immediately dereferenced by the compiler

error: this expression creates a reference which is immediately dereferenced by the compiler --> circuit-benchmarks/examples/super_circuit_integration.rs:237:20 | 237 | .write_all(&loader.yul_code().as_bytes()) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `loader.yul_code().as_bytes()` | = note: `-D clippy::needless-borrow` implied by `-D warnings` = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
.expect("PlonkEvmVerifier-super.sol");

evm::compile_yul(&loader.yul_code())
}

fn evm_verify(deployment_code: Vec<u8>, instances: Vec<Vec<Fr>>, proof: Vec<u8>) {

Check failure on line 243 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

function `evm_verify` is never used

error: function `evm_verify` is never used --> circuit-benchmarks/examples/super_circuit_integration.rs:243:4 | 243 | fn evm_verify(deployment_code: Vec<u8>, instances: Vec<Vec<Fr>>, proof: Vec<u8>) { | ^^^^^^^^^^ | = note: `-D dead-code` implied by `-D warnings`
let calldata = encode_calldata(&instances, &proof);

let success = {
Expand All @@ -262,7 +262,7 @@
assert!(success);
}

fn gen_proof<C: Circuit<Fr>>(

Check failure on line 265 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

function `gen_proof` is never used

error: function `gen_proof` is never used --> circuit-benchmarks/examples/super_circuit_integration.rs:265:4 | 265 | fn gen_proof<C: Circuit<Fr>>( | ^^^^^^^^^
params: &ParamsKZG<Bn256>,
pk: &ProvingKey<G1Affine>,
circuit: C,
Expand Down Expand Up @@ -312,7 +312,7 @@

fn write_pk(pk_file_path: &Path, pk: &ProvingKey<G1Affine>) -> Result<(), std::io::Error> {
let dir = pk_file_path.parent().unwrap();
fs::create_dir_all(dir).expect(format!("create {:?}", dir).as_str());

Check failure on line 315 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

use of `expect` followed by a function call

error: use of `expect` followed by a function call --> circuit-benchmarks/examples/super_circuit_integration.rs:315:29 | 315 | fs::create_dir_all(dir).expect(format!("create {:?}", dir).as_str()); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("create {:?}", dir))` | = note: `-D clippy::expect-fun-call` implied by `-D warnings` = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call
let mut file = fs::File::create(&pk_file_path)?;
pk.write(&mut file)
}
Expand Down Expand Up @@ -352,11 +352,11 @@
use bus_mapping::Error;
use clap::Parser;
use ethers_providers::Http;
use serde::{Deserialize, Serialize};

Check failure on line 355 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused imports: `Deserialize`, `Serialize`

error: unused imports: `Deserialize`, `Serialize` --> circuit-benchmarks/examples/super_circuit_integration.rs:355:13 | 355 | use serde::{Deserialize, Serialize}; | ^^^^^^^^^^^ ^^^^^^^^^
use std::str::FromStr;
use zkevm_circuits::evm_circuit::witness::block_convert;
use zkevm_circuits::super_circuit::MOCK_RANDOMNESS;
use zkevm_circuits::tx_circuit::PrimeField;

Check failure on line 359 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused import: `zkevm_circuits::tx_circuit::PrimeField`

error: unused import: `zkevm_circuits::tx_circuit::PrimeField` --> circuit-benchmarks/examples/super_circuit_integration.rs:359:5 | 359 | use zkevm_circuits::tx_circuit::PrimeField; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

#[derive(Parser, Debug)]
#[clap(version, about)]
Expand Down Expand Up @@ -386,14 +386,14 @@
};

let builder = BuilderClient::new(geth_client, circuit_params.clone()).await?;
let (builder, eth_block) = builder.gen_inputs(config.block_num).await?;

Check failure on line 389 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused variable: `eth_block`

error: unused variable: `eth_block` --> circuit-benchmarks/examples/super_circuit_integration.rs:389:19 | 389 | let (builder, eth_block) = builder.gen_inputs(config.block_num).await?; | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_eth_block` | = note: `-D unused-variables` implied by `-D warnings`
let mut block = block_convert(&builder.block, &builder.code_db).unwrap();
block.randomness = Fr::from(MOCK_RANDOMNESS);
// let circuit = PiTestCircuit::<Fr, MAX_TXS,
// MAX_CALLDATA>(PiCircuit::new_from_block(&block));
assert!(block.txs.len() <= MAX_TXS);

let (min_k, circuit, instance) =

Check failure on line 396 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused variable: `instance`

error: unused variable: `instance` --> circuit-benchmarks/examples/super_circuit_integration.rs:396:26 | 396 | let (min_k, circuit, instance) = | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_instance`
SuperCircuit::<_, MAX_TXS, MAX_CALLDATA, MAX_RWS>::build_from_circuit_input_builder(
&builder,
)
Expand All @@ -413,7 +413,7 @@
load_circuit_pk(&key_file_name, &params, &circuit).unwrap()
};

let deployment_code = gen_evm_verifier(

Check failure on line 416 in circuit-benchmarks/examples/super_circuit_integration.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused variable: `deployment_code`

error: unused variable: `deployment_code` --> circuit-benchmarks/examples/super_circuit_integration.rs:416:9 | 416 | let deployment_code = gen_evm_verifier( | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_deployment_code`
&params,
pk.get_vk(),
SuperCircuit::<_, MAX_TXS, MAX_CALLDATA, MAX_RWS>::num_instance(),
Expand Down
9 changes: 4 additions & 5 deletions circuit-benchmarks/src/pi_circuit_with_verifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ use snark_verifier::{
verifier::{self, SnarkVerifier},
};
use std::fs::{self, File};
use std::{io::Cursor, io::Write, rc::Rc, time::Instant};
use std::{io::Write, rc::Rc};

type PlonkVerifier = verifier::plonk::PlonkVerifier<KzgAs<Bn256, Gwc19>>;

Expand Down Expand Up @@ -184,14 +184,13 @@ fn new_pi_circuit<const MAX_TXS: usize, const MAX_CALLDATA: usize>(
let randomness = Fr::random(&mut rng);
let rand_rpi = Fr::random(&mut rng);
let public_data = generate_publicdata::<MAX_TXS, MAX_CALLDATA>();
let circuit = PiTestCircuit::<Fr, MAX_TXS, MAX_CALLDATA>(PiCircuit::<Fr>::new(
PiTestCircuit::<Fr, MAX_TXS, MAX_CALLDATA>(PiCircuit::<Fr>::new(
MAX_TXS,
MAX_CALLDATA,
randomness,
rand_rpi,
public_data,
));
circuit
))
}

trait InstancesExport {
Expand Down Expand Up @@ -235,7 +234,7 @@ fn gen_evm_verifier(

File::create("./PlonkEvmVerifier.sol")
.expect("PlonkEvmVerifier.sol")
.write_all(&loader.yul_code().as_bytes())
.write_all(loader.yul_code().as_bytes())
.expect("PlonkEvmVerifier.sol");

evm::compile_yul(&loader.yul_code())
Expand Down
6 changes: 5 additions & 1 deletion mock/src/block.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//! Mock Block definition and builder related methods.

use crate::{MockTransaction, MOCK_BASEFEE, MOCK_CHAIN_ID, MOCK_DIFFICULTY, MOCK_GASLIMIT};
use eth_types::{Address, Block, Bytes, Hash, Transaction, Word, H64, U64};
use eth_types::{Address, Block, Bytes, Hash, Transaction, Word, H256, H64, U64};
use ethers_core::types::Bloom;
use ethers_core::types::OtherFields;

Expand Down Expand Up @@ -32,6 +32,7 @@ pub struct MockBlock {
size: Word,
mix_hash: Hash,
nonce: H64,
withdrawals_root: H256,
// This field is handled here as we assume that all block txs have the same ChainId.
// Also, the field is stored in the block_table since we don't have a chain_config
// structure/table.
Expand Down Expand Up @@ -64,6 +65,7 @@ impl Default for MockBlock {
mix_hash: Hash::zero(),
nonce: H64::zero(),
chain_id: *MOCK_CHAIN_ID,
withdrawals_root: H256::zero(),
}
}
}
Expand Down Expand Up @@ -97,6 +99,7 @@ impl From<MockBlock> for Block<Transaction> {
mix_hash: Some(mock.mix_hash),
nonce: Some(mock.nonce),
base_fee_per_gas: Some(mock.base_fee_per_gas),
withdrawals_root: Some(mock.withdrawals_root),
other: OtherFields::default(),
}
}
Expand Down Expand Up @@ -127,6 +130,7 @@ impl From<MockBlock> for Block<()> {
mix_hash: Some(mock.mix_hash),
nonce: Some(mock.nonce),
base_fee_per_gas: Some(mock.base_fee_per_gas),
withdrawals_root: Some(mock.withdrawals_root),
other: OtherFields::default(),
}
}
Expand Down
29 changes: 17 additions & 12 deletions zkevm-circuits/src/evm_circuit/util/constraint_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,15 +142,15 @@ impl<F: Field> ReversionInfo<F> {
pub struct BaseConstraintBuilder<F> {
pub constraints: Vec<(&'static str, Expression<F>)>,
pub max_degree: usize,
pub condition: Option<Expression<F>>,
pub conditions: Vec<Expression<F>>,
}

impl<F: Field> BaseConstraintBuilder<F> {
pub(crate) fn new(max_degree: usize) -> Self {
BaseConstraintBuilder {
constraints: Vec::new(),
max_degree,
condition: None,
conditions: Vec::new(),
}
}

Expand Down Expand Up @@ -189,27 +189,32 @@ impl<F: Field> BaseConstraintBuilder<F> {
condition: Expression<F>,
constraint: impl FnOnce(&mut Self) -> R,
) -> R {
debug_assert!(
self.condition.is_none(),
"Nested condition is not supported"
);
self.condition = Some(condition);
self.conditions.push(condition);
let ret = constraint(self);
self.condition = None;
self.conditions.pop();
ret
}

pub(crate) fn get_condition(&self) -> Option<Expression<F>> {
if self.conditions.is_empty() {
None
} else {
Some(and::expr(self.conditions.iter()))
}
}

pub(crate) fn get_condition_expr(&self) -> Expression<F> {
self.get_condition().unwrap_or_else(|| 1.expr())
}

pub(crate) fn add_constraints(&mut self, constraints: Vec<(&'static str, Expression<F>)>) {
for (name, constraint) in constraints {
self.add_constraint(name, constraint);
}
}

pub(crate) fn add_constraint(&mut self, name: &'static str, constraint: Expression<F>) {
let constraint = match &self.condition {
Some(condition) => condition.clone() * constraint,
None => constraint,
};
let constraint = self.get_condition_expr() * constraint;
self.validate_degree(constraint.degree(), name);
self.constraints.push((name, constraint));
}
Expand Down
Loading
Loading