diff --git a/aggregator/src/tests/rlc/dynamic_hashes.rs b/aggregator/src/tests/rlc/dynamic_hashes.rs index e7d0b46c74..f7aafad719 100644 --- a/aggregator/src/tests/rlc/dynamic_hashes.rs +++ b/aggregator/src/tests/rlc/dynamic_hashes.rs @@ -191,6 +191,7 @@ 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; diff --git a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs index 3a22ed5657..5bf051cc4f 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(), ); @@ -456,13 +456,12 @@ 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(), 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/blockhash.rs b/zkevm-circuits/src/evm_circuit/execution/blockhash.rs index f77566854c..f2104d373b 100644 --- a/zkevm-circuits/src/evm_circuit/execution/blockhash.rs +++ b/zkevm-circuits/src/evm_circuit/execution/blockhash.rs @@ -79,6 +79,7 @@ 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| { @@ -115,7 +116,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/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, }, ); diff --git a/zkevm-circuits/src/keccak_circuit.rs b/zkevm-circuits/src/keccak_circuit.rs index 2bc37d6aa2..43440894d8 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())) }); @@ -949,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..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![ @@ -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/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..1bdbb18cbf 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()]), } } @@ -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)); @@ -1516,17 +1516,17 @@ 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_rlc = challenges - .evm_word() - .map(|challenge| rlc::value(&output_bytes, challenge)); + // let output_bytes = output_word.to_le_bytes(); + // 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()), ]] @@ -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) 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 ]