From 56bd4290903a623555e462b6ed6c6118aae9d184 Mon Sep 17 00:00:00 2001 From: Dream Wu Date: Wed, 21 Feb 2024 10:45:41 +0800 Subject: [PATCH 01/11] kecck table try to remove output_rlc --- zkevm-circuits/src/keccak_circuit.rs | 30 +++++++++++++--------------- zkevm-circuits/src/sig_circuit.rs | 4 ++-- zkevm-circuits/src/table.rs | 6 +++--- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/zkevm-circuits/src/keccak_circuit.rs b/zkevm-circuits/src/keccak_circuit.rs index 2bc37d6aa2..6ae74742d1 100644 --- a/zkevm-circuits/src/keccak_circuit.rs +++ b/zkevm-circuits/src/keccak_circuit.rs @@ -35,10 +35,8 @@ use crate::{ }, table::{KeccakTable, LookupTable}, util::{ - // word::{self, WordExpr}, - Challenges, - SubCircuit, - SubCircuitConfig, + word::{self, WordExpr}, + Challenges, SubCircuit, SubCircuitConfig, }, witness, }; @@ -112,8 +110,8 @@ impl SubCircuitConfig for KeccakCircuitConfig { let is_final = keccak_table.is_final; let length = keccak_table.input_len; let data_rlc = keccak_table.input_rlc; - let hash_rlc = keccak_table.output_rlc; - //let hash_word = keccak_table.output; + // let hash_rlc = keccak_table.output_rlc; + let hash_word = keccak_table.output; let normalize_3 = array_init::array_init(|_| meta.lookup_table_column()); let normalize_4 = array_init::array_init(|_| meta.lookup_table_column()); @@ -580,18 +578,18 @@ impl SubCircuitConfig for KeccakCircuitConfig { }); } let hash_bytes_le = hash_bytes.into_iter().rev().collect::>(); - let rlc = compose_rlc::expr(&hash_bytes_le, challenges.evm_word()); + // let rlc = compose_rlc::expr(&hash_bytes_le, challenges.evm_word()); cb.condition(start_new_hash, |cb| { - // cb.require_equal_word( - // "hash output check", - // word::Word32::new(hash_bytes_le.try_into().expect("32 limbs")).to_word(), - // hash_word.map(|col| meta.query_advice(col, Rotation::cur())), - // ); - cb.require_equal( - "hash rlc check", - rlc, - meta.query_advice(hash_rlc, Rotation::cur()), + cb.require_equal_word( + "hash output check", + word::Word32::new(hash_bytes_le.try_into().expect("32 limbs")).to_word(), + hash_word.map(|col| meta.query_advice(col, Rotation::cur())), ); + // cb.require_equal( + // "hash rlc check", + // rlc, + // meta.query_advice(hash_rlc, Rotation::cur()), + // ); }); cb.gate(meta.query_fixed(q_round_last, Rotation::cur())) }); diff --git a/zkevm-circuits/src/sig_circuit.rs b/zkevm-circuits/src/sig_circuit.rs index 1349ff0ea0..6f61b56f46 100644 --- a/zkevm-circuits/src/sig_circuit.rs +++ b/zkevm-circuits/src/sig_circuit.rs @@ -182,7 +182,7 @@ impl SubCircuitConfig for SigCircuitConfig { is_enable.clone(), is_enable.clone() * meta.query_advice(rlc_column, Rotation(1)), is_enable.clone() * 64usize.expr(), - is_enable.clone() * meta.query_advice(rlc_column, Rotation(2)), + //is_enable.clone() * meta.query_advice(rlc_column, Rotation(2)), is_enable.clone() * meta.query_advice(rlc_column_word.lo(), Rotation::cur()), is_enable * meta.query_advice(rlc_column_word.hi(), Rotation::cur()), ]; @@ -191,7 +191,7 @@ impl SubCircuitConfig for SigCircuitConfig { meta.query_advice(keccak_table.is_final, Rotation::cur()), meta.query_advice(keccak_table.input_rlc, Rotation::cur()), meta.query_advice(keccak_table.input_len, Rotation::cur()), - meta.query_advice(keccak_table.output_rlc, Rotation::cur()), + //meta.query_advice(keccak_table.output_rlc, Rotation::cur()), meta.query_advice(keccak_table.output.lo(), Rotation::cur()), meta.query_advice(keccak_table.output.hi(), Rotation::cur()), ]; diff --git a/zkevm-circuits/src/table.rs b/zkevm-circuits/src/table.rs index ff92630688..af6c878f7b 100644 --- a/zkevm-circuits/src/table.rs +++ b/zkevm-circuits/src/table.rs @@ -1458,7 +1458,7 @@ pub struct KeccakTable { /// Byte array input length pub input_len: Column, /// RLC of the hash result - pub output_rlc: Column, // RLC of hash of input bytes + // pub output_rlc: Column, // RLC of hash of input bytes /// TODO: finally remove output_rlc and use Word hi lo pub output: word::Word>, } @@ -1470,7 +1470,7 @@ impl LookupTable for KeccakTable { self.is_final.into(), self.input_rlc.into(), self.input_len.into(), - self.output_rlc.into(), + // self.output_rlc.into(), self.output.lo().into(), self.output.hi().into(), ] @@ -1497,7 +1497,7 @@ impl KeccakTable { is_final: meta.advice_column(), input_rlc: meta.advice_column_in(SecondPhase), input_len: meta.advice_column(), - output_rlc: meta.advice_column_in(SecondPhase), + //output_rlc: meta.advice_column_in(SecondPhase), output: word::Word::new([meta.advice_column(), meta.advice_column()]), } } From 70194a464d8cd0ca4e67f389c3025d4fd61f4c97 Mon Sep 17 00:00:00 2001 From: Dream Wu Date: Wed, 21 Feb 2024 11:13:12 +0800 Subject: [PATCH 02/11] update evm circuit: sha3, create , begin_tx etc related to keccak lookup. --- .../src/evm_circuit/execution/begin_tx.rs | 8 ++++---- zkevm-circuits/src/evm_circuit/execution/create.rs | 13 ++++++------- zkevm-circuits/src/evm_circuit/execution/sha3.rs | 4 ++-- zkevm-circuits/src/evm_circuit/table.rs | 4 +--- .../src/evm_circuit/util/constraint_builder.rs | 4 ++-- 5 files changed, 15 insertions(+), 18 deletions(-) diff --git a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs index 3a22ed5657..dca251237d 100644 --- a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs +++ b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs @@ -443,12 +443,12 @@ impl ExecutionGadget for BeginTxGadget { // 1. Handle contract creation transaction. let (init_code_rlc, keccak_code_hash) = cb.condition(tx_is_create.expr(), |cb| { - let caller_nonce_hash_bytes_rlc = - cb.word_rlc(caller_nonce_hash_bytes.limbs.clone().map(|l| l.expr())); + // let caller_nonce_hash_bytes_rlc = + // cb.word_rlc(caller_nonce_hash_bytes.limbs.clone().map(|l| l.expr())); cb.keccak_table_lookup( create.input_rlc(cb), create.input_length(), - caller_nonce_hash_bytes_rlc, + //caller_nonce_hash_bytes_rlc, caller_nonce_hash_bytes.to_word(), ); @@ -462,7 +462,7 @@ impl ExecutionGadget for BeginTxGadget { cb.keccak_table_lookup( init_code_rlc.expr(), tx_call_data_length.expr(), - keccak_code_hash_rlc, + // keccak_code_hash_rlc, keccak_code_hash.to_word(), ); // copy table lookup for init code. diff --git a/zkevm-circuits/src/evm_circuit/execution/create.rs b/zkevm-circuits/src/evm_circuit/execution/create.rs index 1a9796a186..8aaf9a577c 100644 --- a/zkevm-circuits/src/evm_circuit/execution/create.rs +++ b/zkevm-circuits/src/evm_circuit/execution/create.rs @@ -398,26 +398,25 @@ impl ExecutionGadget< and::expr([is_precheck_ok.clone(), not_address_collision.expr()]), |cb| { cb.condition(init_code.has_length(), |cb| { - let keccak_code_hash_rlc = - cb.word_rlc(keccak_code_hash.limbs.clone().map(|l| l.expr())); + // let keccak_code_hash_rlc = + // cb.word_rlc(keccak_code_hash.limbs.clone().map(|l| l.expr())); cb.keccak_table_lookup( //create.input_rlc(cb), init_code_rlc.expr(), //create.input_length(), init_code.length(), - keccak_code_hash_rlc, + // keccak_code_hash_rlc, keccak_code_hash.to_word(), ); }); // keccak table lookup to verify contract address. - let kecck_output_exprs = keccak_output.limbs.clone().map(|l| l.expr()); - let keccak_output_rlc = cb.word_rlc(kecck_output_exprs); + // let kecck_output_exprs = keccak_output.limbs.clone().map(|l| l.expr()); + // let keccak_output_rlc = cb.word_rlc(kecck_output_exprs); cb.keccak_table_lookup( create.input_rlc(cb), create.input_length(), - keccak_output_rlc, - //keccak_output.expr(), + // keccak_output_rlc, keccak_output.to_word(), ); diff --git a/zkevm-circuits/src/evm_circuit/execution/sha3.rs b/zkevm-circuits/src/evm_circuit/execution/sha3.rs index 381b75215d..ff664c5879 100644 --- a/zkevm-circuits/src/evm_circuit/execution/sha3.rs +++ b/zkevm-circuits/src/evm_circuit/execution/sha3.rs @@ -78,11 +78,11 @@ impl ExecutionGadget for Sha3Gadget { cb.require_zero("rlc_acc == 0 for size = 0", rlc_acc.expr()); }); - let output_rlc = cb.word_rlc(sha3_digest.limbs.clone().map(|l| l.expr())); + // let output_rlc = cb.word_rlc(sha3_digest.limbs.clone().map(|l| l.expr())); cb.keccak_table_lookup( rlc_acc.expr(), memory_address.length(), - output_rlc, + //output_rlc, sha3_digest.to_word(), ); diff --git a/zkevm-circuits/src/evm_circuit/table.rs b/zkevm-circuits/src/evm_circuit/table.rs index 535a8b32af..663652a17c 100644 --- a/zkevm-circuits/src/evm_circuit/table.rs +++ b/zkevm-circuits/src/evm_circuit/table.rs @@ -314,7 +314,7 @@ pub(crate) enum Lookup { input_len: Expression, /// Output (hash) until this state. This is the RLC representation of /// the final output keccak256 hash of the input. - output_rlc: Expression, + // output_rlc: Expression, output: Word>, }, /// Lookup to sha256 table. @@ -494,14 +494,12 @@ impl Lookup { Self::KeccakTable { input_rlc, input_len, - output_rlc, output, } => vec![ 1.expr(), // q_enable 1.expr(), // is_final input_rlc.clone(), input_len.clone(), - output_rlc.clone(), output.lo(), output.hi(), ], diff --git a/zkevm-circuits/src/evm_circuit/util/constraint_builder.rs b/zkevm-circuits/src/evm_circuit/util/constraint_builder.rs index 4ddfad1118..89bab8ca7a 100644 --- a/zkevm-circuits/src/evm_circuit/util/constraint_builder.rs +++ b/zkevm-circuits/src/evm_circuit/util/constraint_builder.rs @@ -1678,7 +1678,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { &mut self, input_rlc: Expression, input_len: Expression, - output_rlc: Expression, + //output_rlc: Expression, output: Word>, ) { self.add_lookup( @@ -1686,7 +1686,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { Lookup::KeccakTable { input_rlc, input_len, - output_rlc, + //output_rlc, output, }, ); From c68b9f2a81857fb6bbc9e108218d64383095c27b Mon Sep 17 00:00:00 2001 From: Dream Wu Date: Wed, 21 Feb 2024 16:02:31 +0800 Subject: [PATCH 03/11] disable test_hash_circuit & test_aggregation_circuit which fail at the moment --- aggregator/src/tests/aggregation.rs | 1 + aggregator/src/tests/rlc/dynamic_hashes.rs | 19 ++++++++++--------- .../src/evm_circuit/execution/begin_tx.rs | 3 +-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/aggregator/src/tests/aggregation.rs b/aggregator/src/tests/aggregation.rs index 6df4c0f0ad..a120d38f6a 100644 --- a/aggregator/src/tests/aggregation.rs +++ b/aggregator/src/tests/aggregation.rs @@ -11,6 +11,7 @@ use crate::{ tests::mock_chunk::MockChunkCircuit, ChunkHash, }; +#[ignore = "TODO: renable it later after other test fixed for keccal rlc removal"] #[test] fn test_aggregation_circuit() { env_logger::init(); diff --git a/aggregator/src/tests/rlc/dynamic_hashes.rs b/aggregator/src/tests/rlc/dynamic_hashes.rs index e7d0b46c74..ac3d7b17df 100644 --- a/aggregator/src/tests/rlc/dynamic_hashes.rs +++ b/aggregator/src/tests/rlc/dynamic_hashes.rs @@ -191,15 +191,16 @@ impl Circuit for DynamicHashCircuit { impl CircuitExt for DynamicHashCircuit {} -#[test] -fn test_hash_circuit() { - const LEN: usize = 100; - let a = (0..LEN).map(|x| x as u8).collect::>(); - let circuit = DynamicHashCircuit { inputs: a }; - let prover = MockProver::run(LOG_DEGREE, &circuit, vec![]).unwrap(); - prover.assert_satisfied_par(); - println!("circuit satisfied"); -} +// TODO: enable it later after other test pass. +// #[test] +// fn test_hash_circuit() { +// const LEN: usize = 100; +// let a = (0..LEN).map(|x| x as u8).collect::>(); +// let circuit = DynamicHashCircuit { inputs: a }; +// let prover = MockProver::run(LOG_DEGREE, &circuit, vec![]).unwrap(); +// prover.assert_satisfied_par(); +// println!("circuit satisfied"); +//} #[ignore = "it takes too much time"] #[test] diff --git a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs index dca251237d..dd88b62ee0 100644 --- a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs +++ b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs @@ -456,8 +456,7 @@ impl ExecutionGadget for BeginTxGadget { let keccak_code_hash = cb.query_word32(); let init_code_rlc = cb.query_cell_phase2(); - let keccak_code_hash_rlc = - cb.word_rlc(keccak_code_hash.limbs.clone().map(|l| l.expr())); + // keccak table lookup for init code. cb.keccak_table_lookup( init_code_rlc.expr(), From 506e311599b35cb3328004eb9d8e7f4381010e41 Mon Sep 17 00:00:00 2001 From: Dream Wu Date: Mon, 26 Feb 2024 10:59:13 +0800 Subject: [PATCH 04/11] update keccaktable:assignments --- zkevm-circuits/src/table.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zkevm-circuits/src/table.rs b/zkevm-circuits/src/table.rs index af6c878f7b..e4bf2111d4 100644 --- a/zkevm-circuits/src/table.rs +++ b/zkevm-circuits/src/table.rs @@ -1507,7 +1507,7 @@ impl KeccakTable { pub fn assignments( input: &[u8], challenges: &Challenges>, - ) -> Vec<[Value; 6]> { + ) -> Vec<[Value; 5]> { let input_rlc = challenges .keccak_input() .map(|challenge| rlc::value(input.iter().rev(), challenge)); @@ -1517,16 +1517,16 @@ impl KeccakTable { let output = keccak.digest(); let output_word = Word::from_big_endian(output.as_slice()); let output_bytes = output_word.to_le_bytes(); - let output_rlc = challenges - .evm_word() - .map(|challenge| rlc::value(&output_bytes, challenge)); + // let output_rlc = challenges + // .evm_word() + // .map(|challenge| rlc::value(&output_bytes, challenge)); let output_lo_hi = word::Word::from(output_word); vec![[ Value::known(F::one()), input_rlc, Value::known(input_len), - output_rlc, + // output_rlc, Value::known(output_lo_hi.lo()), Value::known(output_lo_hi.hi()), ]] From 31f43773f7309b3ccc4c1aafb57510bb7e1c6482 Mon Sep 17 00:00:00 2001 From: Dream Wu Date: Mon, 26 Feb 2024 11:55:14 +0800 Subject: [PATCH 05/11] update pi circuit, fix keccak row --- zkevm-circuits/src/evm_circuit/execution/begin_tx.rs | 2 +- zkevm-circuits/src/keccak_circuit.rs | 2 +- zkevm-circuits/src/pi_circuit.rs | 2 +- zkevm-circuits/src/table.rs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs index dd88b62ee0..5bf051cc4f 100644 --- a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs +++ b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs @@ -461,7 +461,7 @@ impl ExecutionGadget for BeginTxGadget { cb.keccak_table_lookup( init_code_rlc.expr(), tx_call_data_length.expr(), - // keccak_code_hash_rlc, + // keccak_code_hash_rlc, keccak_code_hash.to_word(), ); // copy table lookup for init code. diff --git a/zkevm-circuits/src/keccak_circuit.rs b/zkevm-circuits/src/keccak_circuit.rs index 6ae74742d1..43440894d8 100644 --- a/zkevm-circuits/src/keccak_circuit.rs +++ b/zkevm-circuits/src/keccak_circuit.rs @@ -947,7 +947,7 @@ impl KeccakCircuitConfig { Value::known(F::from(row.is_final as u64)), row.data_rlc, Value::known(F::from(row.length as u64)), - row.hash_rlc, + //row.hash_rlc, row.hash.lo(), row.hash.hi(), ], diff --git a/zkevm-circuits/src/pi_circuit.rs b/zkevm-circuits/src/pi_circuit.rs index 731a45a29b..3ff50f7a34 100644 --- a/zkevm-circuits/src/pi_circuit.rs +++ b/zkevm-circuits/src/pi_circuit.rs @@ -654,7 +654,7 @@ impl SubCircuitConfig for PiCircuitConfig { 1.expr(), // is_final = true rpi_rlc, rpi_length, - output, + //output, output_word.lo(), output_word.hi(), ]; diff --git a/zkevm-circuits/src/table.rs b/zkevm-circuits/src/table.rs index e4bf2111d4..61e36a9ba9 100644 --- a/zkevm-circuits/src/table.rs +++ b/zkevm-circuits/src/table.rs @@ -1539,7 +1539,7 @@ impl KeccakTable { &self, region: &mut Region, offset: usize, - values: [Value; 6], + values: [Value; 5], ) -> Result>, Error> { let mut res = vec![]; for (&column, value) in >::advice_columns(self) From 58da073fe510f77cd00ca8ab131154fbf7587e8a Mon Sep 17 00:00:00 2001 From: Dream Wu Date: Mon, 26 Feb 2024 17:05:34 +0800 Subject: [PATCH 06/11] disable some super circuit test to let other tests go ahead --- .../src/evm_circuit/execution/blockhash.rs | 2 +- zkevm-circuits/src/super_circuit/test.rs | 128 +++++++++--------- zkevm-circuits/src/table.rs | 2 +- 3 files changed, 66 insertions(+), 66 deletions(-) diff --git a/zkevm-circuits/src/evm_circuit/execution/blockhash.rs b/zkevm-circuits/src/evm_circuit/execution/blockhash.rs index f77566854c..9a97f9e26d 100644 --- a/zkevm-circuits/src/evm_circuit/execution/blockhash.rs +++ b/zkevm-circuits/src/evm_circuit/execution/blockhash.rs @@ -115,7 +115,7 @@ impl ExecutionGadget for BlockHashGadget { .unwrap(), ), (2 * N_BYTES_U64).expr(), - block_hash_rlc, + //block_hash_rlc, block_hash.to_word(), ); }); diff --git a/zkevm-circuits/src/super_circuit/test.rs b/zkevm-circuits/src/super_circuit/test.rs index 7688643673..d8d89df0bc 100644 --- a/zkevm-circuits/src/super_circuit/test.rs +++ b/zkevm-circuits/src/super_circuit/test.rs @@ -421,67 +421,67 @@ fn precomiple_super_circuits_params(max_txs: usize, max_calldata: usize) -> Circ } } -#[ignore] -#[cfg(feature = "scroll")] -#[test] -fn serial_test_super_circuit_ec_ops_txs() { - const MAX_TXS: usize = 4; - const MAX_CALLDATA: usize = 0x320; - - let block = precompile_block_trace::block_ec_ops(); - let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); - - test_super_circuit::(block, circuits_params); -} - -#[ignore] -#[cfg(feature = "scroll")] -#[test] -fn serial_test_super_circuit_precompile_oog() { - const MAX_TXS: usize = 4; - const MAX_CALLDATA: usize = 0x260; - - let block = precompile_block_trace::block_precompile_oog(); - let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); - - test_super_circuit::(block, circuits_params); -} - -#[ignore] -#[cfg(feature = "scroll")] -#[test] -fn serial_test_super_circuit_invalid_precompile() { - const MAX_TXS: usize = 3; - const MAX_CALLDATA: usize = 0x8a6; - - let block = precompile_block_trace::block_invalid_precompile(); - let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); - - test_super_circuit::(block, circuits_params); -} - -#[ignore] -#[cfg(feature = "scroll")] -#[test] -fn serial_test_super_circuit_precompile_invalid_ec_pairing_fq_overflow() { - const MAX_TXS: usize = 1; - const MAX_CALLDATA: usize = 0x180; - - let block = precompile_block_trace::block_precompile_invalid_ec_pairing_fq_overflow(); - let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); - - test_super_circuit::(block, circuits_params); -} - -#[ignore] -#[cfg(feature = "scroll")] -#[test] -fn serial_test_super_circuit_precompile_sha256() { - const MAX_TXS: usize = 1; - const MAX_CALLDATA: usize = 0x180; - - let block = precompile_block_trace::block_precompile_sha256(); - let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); - - test_super_circuit::(block, circuits_params); -} +// #[ignore] +// #[cfg(feature = "scroll")] +// #[test] +// fn serial_test_super_circuit_ec_ops_txs() { +// const MAX_TXS: usize = 4; +// const MAX_CALLDATA: usize = 0x320; + +// let block = precompile_block_trace::block_ec_ops(); +// let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); + +// test_super_circuit::(block, circuits_params); +// } + +// #[ignore] +// #[cfg(feature = "scroll")] +// #[test] +// fn serial_test_super_circuit_precompile_oog() { +// const MAX_TXS: usize = 4; +// const MAX_CALLDATA: usize = 0x260; + +// let block = precompile_block_trace::block_precompile_oog(); +// let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); + +// test_super_circuit::(block, circuits_params); +// } + +// #[ignore] +// #[cfg(feature = "scroll")] +// #[test] +// fn serial_test_super_circuit_invalid_precompile() { +// const MAX_TXS: usize = 3; +// const MAX_CALLDATA: usize = 0x8a6; + +// let block = precompile_block_trace::block_invalid_precompile(); +// let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); + +// test_super_circuit::(block, circuits_params); +// } + +// #[ignore] +// #[cfg(feature = "scroll")] +// #[test] +// fn serial_test_super_circuit_precompile_invalid_ec_pairing_fq_overflow() { +// const MAX_TXS: usize = 1; +// const MAX_CALLDATA: usize = 0x180; + +// let block = precompile_block_trace::block_precompile_invalid_ec_pairing_fq_overflow(); +// let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); + +// test_super_circuit::(block, circuits_params); +// } + +// #[ignore] +// #[cfg(feature = "scroll")] +// #[test] +// fn serial_test_super_circuit_precompile_sha256() { +// const MAX_TXS: usize = 1; +// const MAX_CALLDATA: usize = 0x180; + +// let block = precompile_block_trace::block_precompile_sha256(); +// let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); + +// test_super_circuit::(block, circuits_params); +// } diff --git a/zkevm-circuits/src/table.rs b/zkevm-circuits/src/table.rs index 61e36a9ba9..1bdbb18cbf 100644 --- a/zkevm-circuits/src/table.rs +++ b/zkevm-circuits/src/table.rs @@ -1516,7 +1516,7 @@ impl KeccakTable { keccak.update(input); let output = keccak.digest(); let output_word = Word::from_big_endian(output.as_slice()); - let output_bytes = output_word.to_le_bytes(); + // let output_bytes = output_word.to_le_bytes(); // let output_rlc = challenges // .evm_word() // .map(|challenge| rlc::value(&output_bytes, challenge)); From 5e717a5d838bd6fb87503f573a44f1d6e27125be Mon Sep 17 00:00:00 2001 From: Dream Wu Date: Sat, 2 Mar 2024 12:19:31 +0800 Subject: [PATCH 07/11] remove tx_table.value.lo as out_rlc from tx circuit keccak lookup --- zkevm-circuits/src/tx_circuit.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/zkevm-circuits/src/tx_circuit.rs b/zkevm-circuits/src/tx_circuit.rs index 78d46696ce..9458fb08d2 100644 --- a/zkevm-circuits/src/tx_circuit.rs +++ b/zkevm-circuits/src/tx_circuit.rs @@ -2390,7 +2390,6 @@ impl TxCircuitConfig { 1.expr(), // is_final meta.query_advice(tx_table.value.lo(), Rotation::next()), // input_rlc meta.query_advice(tx_table.value.lo(), Rotation::cur()), // input_len - meta.query_advice(tx_table.value.lo(), Rotation(2)), // output_rlc meta.query_advice(tx_hash_word.lo(), Rotation::cur()), // output_word lo meta.query_advice(tx_hash_word.hi(), Rotation::cur()), // output_word hi ] From cdb46539490a3598bbc76187b6115f762a100fe4 Mon Sep 17 00:00:00 2001 From: Dream Wu Date: Sat, 2 Mar 2024 22:28:16 +0800 Subject: [PATCH 08/11] re-enable super circuit tests --- zkevm-circuits/src/pi_circuit.rs | 2 +- zkevm-circuits/src/super_circuit/test.rs | 128 +++++++++++------------ 2 files changed, 65 insertions(+), 65 deletions(-) diff --git a/zkevm-circuits/src/pi_circuit.rs b/zkevm-circuits/src/pi_circuit.rs index 3ff50f7a34..5e1f894777 100644 --- a/zkevm-circuits/src/pi_circuit.rs +++ b/zkevm-circuits/src/pi_circuit.rs @@ -646,7 +646,7 @@ impl SubCircuitConfig for PiCircuitConfig { let rpi_rlc = meta.query_advice(rpi, Rotation::cur()); let rpi_length = meta.query_advice(rpi_length_acc, Rotation::cur()); - let output = meta.query_advice(rpi_rlc_acc, Rotation::cur()); + // let output = meta.query_advice(rpi_rlc_acc, Rotation::cur()); let output_word = rpi_word.query_advice(meta, Rotation::cur()); let input_exprs = vec![ diff --git a/zkevm-circuits/src/super_circuit/test.rs b/zkevm-circuits/src/super_circuit/test.rs index d8d89df0bc..7688643673 100644 --- a/zkevm-circuits/src/super_circuit/test.rs +++ b/zkevm-circuits/src/super_circuit/test.rs @@ -421,67 +421,67 @@ fn precomiple_super_circuits_params(max_txs: usize, max_calldata: usize) -> Circ } } -// #[ignore] -// #[cfg(feature = "scroll")] -// #[test] -// fn serial_test_super_circuit_ec_ops_txs() { -// const MAX_TXS: usize = 4; -// const MAX_CALLDATA: usize = 0x320; - -// let block = precompile_block_trace::block_ec_ops(); -// let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); - -// test_super_circuit::(block, circuits_params); -// } - -// #[ignore] -// #[cfg(feature = "scroll")] -// #[test] -// fn serial_test_super_circuit_precompile_oog() { -// const MAX_TXS: usize = 4; -// const MAX_CALLDATA: usize = 0x260; - -// let block = precompile_block_trace::block_precompile_oog(); -// let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); - -// test_super_circuit::(block, circuits_params); -// } - -// #[ignore] -// #[cfg(feature = "scroll")] -// #[test] -// fn serial_test_super_circuit_invalid_precompile() { -// const MAX_TXS: usize = 3; -// const MAX_CALLDATA: usize = 0x8a6; - -// let block = precompile_block_trace::block_invalid_precompile(); -// let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); - -// test_super_circuit::(block, circuits_params); -// } - -// #[ignore] -// #[cfg(feature = "scroll")] -// #[test] -// fn serial_test_super_circuit_precompile_invalid_ec_pairing_fq_overflow() { -// const MAX_TXS: usize = 1; -// const MAX_CALLDATA: usize = 0x180; - -// let block = precompile_block_trace::block_precompile_invalid_ec_pairing_fq_overflow(); -// let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); - -// test_super_circuit::(block, circuits_params); -// } - -// #[ignore] -// #[cfg(feature = "scroll")] -// #[test] -// fn serial_test_super_circuit_precompile_sha256() { -// const MAX_TXS: usize = 1; -// const MAX_CALLDATA: usize = 0x180; - -// let block = precompile_block_trace::block_precompile_sha256(); -// let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); - -// test_super_circuit::(block, circuits_params); -// } +#[ignore] +#[cfg(feature = "scroll")] +#[test] +fn serial_test_super_circuit_ec_ops_txs() { + const MAX_TXS: usize = 4; + const MAX_CALLDATA: usize = 0x320; + + let block = precompile_block_trace::block_ec_ops(); + let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); + + test_super_circuit::(block, circuits_params); +} + +#[ignore] +#[cfg(feature = "scroll")] +#[test] +fn serial_test_super_circuit_precompile_oog() { + const MAX_TXS: usize = 4; + const MAX_CALLDATA: usize = 0x260; + + let block = precompile_block_trace::block_precompile_oog(); + let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); + + test_super_circuit::(block, circuits_params); +} + +#[ignore] +#[cfg(feature = "scroll")] +#[test] +fn serial_test_super_circuit_invalid_precompile() { + const MAX_TXS: usize = 3; + const MAX_CALLDATA: usize = 0x8a6; + + let block = precompile_block_trace::block_invalid_precompile(); + let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); + + test_super_circuit::(block, circuits_params); +} + +#[ignore] +#[cfg(feature = "scroll")] +#[test] +fn serial_test_super_circuit_precompile_invalid_ec_pairing_fq_overflow() { + const MAX_TXS: usize = 1; + const MAX_CALLDATA: usize = 0x180; + + let block = precompile_block_trace::block_precompile_invalid_ec_pairing_fq_overflow(); + let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); + + test_super_circuit::(block, circuits_params); +} + +#[ignore] +#[cfg(feature = "scroll")] +#[test] +fn serial_test_super_circuit_precompile_sha256() { + const MAX_TXS: usize = 1; + const MAX_CALLDATA: usize = 0x180; + + let block = precompile_block_trace::block_precompile_sha256(); + let circuits_params = precomiple_super_circuits_params(MAX_TXS, MAX_CALLDATA); + + test_super_circuit::(block, circuits_params); +} From 88072e2ef7eb741ba8e889377efcb8cd524f0334 Mon Sep 17 00:00:00 2001 From: Dream Wu Date: Mon, 4 Mar 2024 10:38:28 +0800 Subject: [PATCH 09/11] enable aggregation test --- aggregator/src/tests/aggregation.rs | 1 - aggregator/src/tests/rlc/dynamic_hashes.rs | 18 +++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/aggregator/src/tests/aggregation.rs b/aggregator/src/tests/aggregation.rs index a120d38f6a..6df4c0f0ad 100644 --- a/aggregator/src/tests/aggregation.rs +++ b/aggregator/src/tests/aggregation.rs @@ -11,7 +11,6 @@ use crate::{ tests::mock_chunk::MockChunkCircuit, ChunkHash, }; -#[ignore = "TODO: renable it later after other test fixed for keccal rlc removal"] #[test] fn test_aggregation_circuit() { env_logger::init(); diff --git a/aggregator/src/tests/rlc/dynamic_hashes.rs b/aggregator/src/tests/rlc/dynamic_hashes.rs index ac3d7b17df..f7aafad719 100644 --- a/aggregator/src/tests/rlc/dynamic_hashes.rs +++ b/aggregator/src/tests/rlc/dynamic_hashes.rs @@ -192,15 +192,15 @@ impl Circuit for DynamicHashCircuit { impl CircuitExt for DynamicHashCircuit {} // TODO: enable it later after other test pass. -// #[test] -// fn test_hash_circuit() { -// const LEN: usize = 100; -// let a = (0..LEN).map(|x| x as u8).collect::>(); -// let circuit = DynamicHashCircuit { inputs: a }; -// let prover = MockProver::run(LOG_DEGREE, &circuit, vec![]).unwrap(); -// prover.assert_satisfied_par(); -// println!("circuit satisfied"); -//} +#[test] +fn test_hash_circuit() { + const LEN: usize = 100; + let a = (0..LEN).map(|x| x as u8).collect::>(); + let circuit = DynamicHashCircuit { inputs: a }; + let prover = MockProver::run(LOG_DEGREE, &circuit, vec![]).unwrap(); + prover.assert_satisfied_par(); + println!("circuit satisfied"); +} #[ignore = "it takes too much time"] #[test] From 691feebae6d3411e903cdde1ce8c6e4cf4ff934c Mon Sep 17 00:00:00 2001 From: Dream Wu Date: Mon, 4 Mar 2024 11:28:24 +0800 Subject: [PATCH 10/11] clippy fix --- zkevm-circuits/src/evm_circuit/execution/blockhash.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/zkevm-circuits/src/evm_circuit/execution/blockhash.rs b/zkevm-circuits/src/evm_circuit/execution/blockhash.rs index 9a97f9e26d..2b37e32d09 100644 --- a/zkevm-circuits/src/evm_circuit/execution/blockhash.rs +++ b/zkevm-circuits/src/evm_circuit/execution/blockhash.rs @@ -79,7 +79,6 @@ impl ExecutionGadget for BlockHashGadget { let is_valid = and::expr([block_number.lt_cap(), diff_lt.expr()]); //let block_hash = cb.query_word_unchecked(); // use in stage2 after block table --> word let block_hash = cb.query_word32(); - let block_hash_rlc = cb.word_rlc(block_hash.limbs.clone().map(|ref l| l.expr())); cb.condition(is_valid.expr(), |cb| { // For non-scroll, lookup for the block hash. From 92c73e06fc1b86d03f7f21209a4fac65c84090b7 Mon Sep 17 00:00:00 2001 From: Dream Wu Date: Mon, 4 Mar 2024 11:55:17 +0800 Subject: [PATCH 11/11] ci fix --- zkevm-circuits/src/evm_circuit/execution/blockhash.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zkevm-circuits/src/evm_circuit/execution/blockhash.rs b/zkevm-circuits/src/evm_circuit/execution/blockhash.rs index 2b37e32d09..f2104d373b 100644 --- a/zkevm-circuits/src/evm_circuit/execution/blockhash.rs +++ b/zkevm-circuits/src/evm_circuit/execution/blockhash.rs @@ -79,6 +79,8 @@ impl ExecutionGadget for BlockHashGadget { let is_valid = and::expr([block_number.lt_cap(), diff_lt.expr()]); //let block_hash = cb.query_word_unchecked(); // use in stage2 after block table --> word let block_hash = cb.query_word32(); + #[cfg(not(feature = "scroll"))] + let block_hash_rlc = cb.word_rlc(block_hash.limbs.clone().map(|ref l| l.expr())); cb.condition(is_valid.expr(), |cb| { // For non-scroll, lookup for the block hash.