Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
68681c6
chore(deps): bump all reth dependencies from v1.11.3 to v2.0.0
randygrok Apr 8, 2026
1cbd6fd
fix(deps): use crates.io for reth-codecs and reth-primitives-traits
randygrok Apr 8, 2026
81bbec4
fix(ev-primitives): adapt to reth v2.0.0 API changes
randygrok Apr 8, 2026
3a7b243
fix(ev-precompiles): adapt to reth v2.0.0 API changes
randygrok Apr 8, 2026
e557ca1
fix(ev-revm): adapt to revm 36 / alloy-evm 0.30 API changes
randygrok Apr 8, 2026
efaf0fc
fix(evolve): adapt consensus to reth v2.0.0, migrate reth-primitives …
randygrok Apr 8, 2026
63c5b1f
fix(node): adapt to reth v2.0.0 breaking changes
randygrok Apr 8, 2026
1589a63
fix(tests): adapt e2e and unit tests to reth v2.0.0
randygrok Apr 8, 2026
26b11e1
fix: resolve clippy warnings after reth v2.0.0 upgrade
randygrok Apr 8, 2026
f06fc84
refactor: remove dead EvolveEnginePayloadBuilderAttributes type
randygrok Apr 8, 2026
9bd9ba7
refactor: remove unused EvEvm::new constructor
randygrok Apr 8, 2026
8dbca52
refactor: log undecodable tx warnings and extract fee recipient helper
randygrok Apr 8, 2026
0fcfd42
docs: clarify why slot_num is hardcoded to 0 in BlockEnv
randygrok Apr 8, 2026
c19d051
test: verify payload builder drops invalid raw transactions gracefully
randygrok Apr 8, 2026
8723d4d
Merge remote-tracking branch 'origin/main' into test-reth-v2
randygrok Apr 13, 2026
e1c2701
style: apply cargo fmt after reth v2.0.0 upgrade
randygrok Apr 13, 2026
25b2a47
style: apply nightly cargo fmt for imports_granularity
randygrok Apr 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,629 changes: 800 additions & 829 deletions Cargo.lock

Large diffs are not rendered by default.

115 changes: 56 additions & 59 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,86 +16,84 @@ members = [
[workspace.package]
version = "0.1.0"
edition = "2021"
rust-version = "1.82"
rust-version = "1.93"
license = "MIT OR Apache-2.0"
homepage = "https://github.com/evstack/ev-reth"
repository = "https://github.com/evstack/ev-reth"
authors = ["Evolve Stack Contributors"]

[workspace.dependencies]
# Reth dependencies - Using v1.11.3 stable
reth-chainspec = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-cli = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-cli-util = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-rpc-eth-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-tracing-otlp = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-node-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-node-builder = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-errors = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-trie-db = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-trie-common = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-rpc-eth-types = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-provider = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-storage-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-tracing = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3", default-features = false }
reth-network = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-network-types = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-chain-state = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-db-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-ethereum = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-ethereum-cli = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-basic-payload-builder = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-engine-local = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-engine-primitives = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-ethereum-payload-builder = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-ethereum-primitives = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3", features = ["serde", "serde-bincode-compat", "reth-codec"] }
reth-e2e-test-utils = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3", default-features = false }
reth-evm = { git = "https://github.com/paradigmxyz/reth.git", default-features = false, tag = "v1.11.3" }
reth-evm-ethereum = { git = "https://github.com/paradigmxyz/reth.git", default-features = false, tag = "v1.11.3" }
reth-execution-types = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-node-core = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-node-types = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-payload-builder = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-payload-builder-primitives = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-payload-primitives = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-primitives = { git = "https://github.com/paradigmxyz/reth.git", default-features = false, tag = "v1.11.3" }
reth-ethereum-forks = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-revm = { git = "https://github.com/paradigmxyz/reth.git", default-features = false, tag = "v1.11.3" }
reth-rpc-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-rpc-builder = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-rpc-engine-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-rpc = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-rpc-convert = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
reth-codecs = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3" }
# Reth dependencies - Using v2.0.0 stable
reth-chainspec = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-cli = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-cli-util = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-rpc-eth-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-tracing-otlp = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-node-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-node-builder = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-errors = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-trie-db = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-trie-common = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-rpc-eth-types = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-primitives-traits = { version = "0.1.0", default-features = false }
reth-provider = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-storage-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-tracing = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0", default-features = false }
reth-network = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-network-types = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-chain-state = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-db-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-ethereum = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-ethereum-cli = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-basic-payload-builder = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-engine-local = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-engine-primitives = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-ethereum-payload-builder = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-ethereum-primitives = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0", features = ["serde", "reth-codec"] }
reth-e2e-test-utils = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0", default-features = false }
reth-evm = { git = "https://github.com/paradigmxyz/reth.git", default-features = false, tag = "v2.0.0" }
reth-evm-ethereum = { git = "https://github.com/paradigmxyz/reth.git", default-features = false, tag = "v2.0.0" }
reth-execution-types = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-node-core = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-node-types = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-payload-builder = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-payload-builder-primitives = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-payload-primitives = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-ethereum-forks = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-revm = { git = "https://github.com/paradigmxyz/reth.git", default-features = false, tag = "v2.0.0" }
reth-rpc-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-rpc-builder = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-rpc-engine-api = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-rpc = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-rpc-convert = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0" }
reth-codecs = { version = "0.1.0", default-features = false }

ev-revm = { path = "crates/ev-revm" }
ev-primitives = { path = "crates/ev-primitives" }


# Consensus dependencies
reth-consensus = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3", default-features = false }
reth-consensus-common = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3", default-features = false }
reth-ethereum-consensus = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3", default-features = false }
reth-consensus = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0", default-features = false }
reth-consensus-common = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0", default-features = false }
reth-ethereum-consensus = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0", default-features = false }

# Test dependencies
reth-testing-utils = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3", default-features = false }
reth-db = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3", default-features = false }
reth-tasks = { git = "https://github.com/paradigmxyz/reth.git", tag = "v1.11.3", default-features = false }
reth-testing-utils = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0", default-features = false }
reth-db = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0", default-features = false }
reth-tasks = { git = "https://github.com/paradigmxyz/reth.git", tag = "v2.0.0", default-features = false }

revm = { version = "34.0.0", default-features = false }
revm-context-interface = { version = "14.0.0", default-features = false }
revm = { version = "36.0.0", default-features = false }

# Alloy dependencies (aligned to reth v1.11.3)
# Alloy dependencies (aligned to reth v2.0.0)
alloy = { version = "1.8.3", features = [
"contract",
"providers",
"provider-http",
"signers",
"reqwest-rustls-tls",
], default-features = false }
alloy-evm = { version = "0.27.2", default-features = false }
alloy-evm = { version = "0.30.0", default-features = false }
alloy-eips = { version = "1.8.3", default-features = false }
alloy-network = { version = "1.8.3", default-features = false }
alloy-provider = { version = "1.8.3", default-features = false }
Expand All @@ -118,8 +116,7 @@ alloy-sol-types = { version = "1.5.6", default-features = false }
# Utility dependencies
bytes = "1.10.1"

revm-inspector = "15.0.0"
revm-inspectors = "0.34.2"
revm-inspectors = "0.36.0"

# force newer nybbles for const push_unchecked (needed for Rust 1.92+)
nybbles = "0.4.8"
Expand Down
1 change: 0 additions & 1 deletion crates/ev-precompiles/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ license = "MIT"

[dependencies]
# Reth
reth-primitives = { workspace = true }
reth-ethereum = { workspace = true }
reth-revm = { workspace = true }

Expand Down
4 changes: 0 additions & 4 deletions crates/ev-precompiles/src/mint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -251,10 +251,6 @@ impl Precompile for MintPrecompile {
}
}
}

