From 53175f56b53d7a0d042ab0a0582a618ed9ebb09e Mon Sep 17 00:00:00 2001 From: mandreyel Date: Thu, 8 Jun 2023 16:05:38 +0200 Subject: [PATCH 1/3] fix: use shanghai config instead of london --- engine/src/engine.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/src/engine.rs b/engine/src/engine.rs index 73edd6823..cf39f5c41 100644 --- a/engine/src/engine.rs +++ b/engine/src/engine.rs @@ -386,7 +386,7 @@ pub struct Engine<'env, I: IO, E: Env, M = AuroraModExp> { modexp_algorithm: PhantomData, } -pub(crate) const CONFIG: &Config = &Config::london(); +pub(crate) const CONFIG: &Config = &Config::shanghai(); impl<'env, I: IO + Copy, E: Env, M: ModExpAlgorithm> Engine<'env, I, E, M> { pub fn new( From de80c4b46b74e05152dab3da8089e6fdf0c221f2 Mon Sep 17 00:00:00 2001 From: Oleksandr Anyshchenko Date: Wed, 21 Jun 2023 18:12:34 +0200 Subject: [PATCH 2/3] fix: intrinsic gas calculation --- engine-tests/src/tests/erc20.rs | 4 ++-- engine-transactions/src/lib.rs | 13 ++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/engine-tests/src/tests/erc20.rs b/engine-tests/src/tests/erc20.rs index 966414050..91455f07d 100644 --- a/engine-tests/src/tests/erc20.rs +++ b/engine-tests/src/tests/erc20.rs @@ -59,7 +59,7 @@ fn erc20_mint_out_of_gas() { // not enough gas to cover intrinsic cost let intrinsic_gas = test_utils::erc20::legacy_into_normalized_tx(mint_tx.clone()) - .intrinsic_gas(&evm::Config::istanbul()) + .intrinsic_gas(&evm::Config::shanghai()) .unwrap(); mint_tx.gas_limit = (intrinsic_gas - 1).into(); let error = runner @@ -214,7 +214,7 @@ fn deploy_erc_20_out_of_gas() { // not enough gas to cover intrinsic cost let intrinsic_gas = test_utils::erc20::legacy_into_normalized_tx(deploy_transaction.clone()) - .intrinsic_gas(&evm::Config::istanbul()) + .intrinsic_gas(&evm::Config::shanghai()) .unwrap(); deploy_transaction.gas_limit = (intrinsic_gas - 1).into(); let error = runner diff --git a/engine-transactions/src/lib.rs b/engine-transactions/src/lib.rs index 3d27c2753..8248c7a8c 100644 --- a/engine-transactions/src/lib.rs +++ b/engine-transactions/src/lib.rs @@ -137,7 +137,7 @@ impl NormalizedEthTransaction { let is_contract_creation = self.to.is_none(); let base_gas = if is_contract_creation { - config.gas_transaction_create + config.gas_transaction_create + init_code_cost(config, &self.data) } else { config.gas_transaction_call }; @@ -185,6 +185,17 @@ impl NormalizedEthTransaction { } } +const fn init_code_cost(config: &evm::Config, data: &[u8]) -> u64 { + // As per EIP-3860: + // > We define initcode_cost(initcode) to equal INITCODE_WORD_COST * ceil(len(initcode) / 32). + // where INITCODE_WORD_COST is 2. + if config.max_initcode_size.is_some() { + 2 * ((data.len() as u64 + 31) / 32) + } else { + 0 + } +} + #[derive(Debug, Clone, Eq, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Serialize))] pub enum Error { From 6a1ffa51f59b8ab306c061ce7fdb85b447fad059 Mon Sep 17 00:00:00 2001 From: Oleksandr Anyshchenko Date: Wed, 21 Jun 2023 18:28:31 +0200 Subject: [PATCH 3/3] chore: make clippy happy --- engine-transactions/src/lib.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/engine-transactions/src/lib.rs b/engine-transactions/src/lib.rs index 8248c7a8c..19665fa6d 100644 --- a/engine-transactions/src/lib.rs +++ b/engine-transactions/src/lib.rs @@ -137,7 +137,7 @@ impl NormalizedEthTransaction { let is_contract_creation = self.to.is_none(); let base_gas = if is_contract_creation { - config.gas_transaction_create + init_code_cost(config, &self.data) + config.gas_transaction_create + init_code_cost(config, &self.data)? } else { config.gas_transaction_call }; @@ -185,15 +185,17 @@ impl NormalizedEthTransaction { } } -const fn init_code_cost(config: &evm::Config, data: &[u8]) -> u64 { +fn init_code_cost(config: &evm::Config, data: &[u8]) -> Result { // As per EIP-3860: // > We define initcode_cost(initcode) to equal INITCODE_WORD_COST * ceil(len(initcode) / 32). // where INITCODE_WORD_COST is 2. - if config.max_initcode_size.is_some() { - 2 * ((data.len() as u64 + 31) / 32) + let init_code_cost = if config.max_initcode_size.is_some() { + 2 * ((u64::try_from(data.len()).map_err(|_| Error::IntegerConversion)? + 31) / 32) } else { 0 - } + }; + + Ok(init_code_cost) } #[derive(Debug, Clone, Eq, PartialEq)]