diff --git a/zkevm-circuits/src/evm_circuit/execution/gasprice.rs b/zkevm-circuits/src/evm_circuit/execution/gasprice.rs index ef132b5a6d..40afd712d3 100644 --- a/zkevm-circuits/src/evm_circuit/execution/gasprice.rs +++ b/zkevm-circuits/src/evm_circuit/execution/gasprice.rs @@ -72,7 +72,7 @@ impl ExecutionGadget for GasPriceGadget { _: &Call, step: &ExecStep, ) -> Result<(), Error> { - let gas_price = block.rws.sorted_stack_rw()[0].stack_value(); + let gas_price = block.rws[step.rw_indices[1]].stack_value(); self.tx_id .assign(region, offset, Some(F::from(tx.id as u64)))?; diff --git a/zkevm-circuits/src/evm_circuit/execution/origin.rs b/zkevm-circuits/src/evm_circuit/execution/origin.rs index 1c97fc3c16..798fa1dbb4 100644 --- a/zkevm-circuits/src/evm_circuit/execution/origin.rs +++ b/zkevm-circuits/src/evm_circuit/execution/origin.rs @@ -73,7 +73,7 @@ impl ExecutionGadget for OriginGadget { _: &Call, step: &ExecStep, ) -> Result<(), Error> { - let origin = block.rws.sorted_stack_rw()[0].stack_value(); + let origin = block.rws[step.rw_indices[1]].stack_value(); // Assing TxId. self.tx_id diff --git a/zkevm-circuits/src/evm_circuit/witness.rs b/zkevm-circuits/src/evm_circuit/witness.rs index d90396f168..79ee115df1 100644 --- a/zkevm-circuits/src/evm_circuit/witness.rs +++ b/zkevm-circuits/src/evm_circuit/witness.rs @@ -377,48 +377,6 @@ impl std::ops::Index<(RwTableTag, usize)> for RwMap { } } -impl RwMap { - /// These "sorted_xx" methods are used in state circuit - pub fn sorted_memory_rw(&self) -> Vec { - let mut sorted = self.0[&RwTableTag::Memory].clone(); - sorted.sort_by_key(|x| match x { - Rw::Memory { - call_id, - memory_address, - .. - } => (*call_id, *memory_address), - _ => panic!("invalid memory rw"), - }); - sorted - } - - pub fn sorted_stack_rw(&self) -> Vec { - let mut sorted = self.0[&RwTableTag::Stack].clone(); - sorted.sort_by_key(|x| match x { - Rw::Stack { - call_id, - stack_pointer, - .. - } => (*call_id, *stack_pointer), - _ => panic!("invalid stack rw"), - }); - sorted - } - - pub fn sorted_storage_rw(&self) -> Vec { - let mut sorted = self.0[&RwTableTag::AccountStorage].clone(); - sorted.sort_by_key(|x| match x { - Rw::AccountStorage { - account_address, - storage_key, - .. - } => (*account_address, *storage_key), - _ => panic!("invalid storage rw"), - }); - sorted - } -} - #[derive(Clone, Copy, Debug)] pub enum Rw { Start {