From 23ca456fa242637cee942f30ed3493541168e824 Mon Sep 17 00:00:00 2001 From: Ho Vei Date: Tue, 23 Jan 2024 16:28:09 +0800 Subject: [PATCH] enable oog handling for sha256 precompile --- .../src/circuit_input_builder/input_state_ref.rs | 4 +--- .../src/evm_circuit/execution/error_oog_precompile.rs | 11 ++++++++++- 2 files changed, 11 insertions(+), 4 deletions(-) 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 c08c1edbab..0b5ecb59b4 100644 --- a/bus-mapping/src/circuit_input_builder/input_state_ref.rs +++ b/bus-mapping/src/circuit_input_builder/input_state_ref.rs @@ -1768,9 +1768,7 @@ impl<'a> CircuitInputStateRef<'a> { if is_precompiled(&code_address) { let precompile_call: PrecompileCalls = code_address[19].into(); match precompile_call { - PrecompileCalls::Sha256 - | PrecompileCalls::Ripemd160 - | PrecompileCalls::Blake2F => { + PrecompileCalls::Ripemd160 | PrecompileCalls::Blake2F => { // Log the precompile address and gas left. Since this failure is mainly // caused by out of gas. log::trace!( diff --git a/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs b/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs index 5f6667afe5..467acf3c4a 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs @@ -73,7 +73,11 @@ impl ExecutionGadget for ErrorOOGPrecompileGadget { GasCost::PRECOMPILE_ECRECOVER_BASE.expr(), ), // These are handled in PrecompileFailedGadget - // addr_bits.value_equals(PrecompileCalls::Sha256), + ( + addr_bits.value_equals(PrecompileCalls::Sha256), + GasCost::PRECOMPILE_SHA256_BASE.expr() + + n_words.quotient() * GasCost::PRECOMPILE_SHA256_PER_WORD.expr(), + ), // addr_bits.value_equals(PrecompileCalls::Ripemd160), // addr_bits.value_equals(PrecompileCalls::Blake2F), ( @@ -198,6 +202,11 @@ impl ExecutionGadget for ErrorOOGPrecompileGadget { precompile_call.base_gas_cost().as_u64() + n_words * GasCost::PRECOMPILE_IDENTITY_PER_WORD.as_u64() } + PrecompileCalls::Sha256 => { + let n_words = (call.call_data_length + 31) / 32; + precompile_call.base_gas_cost().as_u64() + + n_words * GasCost::PRECOMPILE_SHA256_PER_WORD.as_u64() + } PrecompileCalls::Bn128Add | PrecompileCalls::Bn128Mul | PrecompileCalls::Ecrecover => { precompile_call.base_gas_cost().as_u64() }