From 193f7b0bbd650234352f91066a55c738e24c09ac Mon Sep 17 00:00:00 2001 From: Joonatan Saarhelo Date: Thu, 12 Sep 2024 15:00:59 +0100 Subject: [PATCH] fix: count SECP256 precompile to account validation gas limit as well (#2859) Account validation counts all the precompile's extra gas costs. This PR adds a missing precompile. --- core/lib/constants/src/contracts.rs | 5 +++++ core/lib/multivm/src/versions/vm_latest/tracers/utils.rs | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/core/lib/constants/src/contracts.rs b/core/lib/constants/src/contracts.rs index 44bb05a89764..73b4a0ffaaa2 100644 --- a/core/lib/constants/src/contracts.rs +++ b/core/lib/constants/src/contracts.rs @@ -100,6 +100,11 @@ pub const SHA256_PRECOMPILE_ADDRESS: Address = H160([ 0x00, 0x00, 0x00, 0x02, ]); +pub const SECP256R1_VERIFY_PRECOMPILE_ADDRESS: Address = H160([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, +]); + pub const EC_ADD_PRECOMPILE_ADDRESS: Address = H160([ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, diff --git a/core/lib/multivm/src/versions/vm_latest/tracers/utils.rs b/core/lib/multivm/src/versions/vm_latest/tracers/utils.rs index 1ecb75c28071..0a11f5d3f849 100644 --- a/core/lib/multivm/src/versions/vm_latest/tracers/utils.rs +++ b/core/lib/multivm/src/versions/vm_latest/tracers/utils.rs @@ -6,7 +6,8 @@ use zk_evm_1_5_0::{ }, }; use zksync_system_constants::{ - ECRECOVER_PRECOMPILE_ADDRESS, KECCAK256_PRECOMPILE_ADDRESS, SHA256_PRECOMPILE_ADDRESS, + ECRECOVER_PRECOMPILE_ADDRESS, KECCAK256_PRECOMPILE_ADDRESS, + SECP256R1_VERIFY_PRECOMPILE_ADDRESS, SHA256_PRECOMPILE_ADDRESS, }; use zksync_types::U256; use zksync_utils::u256_to_h256; @@ -187,6 +188,7 @@ pub(crate) fn computational_gas_price( if address == KECCAK256_PRECOMPILE_ADDRESS || address == SHA256_PRECOMPILE_ADDRESS || address == ECRECOVER_PRECOMPILE_ADDRESS + || address == SECP256R1_VERIFY_PRECOMPILE_ADDRESS { data.src1_value.value.low_u32() } else {