From 86c414081a74587f508e3eab36fafdf80cb1b0a7 Mon Sep 17 00:00:00 2001 From: rakita Date: Fri, 16 Jan 2026 15:56:27 +0100 Subject: [PATCH] feat: stagging revm v34.0.0 (#20627) Co-authored-by: Matthias Seitz --- Cargo.lock | 101 +++++++----------- Cargo.toml | 31 +++--- .../engine/invalid-block-hooks/src/witness.rs | 2 + crates/engine/tree/Cargo.toml | 2 +- crates/engine/tree/benches/channel_perf.rs | 2 + crates/engine/tree/benches/state_root_task.rs | 3 + crates/engine/tree/src/tree/metrics.rs | 2 + .../tree/src/tree/payload_processor/bal.rs | 52 +++++---- .../tree/src/tree/payload_processor/mod.rs | 2 + .../src/tree/payload_processor/multiproof.rs | 6 ++ crates/ethereum/evm/src/lib.rs | 12 ++- crates/ethereum/evm/tests/execute.rs | 3 + crates/ethereum/payload/src/lib.rs | 4 +- crates/evm/evm/src/execute.rs | 19 +++- crates/evm/evm/src/lib.rs | 2 +- .../execution-types/src/execution_outcome.rs | 18 +++- crates/optimism/evm/src/lib.rs | 22 ++-- crates/optimism/node/tests/it/builder.rs | 6 +- crates/optimism/payload/src/builder.rs | 2 +- crates/primitives-traits/src/account.rs | 14 ++- crates/rpc/rpc-eth-api/src/helpers/call.rs | 12 ++- .../rpc/rpc-eth-api/src/helpers/estimate.rs | 8 +- crates/rpc/rpc-eth-api/src/helpers/trace.rs | 7 +- crates/rpc/rpc-eth-types/src/error/api.rs | 11 +- crates/rpc/rpc-eth-types/src/error/mod.rs | 26 ++++- crates/stateless/src/witness_db.rs | 1 + crates/storage/errors/Cargo.toml | 2 + crates/storage/errors/src/provider.rs | 12 ++- crates/trie/common/src/hashed_state.rs | 2 + 29 files changed, 235 insertions(+), 151 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c42bb019e3..0153d42fae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -249,12 +249,13 @@ dependencies = [ [[package]] name = "alloy-eip7928" -version = "0.1.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "926b2c0d34e641cf8b17bf54ce50fda16715b9f68ad878fa6128bae410c6f890" +checksum = "6adac476434bf024279164dcdca299309f0c7d1e3557024eb7a83f8d9d01c6b5" dependencies = [ "alloy-primitives", "alloy-rlp", + "borsh", "serde", ] @@ -286,9 +287,9 @@ dependencies = [ [[package]] name = "alloy-evm" -version = "0.25.2" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ccc4c702c840148af1ce784cc5c6ed9274a020ef32417c5b1dbeab8c317673" +checksum = "249337d8316a9ab983784597adfad66b78047ec9522d8b510185bc968c272618" dependencies = [ "alloy-consensus", "alloy-eips", @@ -403,9 +404,9 @@ dependencies = [ [[package]] name = "alloy-op-evm" -version = "0.25.2" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f640da852f93ddaa3b9a602b7ca41d80e0023f77a67b68aaaf511c32f1fe0ce" +checksum = "cc9fc7cbe100f7b094428b488225c9aedb835f28a31b74f474ee1c41878e58c6" dependencies = [ "alloy-consensus", "alloy-eips", @@ -1491,12 +1492,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "az" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" - [[package]] name = "backon" version = "1.6.0" @@ -4461,16 +4456,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "gmp-mpfr-sys" -version = "1.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60f8970a75c006bb2f8ae79c6768a116dd215fa8346a87aed99bf9d82ca43394" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - [[package]] name = "group" version = "0.13.0" @@ -6488,9 +6473,9 @@ dependencies = [ [[package]] name = "op-revm" -version = "14.1.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1475a779c73999fc803778524042319691b31f3d6699d2b560c4ed8be1db802a" +checksum = "79c92b75162c2ed1661849fa51683b11254a5b661798360a2c24be918edafd40" dependencies = [ "auto_impl", "revm", @@ -10968,6 +10953,7 @@ dependencies = [ "reth-prune-types", "reth-static-file-types", "revm-database-interface", + "revm-state", "thiserror 2.0.17", ] @@ -11325,9 +11311,9 @@ dependencies = [ [[package]] name = "revm" -version = "33.1.0" +version = "34.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c85ed0028f043f87b3c88d4a4cb6f0a76440085523b6a8afe5ff003cf418054" +checksum = "c2aabdebaa535b3575231a88d72b642897ae8106cf6b0d12eafc6bfdf50abfc7" dependencies = [ "revm-bytecode", "revm-context", @@ -11344,9 +11330,9 @@ dependencies = [ [[package]] name = "revm-bytecode" -version = "7.1.1" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c6b5e6e8dd1e28a4a60e5f46615d4ef0809111c9e63208e55b5c7058200fb0" +checksum = "74d1e5c1eaa44d39d537f668bc5c3409dc01e5c8be954da6c83370bbdf006457" dependencies = [ "bitvec", "phf", @@ -11356,9 +11342,9 @@ dependencies = [ [[package]] name = "revm-context" -version = "12.1.0" +version = "13.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f038f0c9c723393ac897a5df9140b21cfa98f5753a2cb7d0f28fa430c4118abf" +checksum = "892ff3e6a566cf8d72ffb627fdced3becebbd9ba64089c25975b9b028af326a5" dependencies = [ "bitvec", "cfg-if", @@ -11373,9 +11359,9 @@ dependencies = [ [[package]] name = "revm-context-interface" -version = "13.1.0" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "431c9a14e4ef1be41ae503708fd02d974f80ef1f2b6b23b5e402e8d854d1b225" +checksum = "57f61cc6d23678c4840af895b19f8acfbbd546142ec8028b6526c53cc1c16c98" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -11389,9 +11375,9 @@ dependencies = [ [[package]] name = "revm-database" -version = "9.0.6" +version = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "980d8d6bba78c5dd35b83abbb6585b0b902eb25ea4448ed7bfba6283b0337191" +checksum = "529528d0b05fe646be86223032c3e77aa8b05caa2a35447d538c55965956a511" dependencies = [ "alloy-eips", "revm-bytecode", @@ -11403,22 +11389,23 @@ dependencies = [ [[package]] name = "revm-database-interface" -version = "8.0.5" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cce03e3780287b07abe58faf4a7f5d8be7e81321f93ccf3343c8f7755602bae" +checksum = "b7bf93ac5b91347c057610c0d96e923db8c62807e03f036762d03e981feddc1d" dependencies = [ "auto_impl", "either", "revm-primitives", "revm-state", "serde", + "thiserror 2.0.17", ] [[package]] name = "revm-handler" -version = "14.1.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d44f8f6dbeec3fecf9fe55f78ef0a758bdd92ea46cd4f1ca6e2a946b32c367f3" +checksum = "0cd0e43e815a85eded249df886c4badec869195e70cdd808a13cfca2794622d2" dependencies = [ "auto_impl", "derive-where", @@ -11435,9 +11422,9 @@ dependencies = [ [[package]] name = "revm-inspector" -version = "14.1.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5617e49216ce1ca6c8826bcead0386bc84f49359ef67cde6d189961735659f93" +checksum = "4f3ccad59db91ef93696536a0dbaf2f6f17cfe20d4d8843ae118edb7e97947ef" dependencies = [ "auto_impl", "either", @@ -11453,9 +11440,9 @@ dependencies = [ [[package]] name = "revm-inspectors" -version = "0.33.2" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01def7351cd9af844150b8e88980bcd11304f33ce23c3d7c25f2a8dab87c1345" +checksum = "4a1ce3f52a052d78cc251714d57bf05dc8bc75e269677de11805d3153300a2cd" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -11473,9 +11460,9 @@ dependencies = [ [[package]] name = "revm-interpreter" -version = "31.1.0" +version = "32.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26ec36405f7477b9dccdc6caa3be19adf5662a7a0dffa6270cdb13a090c077e5" +checksum = "11406408597bc249392d39295831c4b641b3a6f5c471a7c41104a7a1e3564c07" dependencies = [ "revm-bytecode", "revm-context-interface", @@ -11486,9 +11473,9 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "31.0.0" +version = "32.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a62958af953cc4043e93b5be9b8497df84cc3bd612b865c49a7a7dfa26a84e2" +checksum = "50c1285c848d240678bf69cb0f6179ff5a4aee6fc8e921d89708087197a0aff3" dependencies = [ "ark-bls12-381", "ark-bn254", @@ -11504,16 +11491,15 @@ dependencies = [ "p256", "revm-primitives", "ripemd", - "rug", "secp256k1 0.31.1", "sha2", ] [[package]] name = "revm-primitives" -version = "21.0.2" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29e161db429d465c09ba9cbff0df49e31049fe6b549e28eb0b7bd642fcbd4412" +checksum = "ba580c56a8ec824a64f8a1683577876c2e1dbe5247044199e9b881421ad5dcf9" dependencies = [ "alloy-primitives", "num_enum", @@ -11523,10 +11509,11 @@ dependencies = [ [[package]] name = "revm-state" -version = "8.1.1" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d8be953b7e374dbdea0773cf360debed8df394ea8d82a8b240a6b5da37592fc" +checksum = "311720d4f0f239b041375e7ddafdbd20032a33b7bae718562ea188e188ed9fd3" dependencies = [ + "alloy-eip7928", "bitflags 2.10.0", "revm-bytecode", "revm-primitives", @@ -11675,18 +11662,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "rug" -version = "1.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad2e973fe3c3214251a840a621812a4f40468da814b1a3d6947d433c2af11f" -dependencies = [ - "az", - "gmp-mpfr-sys", - "libc", - "libm", -] - [[package]] name = "ruint" version = "1.17.2" diff --git a/Cargo.toml b/Cargo.toml index a4fc2e292e..068a8f9ef6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -473,22 +473,22 @@ reth-ress-protocol = { path = "crates/ress/protocol" } reth-ress-provider = { path = "crates/ress/provider" } # revm -revm = { version = "33.1.0", default-features = false } -revm-bytecode = { version = "7.1.1", default-features = false } -revm-database = { version = "9.0.5", default-features = false } -revm-state = { version = "8.1.1", default-features = false } -revm-primitives = { version = "21.0.2", default-features = false } -revm-interpreter = { version = "31.1.0", default-features = false } -revm-database-interface = { version = "8.0.5", default-features = false } -op-revm = { version = "14.1.0", default-features = false } -revm-inspectors = "0.33.2" +revm = { version = "34.0.0", default-features = false } +revm-bytecode = { version = "8.0.0", default-features = false } +revm-database = { version = "10.0.0", default-features = false } +revm-state = { version = "9.0.0", default-features = false } +revm-primitives = { version = "22.0.0", default-features = false } +revm-interpreter = { version = "32.0.0", default-features = false } +revm-database-interface = { version = "9.0.0", default-features = false } +op-revm = { version = "15.0.0", default-features = false } +revm-inspectors = "0.34.0" # eth alloy-chains = { version = "0.2.5", default-features = false } alloy-dyn-abi = "1.4.3" alloy-eip2124 = { version = "0.2.0", default-features = false } -alloy-eip7928 = { version = "0.1.0", default-features = false } -alloy-evm = { version = "0.25.1", default-features = false } +alloy-eip7928 = { version = "0.3.0", default-features = false } +alloy-evm = { version = "0.26.0", default-features = false } alloy-primitives = { version = "1.5.0", default-features = false, features = ["map-foldhash"] } alloy-rlp = { version = "0.3.10", default-features = false, features = ["core-net"] } alloy-sol-macro = "1.5.0" @@ -526,7 +526,7 @@ alloy-transport-ipc = { version = "1.4.3", default-features = false } alloy-transport-ws = { version = "1.4.3", default-features = false } # op -alloy-op-evm = { version = "0.25.0", default-features = false } +alloy-op-evm = { version = "0.26.0", default-features = false } alloy-op-hardforks = "0.4.4" op-alloy-rpc-types = { version = "0.23.1", default-features = false } op-alloy-rpc-types-engine = { version = "0.23.1", default-features = false } @@ -747,7 +747,7 @@ vergen-git2 = "1.0.5" # networking ipnet = "2.11" -# [patch.crates-io] +[patch.crates-io] # alloy-consensus = { git = "https://github.com/alloy-rs/alloy", rev = "3049f232fbb44d1909883e154eb38ec5962f53a3" } # alloy-contract = { git = "https://github.com/alloy-rs/alloy", rev = "3049f232fbb44d1909883e154eb38ec5962f53a3" } # alloy-eips = { git = "https://github.com/alloy-rs/alloy", rev = "3049f232fbb44d1909883e154eb38ec5962f53a3" } @@ -792,3 +792,8 @@ ipnet = "2.11" # alloy-evm = { git = "https://github.com/alloy-rs/evm", rev = "a69f0b45a6b0286e16072cb8399e02ce6ceca353" } # alloy-op-evm = { git = "https://github.com/alloy-rs/evm", rev = "a69f0b45a6b0286e16072cb8399e02ce6ceca353" } + +# revm-inspectors = { git = "https://github.com/paradigmxyz/revm-inspectors", rev = "3020ea8" } + +# alloy-evm = { git = "https://github.com/alloy-rs/evm", rev = "072c248" } +# alloy-op-evm = { git = "https://github.com/alloy-rs/evm", rev = "072c248" } diff --git a/crates/engine/invalid-block-hooks/src/witness.rs b/crates/engine/invalid-block-hooks/src/witness.rs index 25d15a8722..c068220da8 100644 --- a/crates/engine/invalid-block-hooks/src/witness.rs +++ b/crates/engine/invalid-block-hooks/src/witness.rs @@ -448,12 +448,14 @@ mod tests { nonce: account.nonce, code_hash: account.bytecode_hash.unwrap_or_default(), code: None, + account_id: None, }), original_info: (i == 0).then(|| AccountInfo { balance: account.balance.checked_div(U256::from(2)).unwrap_or(U256::ZERO), nonce: 0, code_hash: account.bytecode_hash.unwrap_or_default(), code: None, + account_id: None, }), storage, status: AccountStatus::default(), diff --git a/crates/engine/tree/Cargo.toml b/crates/engine/tree/Cargo.toml index ea679e4e40..006233c190 100644 --- a/crates/engine/tree/Cargo.toml +++ b/crates/engine/tree/Cargo.toml @@ -95,7 +95,7 @@ reth-tracing.workspace = true reth-node-ethereum.workspace = true reth-e2e-test-utils.workspace = true -# alloy +# revm revm-state.workspace = true assert_matches.workspace = true diff --git a/crates/engine/tree/benches/channel_perf.rs b/crates/engine/tree/benches/channel_perf.rs index 41dd651c89..1bc5d7ceac 100644 --- a/crates/engine/tree/benches/channel_perf.rs +++ b/crates/engine/tree/benches/channel_perf.rs @@ -26,7 +26,9 @@ fn create_bench_state(num_accounts: usize) -> EvmState { nonce: 10, code_hash: B256::from_slice(&rng.random::<[u8; 32]>()), code: Default::default(), + account_id: None, }, + original_info: Box::new(AccountInfo::default()), storage, status: AccountStatus::empty(), transaction_id: 0, diff --git a/crates/engine/tree/benches/state_root_task.rs b/crates/engine/tree/benches/state_root_task.rs index 6db5136136..f271e18811 100644 --- a/crates/engine/tree/benches/state_root_task.rs +++ b/crates/engine/tree/benches/state_root_task.rs @@ -62,6 +62,7 @@ fn create_bench_state_updates(params: &BenchParams) -> Vec { storage: HashMap::default(), status: AccountStatus::SelfDestructed, transaction_id: 0, + original_info: Box::new(AccountInfo::default()), } } else { RevmAccount { @@ -70,6 +71,7 @@ fn create_bench_state_updates(params: &BenchParams) -> Vec { nonce: rng.random::(), code_hash: KECCAK_EMPTY, code: Some(Default::default()), + account_id: None, }, storage: (0..rng.random_range(0..=params.storage_slots_per_account)) .map(|_| { @@ -84,6 +86,7 @@ fn create_bench_state_updates(params: &BenchParams) -> Vec { }) .collect(), status: AccountStatus::Touched, + original_info: Box::new(AccountInfo::default()), transaction_id: 0, } }; diff --git a/crates/engine/tree/src/tree/metrics.rs b/crates/engine/tree/src/tree/metrics.rs index 2308ab85c3..ac4bb50044 100644 --- a/crates/engine/tree/src/tree/metrics.rs +++ b/crates/engine/tree/src/tree/metrics.rs @@ -580,7 +580,9 @@ mod tests { nonce: 10, code_hash: B256::random(), code: Default::default(), + account_id: None, }, + original_info: Box::new(AccountInfo::default()), storage, status: AccountStatus::default(), transaction_id: 0, diff --git a/crates/engine/tree/src/tree/payload_processor/bal.rs b/crates/engine/tree/src/tree/payload_processor/bal.rs index 415da6874e..1353e1b628 100644 --- a/crates/engine/tree/src/tree/payload_processor/bal.rs +++ b/crates/engine/tree/src/tree/payload_processor/bal.rs @@ -101,7 +101,7 @@ impl<'a> Iterator for BALSlotIter<'a> { return None; } - return Some((address, slot)); + return Some((address, StorageKey::from(slot))); } // Move to next account @@ -177,13 +177,11 @@ where let mut storage_map = HashedStorage::new(false); for slot_changes in &account_changes.storage_changes { - let hashed_slot = keccak256(slot_changes.slot); + let hashed_slot = keccak256(slot_changes.slot.to_be_bytes::<32>()); // Get the last change for this slot if let Some(last_change) = slot_changes.changes.last() { - storage_map - .storage - .insert(hashed_slot, U256::from_be_bytes(last_change.new_value.0)); + storage_map.storage.insert(hashed_slot, last_change.new_value); } } @@ -237,8 +235,8 @@ mod tests { let provider = StateProviderTest::default(); let address = Address::random(); - let slot = StorageKey::random(); - let value = B256::random(); + let slot = U256::random(); + let value = U256::random(); let slot_changes = SlotChanges { slot, changes: vec![StorageChange::new(0, value)] }; @@ -258,10 +256,10 @@ mod tests { assert!(result.storages.contains_key(&hashed_address)); let storage = result.storages.get(&hashed_address).unwrap(); - let hashed_slot = keccak256(slot); + let hashed_slot = keccak256(slot.to_be_bytes::<32>()); let stored_value = storage.storage.get(&hashed_slot).unwrap(); - assert_eq!(*stored_value, U256::from_be_bytes(value.0)); + assert_eq!(*stored_value, value); } #[test] @@ -392,15 +390,15 @@ mod tests { let provider = StateProviderTest::default(); let address = Address::random(); - let slot = StorageKey::random(); + let slot = U256::random(); // Multiple changes to the same slot - should take the last one let slot_changes = SlotChanges { slot, changes: vec![ - StorageChange::new(0, B256::from(U256::from(100).to_be_bytes::<32>())), - StorageChange::new(1, B256::from(U256::from(200).to_be_bytes::<32>())), - StorageChange::new(2, B256::from(U256::from(300).to_be_bytes::<32>())), + StorageChange::new(0, U256::from(100)), + StorageChange::new(1, U256::from(200)), + StorageChange::new(2, U256::from(300)), ], }; @@ -418,7 +416,7 @@ mod tests { let hashed_address = keccak256(address); let storage = result.storages.get(&hashed_address).unwrap(); - let hashed_slot = keccak256(slot); + let hashed_slot = keccak256(slot.to_be_bytes::<32>()); let stored_value = storage.storage.get(&hashed_slot).unwrap(); @@ -438,15 +436,15 @@ mod tests { address: addr1, storage_changes: vec![ SlotChanges { - slot: StorageKey::from(U256::from(100)), - changes: vec![StorageChange::new(0, B256::ZERO)], + slot: U256::from(100), + changes: vec![StorageChange::new(0, U256::ZERO)], }, SlotChanges { - slot: StorageKey::from(U256::from(101)), - changes: vec![StorageChange::new(0, B256::ZERO)], + slot: U256::from(101), + changes: vec![StorageChange::new(0, U256::ZERO)], }, ], - storage_reads: vec![StorageKey::from(U256::from(102))], + storage_reads: vec![U256::from(102)], balance_changes: vec![], nonce_changes: vec![], code_changes: vec![], @@ -456,10 +454,10 @@ mod tests { let account2 = AccountChanges { address: addr2, storage_changes: vec![SlotChanges { - slot: StorageKey::from(U256::from(200)), - changes: vec![StorageChange::new(0, B256::ZERO)], + slot: U256::from(200), + changes: vec![StorageChange::new(0, U256::ZERO)], }], - storage_reads: vec![StorageKey::from(U256::from(201))], + storage_reads: vec![U256::from(201)], balance_changes: vec![], nonce_changes: vec![], code_changes: vec![], @@ -470,15 +468,15 @@ mod tests { address: addr3, storage_changes: vec![ SlotChanges { - slot: StorageKey::from(U256::from(300)), - changes: vec![StorageChange::new(0, B256::ZERO)], + slot: U256::from(300), + changes: vec![StorageChange::new(0, U256::ZERO)], }, SlotChanges { - slot: StorageKey::from(U256::from(301)), - changes: vec![StorageChange::new(0, B256::ZERO)], + slot: U256::from(301), + changes: vec![StorageChange::new(0, U256::ZERO)], }, ], - storage_reads: vec![StorageKey::from(U256::from(302))], + storage_reads: vec![U256::from(302)], balance_changes: vec![], nonce_changes: vec![], code_changes: vec![], diff --git a/crates/engine/tree/src/tree/payload_processor/mod.rs b/crates/engine/tree/src/tree/payload_processor/mod.rs index 3df06652d3..6ba285c3bc 100644 --- a/crates/engine/tree/src/tree/payload_processor/mod.rs +++ b/crates/engine/tree/src/tree/payload_processor/mod.rs @@ -1059,7 +1059,9 @@ mod tests { nonce: rng.random::(), code_hash: KECCAK_EMPTY, code: Some(Default::default()), + account_id: None, }, + original_info: Box::new(AccountInfo::default()), storage, status: AccountStatus::Touched, transaction_id: 0, diff --git a/crates/engine/tree/src/tree/payload_processor/multiproof.rs b/crates/engine/tree/src/tree/payload_processor/multiproof.rs index a61ef52536..d3907720b5 100644 --- a/crates/engine/tree/src/tree/payload_processor/multiproof.rs +++ b/crates/engine/tree/src/tree/payload_processor/multiproof.rs @@ -1811,7 +1811,9 @@ mod tests { nonce: 1, code_hash: Default::default(), code: Default::default(), + account_id: None, }, + original_info: Box::new(revm_state::AccountInfo::default()), transaction_id: Default::default(), storage: Default::default(), status: revm_state::AccountStatus::Touched, @@ -1828,7 +1830,9 @@ mod tests { nonce: 2, code_hash: Default::default(), code: Default::default(), + account_id: None, }, + original_info: Box::new(revm_state::AccountInfo::default()), transaction_id: Default::default(), storage: Default::default(), status: revm_state::AccountStatus::Touched, @@ -1930,7 +1934,9 @@ mod tests { nonce: 1, code_hash: Default::default(), code: Default::default(), + account_id: None, }, + original_info: Box::new(revm_state::AccountInfo::default()), transaction_id: Default::default(), storage: Default::default(), status: revm_state::AccountStatus::Touched, diff --git a/crates/ethereum/evm/src/lib.rs b/crates/ethereum/evm/src/lib.rs index dbc686fe4f..be7d160174 100644 --- a/crates/ethereum/evm/src/lib.rs +++ b/crates/ethereum/evm/src/lib.rs @@ -188,6 +188,7 @@ where block: &'a SealedBlock, ) -> Result, Self::Error> { Ok(EthBlockExecutionCtx { + tx_count_hint: Some(block.transaction_count()), parent_hash: block.header().parent_hash, parent_beacon_block_root: block.header().parent_beacon_block_root, ommers: &block.body().ommers, @@ -202,6 +203,7 @@ where attributes: Self::NextBlockEnvCtx, ) -> Result, Self::Error> { Ok(EthBlockExecutionCtx { + tx_count_hint: None, parent_hash: parent.hash(), parent_beacon_block_root: attributes.parent_beacon_block_root, ommers: &[], @@ -238,8 +240,9 @@ where revm_spec_by_timestamp_and_block_number(self.chain_spec(), timestamp, block_number); // configure evm env based on parent block - let mut cfg_env = - CfgEnv::new().with_chain_id(self.chain_spec().chain().id()).with_spec(spec); + let mut cfg_env = CfgEnv::new() + .with_chain_id(self.chain_spec().chain().id()) + .with_spec_and_mainnet_gas_params(spec); if let Some(blob_params) = &blob_params { cfg_env.set_max_blobs_per_tx(blob_params.max_blobs_per_tx); @@ -280,6 +283,7 @@ where payload: &'a ExecutionData, ) -> Result, Self::Error> { Ok(EthBlockExecutionCtx { + tx_count_hint: Some(payload.payload.transactions().len()), parent_hash: payload.parent_hash(), parent_beacon_block_root: payload.sidecar.parent_beacon_block_root(), ommers: &[], @@ -407,7 +411,7 @@ mod tests { let db = CacheDB::>::default(); let evm_env = EvmEnv { - cfg_env: CfgEnv::new().with_spec(SpecId::CONSTANTINOPLE), + cfg_env: CfgEnv::new().with_spec_and_mainnet_gas_params(SpecId::CONSTANTINOPLE), ..Default::default() }; @@ -474,7 +478,7 @@ mod tests { let db = CacheDB::>::default(); let evm_env = EvmEnv { - cfg_env: CfgEnv::new().with_spec(SpecId::CONSTANTINOPLE), + cfg_env: CfgEnv::new().with_spec_and_mainnet_gas_params(SpecId::CONSTANTINOPLE), ..Default::default() }; diff --git a/crates/ethereum/evm/tests/execute.rs b/crates/ethereum/evm/tests/execute.rs index 61e0c1c4b6..c7d0a08337 100644 --- a/crates/ethereum/evm/tests/execute.rs +++ b/crates/ethereum/evm/tests/execute.rs @@ -38,6 +38,7 @@ fn create_database_with_beacon_root_contract() -> CacheDB { code_hash: keccak256(BEACON_ROOTS_CODE.clone()), nonce: 1, code: Some(Bytecode::new_raw(BEACON_ROOTS_CODE.clone())), + account_id: None, }; db.insert_account_info(BEACON_ROOTS_ADDRESS, beacon_root_contract_account); @@ -53,6 +54,7 @@ fn create_database_with_withdrawal_requests_contract() -> CacheDB { balance: U256::ZERO, code_hash: keccak256(WITHDRAWAL_REQUEST_PREDEPLOY_CODE.clone()), code: Some(Bytecode::new_raw(WITHDRAWAL_REQUEST_PREDEPLOY_CODE.clone())), + account_id: None, }; db.insert_account_info( @@ -339,6 +341,7 @@ fn create_database_with_block_hashes(latest_block: u64) -> CacheDB { code_hash: keccak256(HISTORY_STORAGE_CODE.clone()), code: Some(Bytecode::new_raw(HISTORY_STORAGE_CODE.clone())), nonce: 1, + account_id: None, }; db.insert_account_info(HISTORY_STORAGE_ADDRESS, blockhashes_contract_account); diff --git a/crates/ethereum/payload/src/lib.rs b/crates/ethereum/payload/src/lib.rs index a2baad0410..e77e7a6324 100644 --- a/crates/ethereum/payload/src/lib.rs +++ b/crates/ethereum/payload/src/lib.rs @@ -155,7 +155,7 @@ where let state_provider = client.state_by_block_hash(parent_header.hash())?; let state = StateProviderDatabase::new(state_provider.as_ref()); let mut db = - State::builder().with_database_ref(cached_reads.as_db(state)).with_bundle_update().build(); + State::builder().with_database(cached_reads.as_db_mut(state)).with_bundle_update().build(); let mut builder = evm_config .builder_for_next_block( @@ -247,7 +247,7 @@ where limit: MAX_RLP_BLOCK_SIZE, }, ); - continue; + continue } // There's only limited amount of blob space available per block, so we need to check if diff --git a/crates/evm/evm/src/execute.rs b/crates/evm/evm/src/execute.rs index fca8f6241d..e70db5296b 100644 --- a/crates/evm/evm/src/execute.rs +++ b/crates/evm/evm/src/execute.rs @@ -741,6 +741,7 @@ mod tests { nonce, code_hash: KECCAK_EMPTY, code: None, + account_id: None, }; state.insert_account(addr, account_info); state @@ -777,8 +778,13 @@ mod tests { let mut state = setup_state_with_account(addr1, 100, 1); - let account2 = - AccountInfo { balance: U256::from(200), nonce: 1, code_hash: KECCAK_EMPTY, code: None }; + let account2 = AccountInfo { + balance: U256::from(200), + nonce: 1, + code_hash: KECCAK_EMPTY, + code: None, + account_id: None, + }; state.insert_account(addr2, account2); let mut increments = HashMap::default(); @@ -799,8 +805,13 @@ mod tests { let mut state = setup_state_with_account(addr1, 100, 1); - let account2 = - AccountInfo { balance: U256::from(200), nonce: 1, code_hash: KECCAK_EMPTY, code: None }; + let account2 = AccountInfo { + balance: U256::from(200), + nonce: 1, + code_hash: KECCAK_EMPTY, + code: None, + account_id: None, + }; state.insert_account(addr2, account2); let mut increments = HashMap::default(); diff --git a/crates/evm/evm/src/lib.rs b/crates/evm/evm/src/lib.rs index 2ed79d7297..e5bd089255 100644 --- a/crates/evm/evm/src/lib.rs +++ b/crates/evm/evm/src/lib.rs @@ -399,7 +399,7 @@ pub trait ConfigureEvm: Clone + Debug + Send + Sync + Unpin { /// // Complete block building /// let outcome = builder.finish(state_provider)?; /// ``` - fn builder_for_next_block<'a, DB: Database>( + fn builder_for_next_block<'a, DB: Database + 'a>( &'a self, db: &'a mut State, parent: &'a SealedHeader<::BlockHeader>, diff --git a/crates/evm/execution-types/src/execution_outcome.rs b/crates/evm/execution-types/src/execution_outcome.rs index 1b68be35af..6df354219e 100644 --- a/crates/evm/execution-types/src/execution_outcome.rs +++ b/crates/evm/execution-types/src/execution_outcome.rs @@ -934,10 +934,20 @@ mod tests { let address3 = Address::random(); // Set up account info with some changes - let account_info1 = - AccountInfo { nonce: 1, balance: U256::from(100), code_hash: B256::ZERO, code: None }; - let account_info2 = - AccountInfo { nonce: 2, balance: U256::from(200), code_hash: B256::ZERO, code: None }; + let account_info1 = AccountInfo { + nonce: 1, + balance: U256::from(100), + code_hash: B256::ZERO, + code: None, + account_id: None, + }; + let account_info2 = AccountInfo { + nonce: 2, + balance: U256::from(200), + code_hash: B256::ZERO, + code: None, + account_id: None, + }; // Set up the bundle state with these accounts let mut bundle_state = BundleState::default(); diff --git a/crates/optimism/evm/src/lib.rs b/crates/optimism/evm/src/lib.rs index fa3cf87696..1dbd8c7e38 100644 --- a/crates/optimism/evm/src/lib.rs +++ b/crates/optimism/evm/src/lib.rs @@ -230,7 +230,9 @@ where let spec = revm_spec_by_timestamp_after_bedrock(self.chain_spec(), timestamp); - let cfg_env = CfgEnv::new().with_chain_id(self.chain_spec().chain().id()).with_spec(spec); + let cfg_env = CfgEnv::new() + .with_chain_id(self.chain_spec().chain().id()) + .with_spec_and_mainnet_gas_params(spec); let blob_excess_gas_and_price = spec .into_eth_spec() @@ -362,7 +364,8 @@ mod tests { let db = CacheDB::>::default(); // Create a custom configuration environment with a chain ID of 111 - let cfg = CfgEnv::new().with_chain_id(111).with_spec(OpSpecId::default()); + let cfg = + CfgEnv::new().with_chain_id(111).with_spec_and_mainnet_gas_params(OpSpecId::default()); let evm_env = EvmEnv { cfg_env: cfg.clone(), ..Default::default() }; @@ -400,8 +403,10 @@ mod tests { let db = CacheDB::>::default(); - let evm_env = - EvmEnv { cfg_env: CfgEnv::new().with_spec(OpSpecId::ECOTONE), ..Default::default() }; + let evm_env = EvmEnv { + cfg_env: CfgEnv::new().with_spec_and_mainnet_gas_params(OpSpecId::ECOTONE), + ..Default::default() + }; let evm = evm_config.evm_with_env(db, evm_env.clone()); @@ -427,7 +432,8 @@ mod tests { let evm_config = test_evm_config(); let db = CacheDB::>::default(); - let cfg = CfgEnv::new().with_chain_id(111).with_spec(OpSpecId::default()); + let cfg = + CfgEnv::new().with_chain_id(111).with_spec_and_mainnet_gas_params(OpSpecId::default()); let block = BlockEnv::default(); let evm_env = EvmEnv { block_env: block, cfg_env: cfg.clone() }; @@ -463,8 +469,10 @@ mod tests { let evm_config = test_evm_config(); let db = CacheDB::>::default(); - let evm_env = - EvmEnv { cfg_env: CfgEnv::new().with_spec(OpSpecId::ECOTONE), ..Default::default() }; + let evm_env = EvmEnv { + cfg_env: CfgEnv::new().with_spec_and_mainnet_gas_params(OpSpecId::ECOTONE), + ..Default::default() + }; let evm = evm_config.evm_with_env_and_inspector(db, evm_env.clone(), NoOpInspector {}); diff --git a/crates/optimism/node/tests/it/builder.rs b/crates/optimism/node/tests/it/builder.rs index b495fdb47c..3d4eda33f7 100644 --- a/crates/optimism/node/tests/it/builder.rs +++ b/crates/optimism/node/tests/it/builder.rs @@ -19,7 +19,7 @@ use reth_optimism_node::{args::RollupArgs, OpEvmConfig, OpExecutorBuilder, OpNod use reth_optimism_primitives::OpPrimitives; use reth_provider::providers::BlockchainProvider; use revm::{ - context::{BlockEnv, Cfg, ContextTr, TxEnv}, + context::{BlockEnv, ContextTr, TxEnv}, context_interface::result::EVMError, inspector::NoOpInspector, interpreter::interpreter::EthInterpreter, @@ -103,7 +103,7 @@ fn test_setup_custom_precompiles() { input: EvmEnv, ) -> Self::Evm { let mut op_evm = OpEvmFactory::default().create_evm(db, input); - *op_evm.components_mut().2 = UniPrecompiles::precompiles(op_evm.ctx().cfg().spec()); + *op_evm.components_mut().2 = UniPrecompiles::precompiles(*op_evm.ctx().cfg().spec()); op_evm } @@ -119,7 +119,7 @@ fn test_setup_custom_precompiles() { ) -> Self::Evm { let mut op_evm = OpEvmFactory::default().create_evm_with_inspector(db, input, inspector); - *op_evm.components_mut().2 = UniPrecompiles::precompiles(op_evm.ctx().cfg().spec()); + *op_evm.components_mut().2 = UniPrecompiles::precompiles(*op_evm.ctx().cfg().spec()); op_evm } diff --git a/crates/optimism/payload/src/builder.rs b/crates/optimism/payload/src/builder.rs index 99bc07065a..05d156ab3b 100644 --- a/crates/optimism/payload/src/builder.rs +++ b/crates/optimism/payload/src/builder.rs @@ -634,7 +634,7 @@ where if sequencer_tx.value().is_eip4844() { return Err(PayloadBuilderError::other( OpPayloadBuilderError::BlobTransactionRejected, - )) + )); } // Convert the transaction to a [RecoveredTx]. This is diff --git a/crates/primitives-traits/src/account.rs b/crates/primitives-traits/src/account.rs index 8c4a496dab..99c148ae2d 100644 --- a/crates/primitives-traits/src/account.rs +++ b/crates/primitives-traits/src/account.rs @@ -238,12 +238,15 @@ impl From for AccountInfo { nonce: reth_acc.nonce, code_hash: reth_acc.bytecode_hash.unwrap_or(KECCAK_EMPTY), code: None, + account_id: None, } } } #[cfg(test)] mod tests { + use std::sync::Arc; + use super::*; use alloy_primitives::{hex_literal::hex, B256, U256}; use reth_codecs::Compact; @@ -304,11 +307,12 @@ mod tests { assert_eq!(len, 17); let mut buf = vec![]; - let bytecode = Bytecode(RevmBytecode::LegacyAnalyzed(LegacyAnalyzedBytecode::new( - Bytes::from(&hex!("ff00")), - 2, - JumpTable::from_slice(&[0], 2), - ))); + let bytecode = + Bytecode(RevmBytecode::LegacyAnalyzed(Arc::new(LegacyAnalyzedBytecode::new( + Bytes::from(&hex!("ff00")), + 2, + JumpTable::from_slice(&[0], 2), + )))); let len = bytecode.to_compact(&mut buf); assert_eq!(len, 16); diff --git a/crates/rpc/rpc-eth-api/src/helpers/call.rs b/crates/rpc/rpc-eth-api/src/helpers/call.rs index 0ad6c7ba0c..359ce9fd0f 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/call.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/call.rs @@ -25,7 +25,11 @@ use reth_evm::{ }; use reth_node_api::BlockBody; use reth_primitives_traits::Recovered; -use reth_revm::{cancelled::CancelOnDrop, database::StateProviderDatabase, db::State}; +use reth_revm::{ + cancelled::CancelOnDrop, + database::StateProviderDatabase, + db::{bal::EvmDatabaseError, State}, +}; use reth_rpc_convert::{RpcConvert, RpcTxReq}; use reth_rpc_eth_types::{ cache::db::StateProviderTraitObjWrapper, @@ -508,7 +512,7 @@ pub trait Call: tx_env: TxEnvFor, ) -> Result>, Self::Error> where - DB: Database + fmt::Debug, + DB: Database> + fmt::Debug, { let mut evm = self.evm_config().evm_with_env(db, evm_env); let res = evm.transact(tx_env).map_err(Self::Error::from_evm_err)?; @@ -526,7 +530,7 @@ pub trait Call: inspector: I, ) -> Result>, Self::Error> where - DB: Database + fmt::Debug, + DB: Database> + fmt::Debug, I: InspectorFor, { let mut evm = self.evm_config().evm_with_env_and_inspector(db, evm_env, inspector); @@ -703,7 +707,7 @@ pub trait Call: target_tx_hash: B256, ) -> Result where - DB: Database + DatabaseCommit + core::fmt::Debug, + DB: Database> + DatabaseCommit + core::fmt::Debug, I: IntoIterator>>, { let mut evm = self.evm_config().evm_with_env(db, evm_env); diff --git a/crates/rpc/rpc-eth-api/src/helpers/estimate.rs b/crates/rpc/rpc-eth-api/src/helpers/estimate.rs index fa9dec303a..e5f46d24af 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/estimate.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/estimate.rs @@ -12,7 +12,7 @@ use reth_errors::ProviderError; use reth_evm::{ConfigureEvm, Database, Evm, EvmEnvFor, EvmFor, TransactionEnv, TxEnvFor}; use reth_revm::{ database::{EvmStateProvider, StateProviderDatabase}, - db::State, + db::{bal::EvmDatabaseError, State}, }; use reth_rpc_convert::{RpcConvert, RpcTxReq}; use reth_rpc_eth_types::{ @@ -165,7 +165,7 @@ pub trait EstimateCall: Call { return Err(RpcInvalidTransactionError::GasRequiredExceedsAllowance { gas_limit: tx_env.gas_limit(), } - .into_eth_err()) + .into_eth_err()); } // Propagate other results (successful or other errors). ethres => ethres?, @@ -186,7 +186,7 @@ pub trait EstimateCall: Call { } else { // the transaction did revert Err(Self::Error::from_revert(output)) - } + }; } }; @@ -313,7 +313,7 @@ pub trait EstimateCall: Call { max_gas_limit: u64, ) -> Result where - DB: Database, + DB: Database>, EthApiError: From, { let req_gas_limit = tx_env.gas_limit(); diff --git a/crates/rpc/rpc-eth-api/src/helpers/trace.rs b/crates/rpc/rpc-eth-api/src/helpers/trace.rs index ef6443c382..13ac247915 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/trace.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/trace.rs @@ -13,7 +13,10 @@ use reth_evm::{ Evm, EvmEnvFor, EvmFor, HaltReasonFor, InspectorFor, TxEnvFor, }; use reth_primitives_traits::{BlockBody, Recovered, RecoveredBlock}; -use reth_revm::{database::StateProviderDatabase, db::State}; +use reth_revm::{ + database::StateProviderDatabase, + db::{bal::EvmDatabaseError, State}, +}; use reth_rpc_eth_types::{cache::db::StateCacheDb, EthApiError}; use reth_storage_api::{ProviderBlock, ProviderTx}; use revm::{context::Block, context_interface::result::ResultAndState, DatabaseCommit}; @@ -32,7 +35,7 @@ pub trait Trace: LoadState> + Call { inspector: I, ) -> Result>, Self::Error> where - DB: Database, + DB: Database>, I: InspectorFor, { let mut evm = self.evm_config().evm_with_env_and_inspector(db, evm_env, inspector); diff --git a/crates/rpc/rpc-eth-types/src/error/api.rs b/crates/rpc/rpc-eth-types/src/error/api.rs index 744314ecb0..9417d04f5a 100644 --- a/crates/rpc/rpc-eth-types/src/error/api.rs +++ b/crates/rpc/rpc-eth-types/src/error/api.rs @@ -5,6 +5,7 @@ use crate::{simulate::EthSimulateError, EthApiError, RevertError}; use alloy_primitives::Bytes; use reth_errors::ProviderError; use reth_evm::{ConfigureEvm, EvmErrorFor, HaltReasonFor}; +use reth_revm::db::bal::EvmDatabaseError; use revm::{context::result::ExecutionResult, context_interface::result::HaltReason}; use super::RpcInvalidTransactionError; @@ -110,10 +111,12 @@ impl AsEthApiError for EthApiError { /// Helper trait to convert from revm errors. pub trait FromEvmError: - From> + FromEvmHalt> + FromRevert + From>> + + FromEvmHalt> + + FromRevert { /// Converts from EVM error to this type. - fn from_evm_err(err: EvmErrorFor) -> Self { + fn from_evm_err(err: EvmErrorFor>) -> Self { err.into() } @@ -131,7 +134,9 @@ pub trait FromEvmError: impl FromEvmError for T where - T: From> + FromEvmHalt> + FromRevert, + T: From>> + + FromEvmHalt> + + FromRevert, Evm: ConfigureEvm, { } diff --git a/crates/rpc/rpc-eth-types/src/error/mod.rs b/crates/rpc/rpc-eth-types/src/error/mod.rs index b2dcc12cea..c7e39527b2 100644 --- a/crates/rpc/rpc-eth-types/src/error/mod.rs +++ b/crates/rpc/rpc-eth-types/src/error/mod.rs @@ -11,6 +11,7 @@ pub use api::{AsEthApiError, FromEthApiError, FromEvmError, IntoEthApiError}; use core::time::Duration; use reth_errors::{BlockExecutionError, BlockValidationError, RethError}; use reth_primitives_traits::transaction::{error::InvalidTransactionError, signed::RecoveryError}; +use reth_revm::db::bal::EvmDatabaseError; use reth_rpc_convert::{CallFeesError, EthTxEnvError, TransactionConversionError}; use reth_rpc_server_types::result::{ block_id_to_str, internal_rpc_err, invalid_params_rpc_err, rpc_err, rpc_error_with_code, @@ -19,8 +20,11 @@ use reth_transaction_pool::error::{ Eip4844PoolTransactionError, Eip7702PoolTransactionError, InvalidPoolTransactionError, PoolError, PoolErrorKind, PoolTransactionError, }; -use revm::context_interface::result::{ - EVMError, HaltReason, InvalidHeader, InvalidTransaction, OutOfGasError, +use revm::{ + context_interface::result::{ + EVMError, HaltReason, InvalidHeader, InvalidTransaction, OutOfGasError, + }, + state::bal::BalError, }; use revm_inspectors::tracing::{DebugInspectorError, MuxError}; use std::convert::Infallible; @@ -404,6 +408,24 @@ impl From for EthApiError { } } +impl From> for EthApiError +where + E: Into, +{ + fn from(value: EvmDatabaseError) -> Self { + match value { + EvmDatabaseError::Bal(err) => err.into(), + EvmDatabaseError::Database(err) => err.into(), + } + } +} + +impl From for EthApiError { + fn from(err: BalError) -> Self { + Self::EvmCustom(format!("bal error: {:?}", err)) + } +} + #[cfg(feature = "js-tracer")] impl From for EthApiError { fn from(error: revm_inspectors::tracing::js::JsInspectorError) -> Self { diff --git a/crates/stateless/src/witness_db.rs b/crates/stateless/src/witness_db.rs index 466b4de30b..86ced51804 100644 --- a/crates/stateless/src/witness_db.rs +++ b/crates/stateless/src/witness_db.rs @@ -76,6 +76,7 @@ where nonce: account.nonce, code_hash: account.code_hash, code: None, + account_id: None, }) }) } diff --git a/crates/storage/errors/Cargo.toml b/crates/storage/errors/Cargo.toml index ac390343c5..d349c5aa6a 100644 --- a/crates/storage/errors/Cargo.toml +++ b/crates/storage/errors/Cargo.toml @@ -26,6 +26,7 @@ derive_more.workspace = true thiserror.workspace = true revm-database-interface.workspace = true +revm-state.workspace = true [features] default = ["std"] @@ -39,4 +40,5 @@ std = [ "revm-database-interface/std", "reth-prune-types/std", "reth-static-file-types/std", + "revm-state/std", ] diff --git a/crates/storage/errors/src/provider.rs b/crates/storage/errors/src/provider.rs index c6d5a2e260..13f8a0faa9 100644 --- a/crates/storage/errors/src/provider.rs +++ b/crates/storage/errors/src/provider.rs @@ -6,7 +6,8 @@ use derive_more::Display; use reth_primitives_traits::{transaction::signed::RecoveryError, GotExpected}; use reth_prune_types::PruneSegmentError; use reth_static_file_types::StaticFileSegment; -use revm_database_interface::DBErrorMarker; +use revm_database_interface::{bal::EvmDatabaseError, DBErrorMarker}; +use revm_state::bal::BalError; /// Provider result type. pub type ProviderResult = Result; @@ -17,6 +18,9 @@ pub enum ProviderError { /// Database error. #[error(transparent)] Database(#[from] DatabaseError), + /// BAL error. + #[error("BAL error:{_0}")] + Bal(BalError), /// Pruning error. #[error(transparent)] Pruning(#[from] PruneSegmentError), @@ -207,6 +211,12 @@ impl From for ProviderError { } } +impl From for EvmDatabaseError { + fn from(error: ProviderError) -> Self { + Self::Database(error) + } +} + /// A root mismatch error at a given block height. #[derive(Clone, Debug, PartialEq, Eq, Display)] #[display("root mismatch at #{block_number} ({block_hash}): {root}")] diff --git a/crates/trie/common/src/hashed_state.rs b/crates/trie/common/src/hashed_state.rs index 283f1d3b69..410fdf0099 100644 --- a/crates/trie/common/src/hashed_state.rs +++ b/crates/trie/common/src/hashed_state.rs @@ -993,6 +993,7 @@ mod tests { nonce: 42, code_hash: B256::random(), code: Some(Bytecode::new_raw(Bytes::from(vec![1, 2]))), + account_id: None, }; let mut storage = StorageWithOriginalValues::default(); @@ -1037,6 +1038,7 @@ mod tests { nonce: 1, code_hash: B256::random(), code: None, + account_id: None, }; // Create hashed accounts with addresses.