diff --git a/Cargo.lock b/Cargo.lock index fe058a3e7c..f4b998cc6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2191,7 +2191,7 @@ dependencies = [ [[package]] name = "halo2_proofs" version = "1.1.0" -source = "git+https://github.com/scroll-tech/halo2.git?branch=v1.1#6c5e9eec5088dc8b4a23edcdd1eaf8705b5fc7dc" +source = "git+https://github.com/scroll-tech/halo2.git?branch=v1.1#e5ddf67e5ae16be38d6368ed355c7c41906272ab" dependencies = [ "ark-std 0.3.0", "blake2b_simd", @@ -3351,17 +3351,18 @@ dependencies = [ [[package]] name = "poseidon-base" version = "0.1.0" -source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main#7b96835c6201afdbfaf3d13d641efbaaf5db2d20" +source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main#6cc36ab9dfa153f554ff7b84305f39838366a8df" dependencies = [ "bitvec", "halo2curves", "lazy_static", + "once_cell", ] [[package]] name = "poseidon-circuit" version = "0.1.0" -source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main#7b96835c6201afdbfaf3d13d641efbaaf5db2d20" +source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main#6cc36ab9dfa153f554ff7b84305f39838366a8df" dependencies = [ "ff", "halo2_proofs", diff --git a/bus-mapping/src/circuit_input_builder/block.rs b/bus-mapping/src/circuit_input_builder/block.rs index ca3b478e94..75159a6972 100644 --- a/bus-mapping/src/circuit_input_builder/block.rs +++ b/bus-mapping/src/circuit_input_builder/block.rs @@ -257,7 +257,7 @@ impl Blocks { impl Blocks { /// Push a copy event to the block. - pub fn add_copy_event(&mut self, event: CopyEvent) { + pub fn add_copy_event(&mut self, event: CopyEvent) -> Result<(), Error> { self.copy_counter += event.full_length() as usize; self.copy_events.push(event); // Each byte needs 2 rows @@ -265,8 +265,9 @@ impl Blocks { if self.copy_counter > 500_000 && cfg!(feature = "strict-ccc") { log::error!("copy event len overflow {}", self.copy_counter); - panic!("copy event len overflow"); + return Err(Error::InvalidGethExecTrace("copy event len overflow")); } + Ok(()) } fn copy_event_total_len(&self) -> usize { self.copy_events diff --git a/bus-mapping/src/circuit_input_builder/input_state_ref.rs b/bus-mapping/src/circuit_input_builder/input_state_ref.rs index dd20af61dd..7db59310ee 100644 --- a/bus-mapping/src/circuit_input_builder/input_state_ref.rs +++ b/bus-mapping/src/circuit_input_builder/input_state_ref.rs @@ -1629,9 +1629,13 @@ impl<'a> CircuitInputStateRef<'a> { } /// Push a copy event to the state. - pub fn push_copy(&mut self, step: &mut ExecStep, event: CopyEvent) { + pub fn push_copy(&mut self, step: &mut ExecStep, event: CopyEvent) -> Result<(), Error> { step.copy_rw_counter_delta += event.rw_counter_delta(); - self.block.add_copy_event(event); + let result = self.block.add_copy_event(event); + if result.is_err() { + log::error!("push_copy failed {result:?}, step {step:?}"); + } + result } /// Push a exponentiation event to the state. diff --git a/bus-mapping/src/evm/opcodes/begin_end_tx.rs b/bus-mapping/src/evm/opcodes/begin_end_tx.rs index 54db11ce01..39d3f5f5e2 100644 --- a/bus-mapping/src/evm/opcodes/begin_end_tx.rs +++ b/bus-mapping/src/evm/opcodes/begin_end_tx.rs @@ -319,7 +319,7 @@ pub fn gen_begin_tx_steps(state: &mut CircuitInputStateRef) -> Result Result Opcode for CallOpcode { copy_bytes: CopyBytes::new(copy_steps, None, None), access_list: vec![], }, - ); + )?; Some(input_bytes) } else { None @@ -446,7 +446,7 @@ impl Opcode for CallOpcode { copy_bytes: CopyBytes::new(copy_steps, None, Some(prev_bytes)), access_list: vec![], }, - ); + )?; Some(output_bytes) } else { None @@ -486,7 +486,7 @@ impl Opcode for CallOpcode { ), access_list: vec![], }, - ); + )?; Some(returned_bytes) } else { None diff --git a/bus-mapping/src/evm/opcodes/codecopy.rs b/bus-mapping/src/evm/opcodes/codecopy.rs index f6cf7c5ebf..31e4356a4b 100644 --- a/bus-mapping/src/evm/opcodes/codecopy.rs +++ b/bus-mapping/src/evm/opcodes/codecopy.rs @@ -37,7 +37,7 @@ impl Opcode for Codecopy { length.as_u64(), &mut exec_step, )?; - state.push_copy(&mut exec_step, copy_event); + state.push_copy(&mut exec_step, copy_event)?; Ok(vec![exec_step]) } } diff --git a/bus-mapping/src/evm/opcodes/create.rs b/bus-mapping/src/evm/opcodes/create.rs index 63b6e5fe2e..ba48e4280d 100644 --- a/bus-mapping/src/evm/opcodes/create.rs +++ b/bus-mapping/src/evm/opcodes/create.rs @@ -398,7 +398,7 @@ fn handle_copy( copy_bytes: CopyBytes::new(copy_steps, None, None), access_list: vec![], }, - ); + )?; Ok((initcode, keccak_code_hash, code_hash)) } diff --git a/bus-mapping/src/evm/opcodes/extcodecopy.rs b/bus-mapping/src/evm/opcodes/extcodecopy.rs index 256cd90bad..bb59aaa4e9 100644 --- a/bus-mapping/src/evm/opcodes/extcodecopy.rs +++ b/bus-mapping/src/evm/opcodes/extcodecopy.rs @@ -80,7 +80,7 @@ impl Opcode for Extcodecopy { length, &mut exec_step, )?; - state.push_copy(&mut exec_step, copy_event); + state.push_copy(&mut exec_step, copy_event)?; Ok(vec![exec_step]) } } diff --git a/bus-mapping/src/evm/opcodes/logs.rs b/bus-mapping/src/evm/opcodes/logs.rs index d187e6ded3..54529a2730 100644 --- a/bus-mapping/src/evm/opcodes/logs.rs +++ b/bus-mapping/src/evm/opcodes/logs.rs @@ -95,7 +95,7 @@ impl Opcode for Log { // https://github.com/ethereum/go-ethereum/blob/b80f05bde2c4e93ae64bb3813b6d67266b5fc0e6/core/vm/instructions.go#L850 let copy_event = gen_copy_event(state, mstart.low_u64(), msize.low_u64(), &mut exec_step)?; - state.push_copy(&mut exec_step, copy_event); + state.push_copy(&mut exec_step, copy_event)?; state.tx_ctx.log_id += 1; } diff --git a/bus-mapping/src/evm/opcodes/mcopy.rs b/bus-mapping/src/evm/opcodes/mcopy.rs index dba31ddb29..34ab01b185 100644 --- a/bus-mapping/src/evm/opcodes/mcopy.rs +++ b/bus-mapping/src/evm/opcodes/mcopy.rs @@ -37,7 +37,7 @@ impl Opcode for MCopy { length.as_u64(), &mut exec_step, )?; - state.push_copy(&mut exec_step, copy_event); + state.push_copy(&mut exec_step, copy_event)?; Ok(vec![exec_step]) } } diff --git a/bus-mapping/src/evm/opcodes/return_revert.rs b/bus-mapping/src/evm/opcodes/return_revert.rs index b3023ea80c..0f88a1dd6a 100644 --- a/bus-mapping/src/evm/opcodes/return_revert.rs +++ b/bus-mapping/src/evm/opcodes/return_revert.rs @@ -296,7 +296,7 @@ fn handle_copy( copy_bytes: CopyBytes::new(read_steps, Some(write_steps), Some(dst_data_prev)), access_list: vec![], }, - ); + )?; Ok(()) } @@ -363,7 +363,7 @@ fn handle_create( copy_bytes: CopyBytes::new(copy_steps, None, None), access_list: vec![], }, - ); + )?; Ok(AccountCodeInfo { keccak_hash, diff --git a/bus-mapping/src/evm/opcodes/returndatacopy.rs b/bus-mapping/src/evm/opcodes/returndatacopy.rs index 8243af1c09..da8cadf8c0 100644 --- a/bus-mapping/src/evm/opcodes/returndatacopy.rs +++ b/bus-mapping/src/evm/opcodes/returndatacopy.rs @@ -61,7 +61,7 @@ impl Opcode for Returndatacopy { } let copy_event = gen_copy_event(state, memory_offset, data_offset, length, &mut exec_step)?; - state.push_copy(&mut exec_step, copy_event); + state.push_copy(&mut exec_step, copy_event)?; Ok(vec![exec_step]) } } diff --git a/bus-mapping/src/evm/opcodes/sha3.rs b/bus-mapping/src/evm/opcodes/sha3.rs index 4db828acdb..583475142e 100644 --- a/bus-mapping/src/evm/opcodes/sha3.rs +++ b/bus-mapping/src/evm/opcodes/sha3.rs @@ -94,7 +94,7 @@ impl Opcode for Sha3 { copy_bytes: CopyBytes::new(copy_steps, None, None), access_list: vec![], }, - ); + )?; Ok(vec![exec_step]) } diff --git a/zkevm-circuits/src/witness/mpt.rs b/zkevm-circuits/src/witness/mpt.rs index 0f242e7444..6281dec824 100644 --- a/zkevm-circuits/src/witness/mpt.rs +++ b/zkevm-circuits/src/witness/mpt.rs @@ -183,13 +183,14 @@ impl MptUpdates { let root_pair2 = (self.old_root, self.new_root); if root_pair2 != root_pair { - log::error!( + log::warn!( "roots non consistent ({:#x},{:#x}) vs ({:#x},{:#x})", root_pair.0, root_pair.1, root_pair2.0, root_pair2.1 ); + #[cfg(debug_assertions)] wit_gen.dump( self.updates .iter()