diff --git a/Cargo.lock b/Cargo.lock index 850e9fdd..c03b6793 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -51,9 +51,9 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6cee6a35793f3db8a5ffe60e86c695f321d081a567211245f503e8c498fce8" +checksum = "cabf647eb4650c91a9d38cb6f972bb320009e7e9d61765fb688a86f1563b33e8" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -2067,9 +2067,9 @@ dependencies = [ [[package]] name = "revm" -version = "18.0.0" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15689a3c6a8d14b647b4666f2e236ef47b5a5133cdfd423f545947986fff7013" +checksum = "e8905d0c5f10e767f13ea7cb8e502d315f144071a60fe2bd83977922dd3afa26" dependencies = [ "auto_impl", "cfg-if", @@ -2080,9 +2080,9 @@ dependencies = [ [[package]] name = "revm-interpreter" -version = "14.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e3f11d0fed049a4a10f79820c59113a79b38aed4ebec786a79d5c667bfeb51" +checksum = "e5ff76b50b5a9fa861fbc236fc82ce1afdf58861f65012aea807d679e54630d6" dependencies = [ "paste", "phf", @@ -2092,9 +2092,9 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "15.0.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e381060af24b750069a2b2d2c54bba273d84e8f5f9e8026fc9262298e26cc336" +checksum = "6542fb37650dfdbf4b9186769e49c4a8bc1901a3280b2ebf32f915b6c8850f36" dependencies = [ "aurora-engine-modexp", "cfg-if", @@ -2108,9 +2108,9 @@ dependencies = [ [[package]] name = "revm-primitives" -version = "14.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3702f132bb484f4f0d0ca4f6fbde3c82cfd745041abbedd6eda67730e1868ef0" +checksum = "48faea1ecf2c9f80d9b043bbde0db9da616431faed84c4cfa3dd7393005598e6" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -2327,9 +2327,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" [[package]] name = "rustc-hex" diff --git a/Cargo.toml b/Cargo.toml index 03f51d1c..4707fac7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,14 +44,14 @@ revmc-cranelift = { version = "0.1.0", path = "crates/revmc-cranelift", default- revmc-llvm = { version = "0.1.0", path = "crates/revmc-llvm", default-features = false } alloy-primitives = { version = "0.8", default-features = false } -revm = { version = "18.0", default-features = false } -revm-primitives = { version = "14.0", default-features = false } -revm-interpreter = { version = "14.0", default-features = false } +revm = { version = "19.0", default-features = false } +revm-primitives = { version = "15.1", default-features = false } +revm-interpreter = { version = "15.0", default-features = false } ruint = { version = "1.12", default-features = false } color-eyre = "0.6" eyre = "0.6" -rustc-hash = "2.0" +rustc-hash = "2.1" tracing = "0.1" tracing-subscriber = "0.3" tracing-tracy = "0.11" diff --git a/crates/revmc-builtins/src/lib.rs b/crates/revmc-builtins/src/lib.rs index b8d655fe..8763b7eb 100644 --- a/crates/revmc-builtins/src/lib.rs +++ b/crates/revmc-builtins/src/lib.rs @@ -13,7 +13,8 @@ extern crate tracing; use alloc::{boxed::Box, vec::Vec}; use revm_interpreter::{ as_u64_saturated, as_usize_saturated, CallInputs, CallScheme, CallValue, CreateInputs, - EOFCreateInputs, FunctionStack, InstructionResult, InterpreterAction, InterpreterResult, + EOFCreateInputs, Eip7702CodeLoad, FunctionStack, InstructionResult, InterpreterAction, + InterpreterResult, }; use revm_primitives::{ eof::EofHeader, Address, Bytes, CreateScheme, Eof, Log, LogData, SpecId, KECCAK_EMPTY, @@ -205,7 +206,9 @@ pub unsafe extern "C" fn __revmc_builtin_extcodesize( address: &mut EvmWord, spec_id: SpecId, ) -> InstructionResult { - let (code, state) = try_host!(ecx.host.code(address.to_address())).into_components(); + let (code, state) = + Eip7702CodeLoad::new_state_load(try_host!(ecx.host.code(address.to_address()))) + .into_components(); *address = code.len().into(); let gas = if spec_id.is_enabled_in(SpecId::BERLIN) { gas::warm_cold_cost_with_delegation(state) @@ -224,16 +227,16 @@ pub unsafe extern "C" fn __revmc_builtin_extcodecopy( rev![address, memory_offset, code_offset, len]: &mut [EvmWord; 4], spec_id: SpecId, ) -> InstructionResult { - let (code, state) = try_host!(ecx.host.code(address.to_address())).into_components(); + let state_load = try_host!(ecx.host.code(address.to_address())); let len = try_into_usize!(len); - gas_opt!(ecx, gas::extcodecopy_cost(spec_id, len as u64, state)); + gas_opt!(ecx, gas::extcodecopy_cost(spec_id, len as u64, state_load.is_cold)); if len != 0 { let memory_offset = try_into_usize!(memory_offset); let code_offset = code_offset.to_u256(); - let code_offset = as_usize_saturated!(code_offset).min(code.len()); + let code_offset = as_usize_saturated!(code_offset).min(state_load.data.len()); ensure_memory!(ecx, memory_offset, len); - ecx.memory.set_data(memory_offset, code_offset, len, &code); + ecx.memory.set_data(memory_offset, code_offset, len, &state_load.data); } InstructionResult::Continue } @@ -265,7 +268,9 @@ pub unsafe extern "C" fn __revmc_builtin_extcodehash( address: &mut EvmWord, spec_id: SpecId, ) -> InstructionResult { - let (hash, state) = try_host!(ecx.host.code_hash(address.to_address())).into_components(); + let (hash, state) = + Eip7702CodeLoad::new_state_load(try_host!(ecx.host.code_hash(address.to_address()))) + .into_components(); *address = EvmWord::from_be_bytes(hash.0); let gas = if spec_id.is_enabled_in(SpecId::BERLIN) { gas::warm_cold_cost_with_delegation(state) diff --git a/crates/revmc-context/src/lib.rs b/crates/revmc-context/src/lib.rs index c94712fb..80d762d6 100644 --- a/crates/revmc-context/src/lib.rs +++ b/crates/revmc-context/src/lib.rs @@ -832,14 +832,13 @@ mod tests { fn code( &mut self, address: Address, - ) -> Option> { + ) -> Option> { unimplemented!() } fn code_hash( &mut self, address: Address, - ) -> Option>> - { + ) -> Option>> { unimplemented!() } fn sload( diff --git a/crates/revmc/src/tests/runner.rs b/crates/revmc/src/tests/runner.rs index 3b5e82ed..2db82d67 100644 --- a/crates/revmc/src/tests/runner.rs +++ b/crates/revmc/src/tests/runner.rs @@ -1,5 +1,5 @@ use super::*; -use interpreter::{AccountLoad, Eip7702CodeLoad, SStoreResult, StateLoad}; +use interpreter::{AccountLoad, SStoreResult, StateLoad}; use revm_interpreter::{opcode as op, Contract, DummyHost, Host, SelfDestructResult}; use revm_primitives::{ spec_to_generic, BlobExcessGasAndPrice, BlockEnv, CfgEnv, Env, HashMap, TxEnv, EOF_MAGIC_BYTES, @@ -148,7 +148,7 @@ pub fn def_env() -> &'static Env { basefee: U256::from(0x1231), difficulty: U256::from(0xcdef), prevrandao: Some(U256::from(0x0123).into()), - blob_excess_gas_and_price: Some(BlobExcessGasAndPrice::new(50)), + blob_excess_gas_and_price: Some(BlobExcessGasAndPrice::new(50, false)), }, tx: TxEnv { caller: Address::repeat_byte(0xcc), @@ -262,14 +262,14 @@ impl Host for TestHost { Some(StateLoad::new(U256::from(*address.last().unwrap()), false)) } - fn code(&mut self, address: Address) -> Option> { + fn code(&mut self, address: Address) -> Option> { let code = self.code_map.get(&address).map(|b| b.original_bytes()).unwrap_or_default(); - Some(Eip7702CodeLoad::new_not_delegated(code, false)) + Some(StateLoad::new(code, false)) } - fn code_hash(&mut self, address: Address) -> Option> { + fn code_hash(&mut self, address: Address) -> Option> { let code_hash = self.code_map.get(&address).map(|b| b.hash_slow()).unwrap_or(KECCAK_EMPTY); - Some(Eip7702CodeLoad::new_not_delegated(code_hash, false)) + Some(StateLoad::new(code_hash, false)) } fn sload(&mut self, address: Address, index: U256) -> Option> {