From ab4792555649d343d81aa4bd4445267e54f519e7 Mon Sep 17 00:00:00 2001 From: Evgeny Ukhanov Date: Mon, 8 Apr 2024 10:48:46 +0200 Subject: [PATCH] Added EVM CANCUN hard fork support. Changed tests --- Cargo.lock | 33 +++++++++---------- Cargo.toml | 8 ++--- engine-tests/src/tests/repro.rs | 4 +-- engine-tests/src/tests/sanity.rs | 6 ++-- engine-tests/src/tests/self_destruct_state.rs | 4 ++- engine-tests/src/utils/solidity/mod.rs | 2 +- engine/src/engine.rs | 12 +++++-- 7 files changed, 38 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bf84a78b5..52087ce98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1723,9 +1723,9 @@ dependencies = [ [[package]] name = "ethereum" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a89fb87a9e103f71b903b80b670200b54cc67a07578f070681f1fffb7396fb7" +checksum = "2e04d24d20b8ff2235cffbf242d5092de3aa45f77c5270ddbfadd2778ca13fea" dependencies = [ "bytes", "ethereum-types", @@ -1736,7 +1736,7 @@ dependencies = [ "scale-info", "serde", "sha3", - "triehash", + "trie-root", ] [[package]] @@ -1757,8 +1757,8 @@ dependencies = [ [[package]] name = "evm" -version = "0.39.1" -source = "git+https://github.com/aurora-is-near/sputnikvm.git?tag=v0.39.1#0334a09d6b6e83ff3a8da992e33f29ba95e0c9fe" +version = "0.41.0" +source = "git+https://github.com/aurora-is-near/sputnikvm.git?rev=22b8129#22b8129a7a0de800e327888934ed20e98888733d" dependencies = [ "auto_impl", "environmental", @@ -1777,8 +1777,8 @@ dependencies = [ [[package]] name = "evm-core" -version = "0.39.1" -source = "git+https://github.com/aurora-is-near/sputnikvm.git?tag=v0.39.1#0334a09d6b6e83ff3a8da992e33f29ba95e0c9fe" +version = "0.41.0" +source = "git+https://github.com/aurora-is-near/sputnikvm.git?rev=22b8129#22b8129a7a0de800e327888934ed20e98888733d" dependencies = [ "parity-scale-codec", "primitive-types 0.12.2", @@ -1788,8 +1788,8 @@ dependencies = [ [[package]] name = "evm-gasometer" -version = "0.39.1" -source = "git+https://github.com/aurora-is-near/sputnikvm.git?tag=v0.39.1#0334a09d6b6e83ff3a8da992e33f29ba95e0c9fe" +version = "0.41.0" +source = "git+https://github.com/aurora-is-near/sputnikvm.git?rev=22b8129#22b8129a7a0de800e327888934ed20e98888733d" dependencies = [ "environmental", "evm-core", @@ -1799,8 +1799,8 @@ dependencies = [ [[package]] name = "evm-runtime" -version = "0.39.1" -source = "git+https://github.com/aurora-is-near/sputnikvm.git?tag=v0.39.1#0334a09d6b6e83ff3a8da992e33f29ba95e0c9fe" +version = "0.41.0" +source = "git+https://github.com/aurora-is-near/sputnikvm.git?rev=22b8129#22b8129a7a0de800e327888934ed20e98888733d" dependencies = [ "auto_impl", "environmental", @@ -2192,9 +2192,9 @@ dependencies = [ [[package]] name = "hash-db" -version = "0.15.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" [[package]] name = "hash256-std-hasher" @@ -5778,13 +5778,12 @@ dependencies = [ ] [[package]] -name = "triehash" -version = "0.8.4" +name = "trie-root" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1631b201eb031b563d2e85ca18ec8092508e262a3196ce9bd10a67ec87b9f5c" +checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" dependencies = [ "hash-db", - "rlp", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index fca0f0c85..fd66d4110 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,10 +31,10 @@ byte-slice-cast = { version = "1", default-features = false } criterion = "0.5" digest = "0.10" ethabi = { version = "18", default-features = false } -evm = { git = "https://github.com/aurora-is-near/sputnikvm.git", tag = "v0.39.1", default-features = false } -evm-core = { git = "https://github.com/aurora-is-near/sputnikvm.git", tag = "v0.39.1", default-features = false, features = ["std"] } -evm-gasometer = { git = "https://github.com/aurora-is-near/sputnikvm.git", tag = "v0.39.1", default-features = false, features = ["std", "tracing"] } -evm-runtime = { git = "https://github.com/aurora-is-near/sputnikvm.git", tag = "v0.39.1", default-features = false, features = ["std", "tracing"] } +evm = { git = "https://github.com/aurora-is-near/sputnikvm.git", rev = "22b8129", default-features = false } +evm-core = { git = "https://github.com/aurora-is-near/sputnikvm.git", rev = "22b8129", default-features = false, features = ["std"] } +evm-gasometer = { git = "https://github.com/aurora-is-near/sputnikvm.git", rev = "22b8129", default-features = false, features = ["std", "tracing"] } +evm-runtime = { git = "https://github.com/aurora-is-near/sputnikvm.git", rev = "22b8129", default-features = false, features = ["std", "tracing"] } fixed-hash = { version = "0.8", default-features = false } function_name = "0.3" git2 = "0.18" diff --git a/engine-tests/src/tests/repro.rs b/engine-tests/src/tests/repro.rs index a834a9f4b..64714ef9f 100644 --- a/engine-tests/src/tests/repro.rs +++ b/engine-tests/src/tests/repro.rs @@ -51,7 +51,7 @@ fn repro_8ru7VEA() { block_timestamp: 1_648_829_935_343_349_589, input_path: "src/tests/res/input_8ru7VEA.hex", evm_gas_used: 1_732_181, - near_gas_used: 210, + near_gas_used: 211, }); } @@ -71,7 +71,7 @@ fn repro_FRcorNv() { block_timestamp: 1_650_960_438_774_745_116, input_path: "src/tests/res/input_FRcorNv.hex", evm_gas_used: 1_239_721, - near_gas_used: 170, + near_gas_used: 171, }); } diff --git a/engine-tests/src/tests/sanity.rs b/engine-tests/src/tests/sanity.rs index 7f8f2149e..b500f5ff4 100644 --- a/engine-tests/src/tests/sanity.rs +++ b/engine-tests/src/tests/sanity.rs @@ -180,10 +180,8 @@ fn test_total_supply_accounting() { }) .unwrap(); #[cfg(not(feature = "ext-connector"))] - assert_eq!( - get_total_supply(&mut runner), - INITIAL_BALANCE - TRANSFER_AMOUNT - ); + // For CANCUN hard fork `total_supply` can't change + assert_eq!(get_total_supply(&mut runner), INITIAL_BALANCE); } #[test] diff --git a/engine-tests/src/tests/self_destruct_state.rs b/engine-tests/src/tests/self_destruct_state.rs index 480f51f62..df2972fc3 100644 --- a/engine-tests/src/tests/self_destruct_state.rs +++ b/engine-tests/src/tests/self_destruct_state.rs @@ -5,6 +5,8 @@ use crate::utils::solidity::self_destruct::{ /// Check that account state should be properly removed after calling selfdestruct #[test] +// For CANCUN hard fork SELFDESCTRUCT disabled +#[ignore] fn test_self_destruct_reset_state() { let mut signer = utils::Signer::random(); let mut runner = utils::deploy_runner(); @@ -29,7 +31,7 @@ fn test_self_destruct_reset_state() { assert_eq!(counter_value, Some(1)); sd.finish(&mut runner); let counter_value = sd.counter(&mut runner, &mut signer); - assert!(counter_value.is_none()); + assert!(counter_value.is_some()); let sd_contract_addr1 = sd_factory.deploy(&mut runner, &mut signer); assert_eq!(sd_contract_addr, sd_contract_addr1); diff --git a/engine-tests/src/utils/solidity/mod.rs b/engine-tests/src/utils/solidity/mod.rs index ebcd0ee2d..ba8a57bd3 100644 --- a/engine-tests/src/utils/solidity/mod.rs +++ b/engine-tests/src/utils/solidity/mod.rs @@ -191,7 +191,7 @@ where &source_mount_arg, "-v", &output_mount_arg, - "ethereum/solc:0.8.24", // TODO: 0.8.25 introduces support of the Dencun hard fork. + "ethereum/solc:0.8.25", // TODO: 0.8.25 introduces support of the Dencun hard fork. "--allow-paths", "/contracts/", "-o", diff --git a/engine/src/engine.rs b/engine/src/engine.rs index 362f0173d..e31d0f4a0 100644 --- a/engine/src/engine.rs +++ b/engine/src/engine.rs @@ -118,7 +118,7 @@ impl EngineErrorKind { Self::EvmError(ExitError::CallTooDeep) => errors::ERR_CALL_TOO_DEEP, Self::EvmError(ExitError::CreateCollision) => errors::ERR_CREATE_COLLISION, Self::EvmError(ExitError::CreateContractLimit) => errors::ERR_CREATE_CONTRACT_LIMIT, - Self::EvmError(ExitError::InvalidCode(_)) => errors::ERR_INVALID_OPCODE, + Self::EvmError(ExitError::InvalidCode(opcode)) => errors::ERR_INVALID_OPCODE, Self::EvmError(ExitError::OutOfOffset) => errors::ERR_OUT_OF_OFFSET, Self::EvmError(ExitError::OutOfGas) => errors::ERR_OUT_OF_GAS, Self::EvmError(ExitError::OutOfFund) => errors::ERR_OUT_OF_FUND, @@ -396,7 +396,7 @@ pub struct Engine<'env, I: IO, E: Env, M = AuroraModExp> { modexp_algorithm: PhantomData, } -pub(crate) const CONFIG: &Config = &Config::shanghai(); +pub(crate) const CONFIG: &Config = &Config::cancun(); impl<'env, I: IO + Copy, E: Env, M: ModExpAlgorithm> Engine<'env, I, E, M> { pub fn new( @@ -1918,6 +1918,14 @@ impl<'env, I: IO + Copy, E: Env, M: ModExpAlgorithm> Backend for Engine<'env, I, fn original_storage(&self, address: H160, index: H256) -> Option { Some(self.storage(address, index)) } + + fn blob_gasprice(&self) -> Option { + Some(1) + } + + fn get_blob_hash(&self, _index: usize) -> Result { + Ok(U256::default()) + } } impl<'env, J: IO + Copy, E: Env, M: ModExpAlgorithm> ApplyBackend for Engine<'env, J, E, M> {