fn is_pure(&self) -> bool {
false
}
}

#[cfg(test)]
Expand Down
5 changes: 1 addition & 4 deletions crates/ev-primitives/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,5 @@ bytes = { workspace = true }
reth-codecs = { workspace = true }
reth-db-api = { workspace = true }
reth-ethereum-primitives = { workspace = true }
reth-primitives-traits = { workspace = true, features = ["serde-bincode-compat"] }
reth-primitives-traits = { workspace = true }
serde = { workspace = true, features = ["derive"] }

[features]
serde-bincode-compat = ["reth-primitives-traits/serde-bincode-compat"]
5 changes: 1 addition & 4 deletions crates/ev-primitives/src/pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,14 @@
//! - [`InMemorySize`]: Memory accounting for pool size limits
//! - [`SignerRecoverable`]: Sender address recovery for validation
//! - [`TxHashRef`]: Transaction hash access for deduplication
//! - [`SignedTransaction`]: Marker trait for signed transaction types

use alloy_consensus::{
error::ValueError,
transaction::{SignerRecoverable, TxHashRef},
TransactionEnvelope,
};
use alloy_primitives::{Address, B256};
use reth_primitives_traits::{InMemorySize, SignedTransaction};
use reth_primitives_traits::InMemorySize;

use crate::tx::{EvNodeSignedTx, EvTxEnvelope};

Expand Down Expand Up @@ -85,5 +84,3 @@ impl From<EvPooledTxEnvelope> for EvTxEnvelope {
}
}
}

impl SignedTransaction for EvPooledTxEnvelope {}
15 changes: 4 additions & 11 deletions crates/ev-primitives/src/tx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,10 @@ use alloy_rlp::{bytes::Buf, BufMut, Decodable, Encodable, Header, RlpDecodable,
use reth_codecs::{
alloy::transaction::{CompactEnvelope, Envelope, FromTxCompact, ToTxCompact},
txtype::COMPACT_EXTENDED_IDENTIFIER_FLAG,
Compact,
Compact, DecompressError,
};
use reth_db_api::{
table::{Compress, Decompress},
DatabaseError,
};
use reth_primitives_traits::{InMemorySize, SignedTransaction};
use reth_db_api::table::{Compress, Decompress};
use reth_primitives_traits::InMemorySize;
use std::vec::Vec;

/// EIP-2718 transaction type for EvNode batch + sponsorship.
Expand Down Expand Up @@ -523,10 +520,6 @@ impl Compact for EvTxEnvelope {
}
}

impl SignedTransaction for EvTxEnvelope {}

impl reth_primitives_traits::serde_bincode_compat::RlpBincode for EvTxEnvelope {}

impl Compress for EvTxEnvelope {
type Compressed = Vec<u8>;

Expand All @@ -536,7 +529,7 @@ impl Compress for EvTxEnvelope {
}

impl Decompress for EvTxEnvelope {
fn decompress(value: &[u8]) -> Result<Self, DatabaseError> {
fn decompress(value: &[u8]) -> Result<Self, DecompressError> {
let (obj, _) = Compact::from_compact(value, value.len());
Ok(obj)
}
Expand Down
3 changes: 0 additions & 3 deletions crates/ev-revm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,8 @@ alloy-evm.workspace = true
alloy-primitives.workspace = true
reth-revm.workspace = true
reth-evm.workspace = true
reth-primitives.workspace = true
reth-evm-ethereum.workspace = true
revm-inspector.workspace = true
revm-inspectors.workspace = true
revm-context-interface.workspace = true
thiserror.workspace = true
ev-precompiles = { path = "../ev-precompiles" }
ev-primitives = { path = "../ev-primitives" }
Expand Down
27 changes: 2 additions & 25 deletions crates/ev-revm/src/evm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,14 @@ use reth_revm::{
instructions::EthInstructions, EthFrame, EthPrecompiles, EvmTr, FrameInitOrResult,
FrameTr, ItemOrResult, PrecompileProvider,
},
inspector::{InspectEvm, InspectSystemCallEvm, Inspector, InspectorEvmTr},
inspector::{InspectEvm, InspectSystemCallEvm, Inspector, InspectorEvmTr, JournalExt},
interpreter::{interpreter::EthInterpreter, InterpreterResult},
primitives::hardfork::SpecId,
state::EvmState,
ExecuteEvm, SystemCallEvm,
},
Context,
};
use revm_inspector::JournalExt;
use std::ops::{Deref, DerefMut};

/// Convenience alias matching the stock mainnet EVM signature.
Expand All @@ -37,28 +36,6 @@ pub struct EvEvm<CTX, INSP, PRECOMP = EthPrecompiles> {
inspect: bool,
}

impl<CTX, INSP, P> EvEvm<CTX, INSP, P>
where
CTX: ContextTr + ContextSetters,
P: Default,
{
/// Creates a new wrapper configured with the provided redirect policy.
pub fn new(ctx: CTX, inspector: INSP, redirect: Option<BaseFeeRedirect>) -> Self {
Self {
inner: Evm {
ctx,
inspector,
instruction: EthInstructions::new_mainnet(),
precompiles: P::default(),
frame_stack: FrameStack::new(),
},
redirect,
deploy_allowlist: None,
inspect: false,
}
}
}

impl<CTX, INSP, P> EvEvm<CTX, INSP, P> {
/// Wraps an existing EVM instance with the redirect policy.
pub fn from_inner<T>(
Expand Down Expand Up @@ -116,7 +93,7 @@ impl<CTX, INSP, P> EvEvm<CTX, INSP, P> {
}

/// Exposes a mutable reference to the wrapped `Evm`.
pub(crate) fn inner_mut(
pub(crate) const fn inner_mut(
&mut self,
) -> &mut Evm<CTX, INSP, EthInstructions<EthInterpreter, CTX>, P, EthFrame<EthInterpreter>>
{
Expand Down
13 changes: 7 additions & 6 deletions crates/ev-revm/src/factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -319,12 +319,12 @@ impl EvTxEvmFactory {
env: EvmEnv<SpecId>,
inspector: I,
) -> EvRevmEvm<DB, I> {
let precompiles = PrecompilesMap::from_static(Precompiles::new(
PrecompileSpecId::from_spec_id(env.cfg_env.spec),
));
let spec = env.cfg_env.spec;
let precompiles =
PrecompilesMap::from_static(Precompiles::new(PrecompileSpecId::from_spec_id(spec)));

let mut journaled_state = reth_revm::revm::Journal::new(db);
journaled_state.set_spec_id(env.cfg_env.spec);
journaled_state.set_spec_id(spec);

let ctx = Context {
block: env.block_env,
Expand All @@ -339,7 +339,7 @@ impl EvTxEvmFactory {
RevmEvm {
ctx,
inspector,
instruction: EthInstructions::new_mainnet(),
instruction: EthInstructions::new_mainnet_with_spec(spec),
precompiles,
frame_stack: FrameStack::new(),
}
Expand Down Expand Up @@ -531,9 +531,10 @@ mod tests {
.transact_raw(tx)
.expect("transaction executes without error");

let ExecutionResult::Success { gas_used, .. } = result_and_state.result else {
let ExecutionResult::Success { gas, .. } = result_and_state.result else {
panic!("expected successful execution");
};
let gas_used = gas.used();

let state: EvmState = result_and_state.state;
let sink_account = state
Expand Down
Loading
Loading