From a4a7a3d7ef3bdaf1763c5c61eee4d3359b4612c4 Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Mon, 20 Oct 2025 16:38:51 +0200 Subject: [PATCH 01/15] Add EVM backend support --- crates/cli/src/opts/build/revive.rs | 14 +- crates/cli/src/utils/mod.rs | 33 +++- crates/config/src/revive.rs | 4 +- crates/forge/tests/cli/config.rs | 4 +- crates/forge/tests/cli/revive_vm.rs | 57 +++++++ crates/forge/tests/it/revive/migration.rs | 63 ++++--- crates/forge/tests/it/test_helpers.rs | 6 +- crates/revive-strategy/src/cheatcodes/mod.rs | 154 +++++++++++------- .../revive-strategy/src/executor/context.rs | 22 ++- crates/revive-strategy/src/executor/runner.rs | 5 +- crates/revive-strategy/src/lib.rs | 27 ++- 11 files changed, 285 insertions(+), 104 deletions(-) diff --git a/crates/cli/src/opts/build/revive.rs b/crates/cli/src/opts/build/revive.rs index b98b59d6a4f98..601a1fb640bd6 100644 --- a/crates/cli/src/opts/build/revive.rs +++ b/crates/cli/src/opts/build/revive.rs @@ -15,14 +15,14 @@ pub struct ResolcOpts { )] pub resolc_compile: Option, - /// Enable PVM mode at startup (independent of compilation) + /// Use pallet-revive runtime backend #[arg( - long = "resolc-startup", - help = "Enable PVM mode at startup", - value_name = "RESOLC_STARTUP", + long = "polkadot", + help = "Use pallet-revive runtime backend", + value_name = "POLKADOT", action = clap::ArgAction::SetTrue )] - pub resolc_startup: Option, + pub polkadot: Option, /// Specify the resolc version, or a path to a local resolc, to build with. /// @@ -88,8 +88,8 @@ impl ResolcOpts { resolc.resolc_compile ); set_if_some!( - self.resolc_startup.and_then(|v| if v { Some(true) } else { None }), - resolc.resolc_startup + self.polkadot.and_then(|v| if v { Some(true) } else { None }), + resolc.polkadot ); set_if_some!( self.use_resolc.as_ref().map(|v| SolcReq::from(v.trim_start_matches("resolc:"))), diff --git a/crates/cli/src/utils/mod.rs b/crates/cli/src/utils/mod.rs index 1591f288c9e03..ad9a6db127bc1 100644 --- a/crates/cli/src/utils/mod.rs +++ b/crates/cli/src/utils/mod.rs @@ -133,13 +133,32 @@ pub fn get_provider_builder(config: &Config) -> Result { /// Return an [ExecutorStrategy] via the config. pub fn get_executor_strategy(config: &Config) -> ExecutorStrategy { - // TODO: using resolc compiler: `[FAIL: EvmError: StackUnderflow] constructor() (gas: 0)` - if config.resolc.resolc_compile { - info!("using revive strategy"); - use revive_strategy::ReviveExecutorStrategyBuilder; - ExecutorStrategy::new_revive(config.resolc.resolc_startup) - } else { - ExecutorStrategy::new_evm() + use revive_strategy::{ReviveExecutorStrategyBuilder, ReviveRuntimeMode}; + + let polkadot = config.resolc.polkadot; + let resolc = config.resolc.resolc_compile; + + match (resolc, polkadot) { + // (default) - Standard Foundry EVM test + (false, false) => { + info!("using standard EVM strategy"); + ExecutorStrategy::new_evm() + } + // --resolc - Run PolkaVM backend on pallet-revive (PVM) + (true, false) => { + info!("using revive strategy with PVM backend"); + ExecutorStrategy::new_revive(ReviveRuntimeMode::Pvm) + } + // --resolc --polkadot - Run PolkaVM backend on pallet-revive (PVM) + (true, true) => { + info!("using revive strategy with PVM backend (polkadot mode)"); + ExecutorStrategy::new_revive(ReviveRuntimeMode::Pvm) + } + // --polkadot (without resolc) - Run EVM backend on pallet-revive + (false, true) => { + info!("using revive strategy with EVM backend on pallet-revive"); + ExecutorStrategy::new_revive(ReviveRuntimeMode::Evm) + } } } diff --git a/crates/config/src/revive.rs b/crates/config/src/revive.rs index 4575dee5a02e7..d7cc3b93e3707 100644 --- a/crates/config/src/revive.rs +++ b/crates/config/src/revive.rs @@ -20,8 +20,8 @@ pub struct ResolcConfig { /// Enable compilation using resolc pub resolc_compile: bool, - /// Enable PVM mode at startup (independent of compilation) - pub resolc_startup: bool, + /// Use pallet-revive runtime backend + pub polkadot: bool, /// The resolc compiler pub resolc: Option, diff --git a/crates/forge/tests/cli/config.rs b/crates/forge/tests/cli/config.rs index ae2eeca9a9b9e..0e6ae580d6b44 100644 --- a/crates/forge/tests/cli/config.rs +++ b/crates/forge/tests/cli/config.rs @@ -1065,7 +1065,7 @@ path = "out" [profile.default.resolc] resolc_compile = false -resolc_startup = false +polkadot = false [fmt] line_length = 120 @@ -1345,7 +1345,7 @@ exclude = [] "script_execution_protection": true, "resolc": { "resolc_compile": false, - "resolc_startup": false, + "polkadot": false, "resolc": null, "optimizer_mode": null, "heap_size": null, diff --git a/crates/forge/tests/cli/revive_vm.rs b/crates/forge/tests/cli/revive_vm.rs index 02698066b546d..acf099a3e1ba1 100644 --- a/crates/forge/tests/cli/revive_vm.rs +++ b/crates/forge/tests/cli/revive_vm.rs @@ -331,3 +331,60 @@ Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests) "#]]); }); + +// Test --polkadot flag: EVM execution on pallet-revive backend +forgetest!(polkadot_evm_backend, |prj, cmd| { + prj.insert_ds_test(); + prj.insert_vm(); + prj.add_source( + "Counter.sol", + r#" +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +contract Counter { + uint256 public number; + + constructor(uint256 _initial) { + number = _initial; + } + + function increment() public { + number = number + 1; + } + + function getNumber() public view returns (uint256) { + return number; + } +} +"#, + ) + .unwrap(); + + prj.add_source( + "CounterTest.t.sol", + r#" +import "./test.sol"; +import {Counter} from "./Counter.sol"; + +contract CounterTest is DSTest { + function test_PolkadotEVMBackend() public { + // This test runs EVM bytecode on pallet-revive EVM backend + Counter counter = new Counter(42); + assertEq(counter.getNumber(), 42); + + counter.increment(); + assertEq(counter.getNumber(), 43); + + counter.increment(); + assertEq(counter.getNumber(), 44); + } +} +"#, + ) + .unwrap(); + + // Test with --polkadot flag (EVM backend on pallet-revive) + cmd.args(["test", "--polkadot", "-vvv"]).assert_success(); +}); + diff --git a/crates/forge/tests/it/revive/migration.rs b/crates/forge/tests/it/revive/migration.rs index 43b9485cdaa33..2d3605d290c69 100644 --- a/crates/forge/tests/it/revive/migration.rs +++ b/crates/forge/tests/it/revive/migration.rs @@ -3,55 +3,80 @@ use crate::{config::*, test_helpers::TEST_DATA_REVIVE}; use foundry_test_utils::Filter; use revm::primitives::hardfork::SpecId; +use revive_strategy::ReviveRuntimeMode; #[tokio::test(flavor = "multi_thread")] -async fn test_revive_balance_migration() { - let runner = TEST_DATA_REVIVE.runner_revive(); +async fn test_revive_balance_migration_pvm() { + let runtime_mode = ReviveRuntimeMode::Pvm; + let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = Filter::new("testBalanceMigration", "EvmReviveMigrationTest", ".*/revive/.*"); + TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; +} +#[tokio::test(flavor = "multi_thread")] +async fn test_revive_balance_migration_evm() { + let runtime_mode = ReviveRuntimeMode::Evm; + let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); + let filter = Filter::new("testBalanceMigration", "EvmReviveMigrationTest", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } #[tokio::test(flavor = "multi_thread")] -async fn test_revive_nonce_migration() { - let runner = TEST_DATA_REVIVE.runner_revive(); +async fn test_revive_nonce_migration_pvm() { + let runtime_mode = ReviveRuntimeMode::Pvm; + let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = Filter::new("testNonceMigration", "EvmReviveMigrationTest", ".*/revive/.*"); + TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; +} +#[tokio::test(flavor = "multi_thread")] +async fn test_revive_nonce_migration_evm() { + let runtime_mode = ReviveRuntimeMode::Evm; + let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); + let filter = Filter::new("testNonceMigration", "EvmReviveMigrationTest", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } // Enable it after new pallet-revive is being used // #[tokio::test(flavor = "multi_thread")] -// async fn test_revive_precision_preservation() { -// let runner = TEST_DATA_REVIVE.runner_revive(); -// let filter = Filter::new("testPrecisionPreservation", "EvmReviveMigrationTest", -// ".*/revive/.*"); -// +// async fn test_revive_precision_preservation_pvm() { +// let runtime_mode = ReviveRuntimeMode::Pvm; +// let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); +// let filter = Filter::new("testPrecisionPreservation", "EvmReviveMigrationTest", ".*/revive/.*"); // TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; // } +// #[tokio::test(flavor = "multi_thread")] +// async fn test_revive_precision_preservation_evm() { +// let runtime_mode = ReviveRuntimeMode::Evm; +// let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); +// let filter = Filter::new("testPrecisionPreservation", "EvmReviveMigrationTest", ".*/revive/.*"); +// TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; +// } + +// Bytecode migration tests - currently only PVM mode is fully supported +// EVM mode bytecode migration is a work in progress as pallet-revive's EVM mode +// has strict bytecode validation that may reject some EVM bytecode #[tokio::test(flavor = "multi_thread")] async fn test_revive_bytecode_migration() { - let runner = TEST_DATA_REVIVE.runner_revive(); - let filter = - Filter::new("testBytecodeMigrationToEvm", "EvmReviveMigrationTest", ".*/revive/.*"); - + let runtime_mode = ReviveRuntimeMode::Pvm; + let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); + let filter = Filter::new("testBytecodeMigrationToEvm", "EvmReviveMigrationTest", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } #[tokio::test(flavor = "multi_thread")] async fn test_evm_bytecode_migration() { - let runner = TEST_DATA_REVIVE.runner_revive(); - let filter = - Filter::new("testBytecodeMigrationToRevive", "EvmReviveMigrationTest", ".*/revive/.*"); - + let runtime_mode = ReviveRuntimeMode::Pvm; + let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); + let filter = Filter::new("testBytecodeMigrationToRevive", "EvmReviveMigrationTest", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } // #[tokio::test(flavor = "multi_thread")] // async fn test_revive_timestamp_migration() { -// let runner = TEST_DATA_REVIVE.runner_revive(); +// let runtime_mode = ReviveRuntimeMode::Pvm; +// let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); // let filter = Filter::new("testTimestampMigration", "EvmReviveMigrationTest", ".*/revive/.*"); - // TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; // } diff --git a/crates/forge/tests/it/test_helpers.rs b/crates/forge/tests/it/test_helpers.rs index 4997b2d816451..fc1e2b329c057 100644 --- a/crates/forge/tests/it/test_helpers.rs +++ b/crates/forge/tests/it/test_helpers.rs @@ -19,7 +19,7 @@ use foundry_test_utils::{ fd_lock, init_tracing, rpc::{next_http_archive_rpc_url, next_rpc_endpoint}, }; -use revive_strategy::ReviveExecutorStrategyBuilder; +use revive_strategy::{ReviveExecutorStrategyBuilder, ReviveRuntimeMode}; use revm::primitives::hardfork::SpecId; use std::{ env, fmt, @@ -326,7 +326,7 @@ impl ForgeTestData { } /// Builds a runner with revive strategy for polkadot/substrate testing - pub fn runner_revive(&self) -> MultiContractRunner { + pub fn runner_revive(&self, runtime_mode: ReviveRuntimeMode) -> MultiContractRunner { let mut config = (*self.config).clone(); config.rpc_endpoints = rpc_endpoints(); config.allow_paths.push(manifest_root().to_path_buf()); @@ -345,7 +345,7 @@ impl ForgeTestData { let root = self.project.root(); builder.config = config.clone(); - let mut strategy = ExecutorStrategy::new_revive(true); + let mut strategy = ExecutorStrategy::new_revive(runtime_mode); strategy .runner diff --git a/crates/revive-strategy/src/cheatcodes/mod.rs b/crates/revive-strategy/src/cheatcodes/mod.rs index 31a6ad6f210dd..8b5dfe399eca0 100644 --- a/crates/revive-strategy/src/cheatcodes/mod.rs +++ b/crates/revive-strategy/src/cheatcodes/mod.rs @@ -44,28 +44,34 @@ use revm::{ state::Bytecode, }; pub trait PvmCheatcodeInspectorStrategyBuilder { - fn new_pvm(dual_compiled_contracts: DualCompiledContracts, resolc_startup: bool) -> Self; + fn new_pvm( + dual_compiled_contracts: DualCompiledContracts, + runtime_mode: crate::ReviveRuntimeMode, + ) -> Self; } impl PvmCheatcodeInspectorStrategyBuilder for CheatcodeInspectorStrategy { // Creates a new PVM strategy - fn new_pvm(dual_compiled_contracts: DualCompiledContracts, resolc_startup: bool) -> Self { + fn new_pvm( + dual_compiled_contracts: DualCompiledContracts, + runtime_mode: crate::ReviveRuntimeMode, + ) -> Self { Self { runner: &PvmCheatcodeInspectorStrategyRunner, context: Box::new(PvmCheatcodeInspectorStrategyContext::new( dual_compiled_contracts, - resolc_startup, + runtime_mode, )), } } } -/// Controls the automatic migration to PVM mode during test execution. +/// Controls the automatic migration to pallet-revive during test execution. #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum PvmStartupMigration { /// Defer database migration to a later execution point. /// This is the initial state - waiting for the test contract to be deployed. Defer, - /// Allow database migration to PVM. + /// Allow database migration to pallet-revive (EVM or PVM mode). /// Set by `base_contract_deployed()` when the test contract is deployed. #[default] Allow, @@ -93,23 +99,25 @@ impl PvmStartupMigration { /// PVM-specific strategy context. #[derive(Debug, Default, Clone)] pub struct PvmCheatcodeInspectorStrategyContext { - /// Whether we're using PVM mode + /// Whether we're currently using pallet-revive (migrated from REVM) pub using_pvm: bool, - /// Controls automatic migration to PVM mode + /// Controls automatic migration to pallet-revive pub pvm_startup_migration: PvmStartupMigration, pub dual_compiled_contracts: DualCompiledContracts, + /// Runtime backend mode when using pallet-revive (PVM or EVM) + pub runtime_mode: crate::ReviveRuntimeMode, } impl PvmCheatcodeInspectorStrategyContext { - pub fn new(dual_compiled_contracts: DualCompiledContracts, resolc_startup: bool) -> Self { - Self { - using_pvm: false, // Start in EVM mode by default - pvm_startup_migration: if resolc_startup { - PvmStartupMigration::Defer // Will be set to Allow when test contract deploys - } else { - PvmStartupMigration::Done // Disabled - never migrate - }, + pub fn new( + dual_compiled_contracts: DualCompiledContracts, + runtime_mode: crate::ReviveRuntimeMode, + ) -> Self { + Self { + using_pvm: false, // Start in REVM mode by default + pvm_startup_migration: PvmStartupMigration::Defer, // Will be set to Allow when test contract deploys dual_compiled_contracts, + runtime_mode, } } } @@ -223,7 +231,7 @@ impl CheatcodeInspectorStrategyRunner for PvmCheatcodeInspectorStrategyRunner { let ctx: &mut PvmCheatcodeInspectorStrategyContext = get_context_ref_mut(ccx.state.strategy.context.as_mut()); if *enabled { - select_pvm(ctx, ccx.ecx); + select_revive(ctx, ccx.ecx); } else { select_evm(ctx, ccx.ecx); } @@ -366,10 +374,10 @@ impl CheatcodeInspectorStrategyRunner for PvmCheatcodeInspectorStrategyRunner { let ctx = get_context_ref_mut(ctx); if ctx.pvm_startup_migration.is_allowed() && !ctx.using_pvm { - tracing::info!("startup PVM migration initiated"); - select_pvm(ctx, ecx); + tracing::info!("startup pallet-revive migration initiated"); + select_revive(ctx, ecx); ctx.pvm_startup_migration.done(); - tracing::info!("startup PVM migration completed"); + tracing::info!("startup pallet-revive migration completed"); } } @@ -416,13 +424,13 @@ impl CheatcodeInspectorStrategyRunner for PvmCheatcodeInspectorStrategyRunner { } } -fn select_pvm(ctx: &mut PvmCheatcodeInspectorStrategyContext, data: Ecx<'_, '_, '_>) { +fn select_revive(ctx: &mut PvmCheatcodeInspectorStrategyContext, data: Ecx<'_, '_, '_>) { if ctx.using_pvm { - tracing::info!("already in PVM"); + tracing::info!("already using pallet-revive"); return; } - tracing::info!("switching to PVM"); + tracing::info!("switching to pallet-revive ({} mode)", ctx.runtime_mode); ctx.using_pvm = true; let block_number = data.block.number; @@ -482,29 +490,49 @@ fn select_pvm(ctx: &mut PvmCheatcodeInspectorStrategyContext, data: Ecx<'_, '_, let account_h160 = H160::from_slice(address.as_slice()); - // Skip if contract already exists in PVM + // Skip if contract already exists in pallet-revive if AccountInfo::::load_contract(&account_h160).is_none() { - if let Some(pvm_bytecode) = ctx.dual_compiled_contracts - .find_by_evm_deployed_bytecode_with_immutables(bytecode.original_byte_slice()) - .and_then(|(_, contract)| { - contract.resolc_bytecode.as_bytes() - }) - { + // Determine which bytecode to upload based on runtime mode + let bytecode_to_upload = match ctx.runtime_mode { + crate::ReviveRuntimeMode::Pvm => { + // PVM mode: try to find PVM bytecode from dual_compiled_contracts + ctx.dual_compiled_contracts + .find_by_evm_deployed_bytecode_with_immutables(bytecode.original_byte_slice()) + .and_then(|(_, contract)| { + contract.resolc_bytecode.as_bytes().map(|b| b.to_vec()) + }) + } + crate::ReviveRuntimeMode::Evm => { + // EVM mode: use the EVM bytecode directly + Some(bytecode.original_byte_slice().to_vec()) + } + }; + + if let Some(code_bytes) = bytecode_to_upload { let origin = OriginFor::::signed(Pallet::::account_id()); - let code_hash = Pallet::::bare_upload_code( + let upload_result = Pallet::::bare_upload_code( origin, - pvm_bytecode.to_vec(), + code_bytes.clone(), BalanceOf::::MAX, - ) - .ok() - .map(|upload_result| upload_result.code_hash) - .expect("Failed to upload PVM bytecode"); - - let contract_info = ContractInfo::::new(&account_h160, nonce as u32, code_hash) - .expect("Failed to create contract info"); - - AccountInfo::::insert_contract(&account_h160, contract_info); + ); + match upload_result { + Ok(result) => { + let code_hash = result.code_hash; + let contract_info = ContractInfo::::new(&account_h160, nonce as u32, code_hash) + .expect("Failed to create contract info"); + AccountInfo::::insert_contract(&account_h160, contract_info); + } + Err(err) => { + tracing::warn!( + address = ?address, + runtime_mode = ?ctx.runtime_mode, + bytecode_len = code_bytes.len(), + error = ?err, + "Failed to upload bytecode to pallet-revive, skipping migration" + ); + } + } } else { tracing::info!( address = ?address, @@ -520,11 +548,11 @@ fn select_pvm(ctx: &mut PvmCheatcodeInspectorStrategyContext, data: Ecx<'_, '_, fn select_evm(ctx: &mut PvmCheatcodeInspectorStrategyContext, data: Ecx<'_, '_, '_>) { if !ctx.using_pvm { - tracing::info!("already in EVM"); + tracing::info!("already using REVM"); return; } - tracing::info!("switching to EVM"); + tracing::info!("switching from pallet-revive back to REVM"); ctx.using_pvm = false; execute_with_externalities(|externalities| { @@ -577,6 +605,8 @@ fn select_evm(ctx: &mut PvmCheatcodeInspectorStrategyContext, data: Ecx<'_, '_, }); } +impl PvmCheatcodeInspectorStrategyRunner {} + impl foundry_cheatcodes::CheatcodeInspectorStrategyExt for PvmCheatcodeInspectorStrategyRunner { /// Try handling the `CREATE` within PVM. /// @@ -620,15 +650,26 @@ impl foundry_cheatcodes::CheatcodeInspectorStrategyExt for PvmCheatcodeInspector } let init_code = input.init_code(); - tracing::info!("running create in PVM"); - let find_contract = ctx - .dual_compiled_contracts - .find_bytecode(&init_code.0) - .unwrap_or_else(|| panic!("failed finding contract for {init_code:?}")); - - let constructor_args = find_contract.constructor_args(); - let contract = find_contract.contract(); + // Determine which bytecode to use based on runtime mode + let (code_bytes, constructor_args) = match ctx.runtime_mode { + crate::ReviveRuntimeMode::Pvm => { + // PVM mode: use resolc (PVM) bytecode + tracing::info!("running create in PVM mode with PVM bytecode"); + let find_contract = ctx + .dual_compiled_contracts + .find_bytecode(&init_code.0) + .unwrap_or_else(|| panic!("failed finding contract for {init_code:?}")); + let constructor_args = find_contract.constructor_args(); + let contract = find_contract.contract(); + (contract.resolc_bytecode.as_bytes().unwrap().to_vec(), constructor_args.to_vec()) + } + crate::ReviveRuntimeMode::Evm => { + // EVM mode: use EVM bytecode directly + tracing::info!("running create in EVM mode with EVM bytecode"); + (init_code.0.to_vec(), vec![]) + } + }; let max_gas = <::EthGasEncoder as GasEncoder>>::encode( @@ -638,6 +679,9 @@ impl foundry_cheatcodes::CheatcodeInspectorStrategyExt for PvmCheatcodeInspector ); let gas_limit = sp_core::U256::from(input.gas_limit()).min(max_gas); + // Store code_bytes for use in output + let deployed_bytecode = code_bytes.clone(); + let (res, _call_trace, prestate_trace) = execute_with_externalities(|externalities| { externalities.execute_with(|| { trace::(|| { @@ -652,8 +696,8 @@ impl foundry_cheatcodes::CheatcodeInspectorStrategyExt for PvmCheatcodeInspector ) .expect("gas limit is valid"); let storage_deposit_limit = DepositLimit::Balance(storage_deposit_limit); - let code = Code::Upload(contract.resolc_bytecode.as_bytes().unwrap().to_vec()); - let data = constructor_args.to_vec(); + let code = Code::Upload(code_bytes); + let data = constructor_args; let salt = match input.scheme() { Some(CreateScheme::Create2 { salt }) => Some( salt.as_limbs() @@ -705,7 +749,7 @@ impl foundry_cheatcodes::CheatcodeInspectorStrategyExt for PvmCheatcodeInspector CreateOutcome { result: InterpreterResult { result: InstructionResult::Return, - output: contract.resolc_bytecode.as_bytes().unwrap().clone(), + output: deployed_bytecode.into(), gas, }, address: Some(Address::from_slice(result.addr.as_bytes())), @@ -759,13 +803,13 @@ impl foundry_cheatcodes::CheatcodeInspectorStrategyExt for PvmCheatcodeInspector .unwrap_or_default() { tracing::info!( - "running call in EVM, instead of PVM (Test Contract) {:#?}", + "running call in EVM, instead of pallet-revive (Test Contract) {:#?}", call.bytecode_address ); return None; } - tracing::info!("running call in PVM {:#?}", call); + tracing::info!("running call on pallet-revive with {} {:#?}", ctx.runtime_mode, call); let max_gas = <::EthGasEncoder as GasEncoder>>::encode( diff --git a/crates/revive-strategy/src/executor/context.rs b/crates/revive-strategy/src/executor/context.rs index 909086c771f29..8492e08e1b062 100644 --- a/crates/revive-strategy/src/executor/context.rs +++ b/crates/revive-strategy/src/executor/context.rs @@ -3,20 +3,32 @@ use foundry_compilers::{ }; use foundry_evm::executors::ExecutorStrategyContext; +use crate::ReviveRuntimeMode; + /// Defines the context for [crate::ReviveExecutorStrategyRunner]. -#[derive(Debug, Default, Clone)] +#[derive(Debug, Clone)] pub struct ReviveExecutorStrategyContext { - /// Whether to start in PVM mode (from config) - pub(crate) resolc_startup: bool, + /// Runtime backend mode (PVM or EVM on Polkadot) + pub(crate) runtime_mode: ReviveRuntimeMode, /// Dual compiled contracts. pub(crate) dual_compiled_contracts: DualCompiledContracts, /// Compilation output. pub(crate) compilation_output: Option, } +impl Default for ReviveExecutorStrategyContext { + fn default() -> Self { + Self { + runtime_mode: ReviveRuntimeMode::Pvm, + dual_compiled_contracts: Default::default(), + compilation_output: None, + } + } +} + impl ReviveExecutorStrategyContext { - pub fn new(resolc_startup: bool) -> Self { - Self { resolc_startup, ..Default::default() } + pub fn new(runtime_mode: ReviveRuntimeMode) -> Self { + Self { runtime_mode, ..Default::default() } } } diff --git a/crates/revive-strategy/src/executor/runner.rs b/crates/revive-strategy/src/executor/runner.rs index 9bdcd77dafc7f..f6ed10d9bec5d 100644 --- a/crates/revive-strategy/src/executor/runner.rs +++ b/crates/revive-strategy/src/executor/runner.rs @@ -45,7 +45,10 @@ impl ExecutorStrategyRunner for ReviveExecutorStrategyRunner { ctx: &dyn ExecutorStrategyContext, ) -> foundry_cheatcodes::CheatcodesStrategy { let ctx = get_context_ref(ctx); - CheatcodeInspectorStrategy::new_pvm(ctx.dual_compiled_contracts.clone(), ctx.resolc_startup) + CheatcodeInspectorStrategy::new_pvm( + ctx.dual_compiled_contracts.clone(), + ctx.runtime_mode, + ) } /// Sets the balance of an account. diff --git a/crates/revive-strategy/src/lib.rs b/crates/revive-strategy/src/lib.rs index 578df5e4570fc..4764fbac01940 100644 --- a/crates/revive-strategy/src/lib.rs +++ b/crates/revive-strategy/src/lib.rs @@ -4,6 +4,8 @@ //! in a Polkadot environment. //! //! It is heavily inspired from +use std::fmt::Display; + use foundry_evm::executors::ExecutorStrategy; use polkadot_sdk::{ sp_core::{self, H160}, @@ -24,17 +26,36 @@ mod tracing; pub use cheatcodes::PvmStartupMigration; pub use tracing::trace; +/// Runtime backend mode for pallet-revive +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub enum ReviveRuntimeMode { + /// Run PolkaVM backend on pallet-revive (PVM mode) + Pvm, + #[default] + /// Run EVM backend on pallet-revive (EVM mode on Polkadot) + Evm, +} + +impl Display for ReviveRuntimeMode { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + ReviveRuntimeMode::Pvm => write!(f, "PVM"), + ReviveRuntimeMode::Evm => write!(f, "EVM"), + } + } +} + /// Create Revive strategy for [ExecutorStrategy]. pub trait ReviveExecutorStrategyBuilder { /// Create new revive strategy. - fn new_revive(resolc_startup: bool) -> Self; + fn new_revive(runtime_mode: ReviveRuntimeMode) -> Self; } impl ReviveExecutorStrategyBuilder for ExecutorStrategy { - fn new_revive(resolc_startup: bool) -> Self { + fn new_revive(runtime_mode: ReviveRuntimeMode) -> Self { Self { runner: Box::leak(Box::new(ReviveExecutorStrategyRunner::new())), - context: Box::new(ReviveExecutorStrategyContext::new(resolc_startup)), + context: Box::new(ReviveExecutorStrategyContext::new(runtime_mode)), } } } From 35dd7c6c83cb9c661b300c17c4ab18f5ca47eeaa Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Mon, 20 Oct 2025 16:49:55 +0200 Subject: [PATCH 02/15] Fmt --- crates/forge/tests/cli/revive_vm.rs | 1 - crates/forge/tests/it/revive/migration.rs | 20 ++++++++++--------- crates/revive-strategy/src/cheatcodes/mod.rs | 11 +++++----- crates/revive-strategy/src/executor/runner.rs | 5 +---- crates/revive-strategy/src/lib.rs | 4 ++-- 5 files changed, 19 insertions(+), 22 deletions(-) diff --git a/crates/forge/tests/cli/revive_vm.rs b/crates/forge/tests/cli/revive_vm.rs index acf099a3e1ba1..30764bf128c20 100644 --- a/crates/forge/tests/cli/revive_vm.rs +++ b/crates/forge/tests/cli/revive_vm.rs @@ -387,4 +387,3 @@ contract CounterTest is DSTest { // Test with --polkadot flag (EVM backend on pallet-revive) cmd.args(["test", "--polkadot", "-vvv"]).assert_success(); }); - diff --git a/crates/forge/tests/it/revive/migration.rs b/crates/forge/tests/it/revive/migration.rs index 2d3605d290c69..4f9a6de709cbb 100644 --- a/crates/forge/tests/it/revive/migration.rs +++ b/crates/forge/tests/it/revive/migration.rs @@ -2,8 +2,8 @@ use crate::{config::*, test_helpers::TEST_DATA_REVIVE}; use foundry_test_utils::Filter; -use revm::primitives::hardfork::SpecId; use revive_strategy::ReviveRuntimeMode; +use revm::primitives::hardfork::SpecId; #[tokio::test(flavor = "multi_thread")] async fn test_revive_balance_migration_pvm() { @@ -42,17 +42,17 @@ async fn test_revive_nonce_migration_evm() { // async fn test_revive_precision_preservation_pvm() { // let runtime_mode = ReviveRuntimeMode::Pvm; // let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); -// let filter = Filter::new("testPrecisionPreservation", "EvmReviveMigrationTest", ".*/revive/.*"); -// TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; -// } +// let filter = Filter::new("testPrecisionPreservation", "EvmReviveMigrationTest", +// ".*/revive/.*"); TestConfig::with_filter(runner, +// filter).spec_id(SpecId::SHANGHAI).run().await; } // #[tokio::test(flavor = "multi_thread")] // async fn test_revive_precision_preservation_evm() { // let runtime_mode = ReviveRuntimeMode::Evm; // let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); -// let filter = Filter::new("testPrecisionPreservation", "EvmReviveMigrationTest", ".*/revive/.*"); -// TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; -// } +// let filter = Filter::new("testPrecisionPreservation", "EvmReviveMigrationTest", +// ".*/revive/.*"); TestConfig::with_filter(runner, +// filter).spec_id(SpecId::SHANGHAI).run().await; } // Bytecode migration tests - currently only PVM mode is fully supported // EVM mode bytecode migration is a work in progress as pallet-revive's EVM mode @@ -61,7 +61,8 @@ async fn test_revive_nonce_migration_evm() { async fn test_revive_bytecode_migration() { let runtime_mode = ReviveRuntimeMode::Pvm; let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); - let filter = Filter::new("testBytecodeMigrationToEvm", "EvmReviveMigrationTest", ".*/revive/.*"); + let filter = + Filter::new("testBytecodeMigrationToEvm", "EvmReviveMigrationTest", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } @@ -69,7 +70,8 @@ async fn test_revive_bytecode_migration() { async fn test_evm_bytecode_migration() { let runtime_mode = ReviveRuntimeMode::Pvm; let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); - let filter = Filter::new("testBytecodeMigrationToRevive", "EvmReviveMigrationTest", ".*/revive/.*"); + let filter = + Filter::new("testBytecodeMigrationToRevive", "EvmReviveMigrationTest", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } diff --git a/crates/revive-strategy/src/cheatcodes/mod.rs b/crates/revive-strategy/src/cheatcodes/mod.rs index 8b5dfe399eca0..f4c86bd0f5acb 100644 --- a/crates/revive-strategy/src/cheatcodes/mod.rs +++ b/crates/revive-strategy/src/cheatcodes/mod.rs @@ -113,9 +113,10 @@ impl PvmCheatcodeInspectorStrategyContext { dual_compiled_contracts: DualCompiledContracts, runtime_mode: crate::ReviveRuntimeMode, ) -> Self { - Self { - using_pvm: false, // Start in REVM mode by default - pvm_startup_migration: PvmStartupMigration::Defer, // Will be set to Allow when test contract deploys + Self { + using_pvm: false, // Start in REVM mode by default + pvm_startup_migration: PvmStartupMigration::Defer, /* Will be set to Allow when test + * contract deploys */ dual_compiled_contracts, runtime_mode, } @@ -430,7 +431,7 @@ fn select_revive(ctx: &mut PvmCheatcodeInspectorStrategyContext, data: Ecx<'_, ' return; } - tracing::info!("switching to pallet-revive ({} mode)", ctx.runtime_mode); + tracing::info!("switching to pallet-revive ({} mode)", ctx.runtime_mode); ctx.using_pvm = true; let block_number = data.block.number; @@ -605,8 +606,6 @@ fn select_evm(ctx: &mut PvmCheatcodeInspectorStrategyContext, data: Ecx<'_, '_, }); } -impl PvmCheatcodeInspectorStrategyRunner {} - impl foundry_cheatcodes::CheatcodeInspectorStrategyExt for PvmCheatcodeInspectorStrategyRunner { /// Try handling the `CREATE` within PVM. /// diff --git a/crates/revive-strategy/src/executor/runner.rs b/crates/revive-strategy/src/executor/runner.rs index f6ed10d9bec5d..b2be9b29fdabd 100644 --- a/crates/revive-strategy/src/executor/runner.rs +++ b/crates/revive-strategy/src/executor/runner.rs @@ -45,10 +45,7 @@ impl ExecutorStrategyRunner for ReviveExecutorStrategyRunner { ctx: &dyn ExecutorStrategyContext, ) -> foundry_cheatcodes::CheatcodesStrategy { let ctx = get_context_ref(ctx); - CheatcodeInspectorStrategy::new_pvm( - ctx.dual_compiled_contracts.clone(), - ctx.runtime_mode, - ) + CheatcodeInspectorStrategy::new_pvm(ctx.dual_compiled_contracts.clone(), ctx.runtime_mode) } /// Sets the balance of an account. diff --git a/crates/revive-strategy/src/lib.rs b/crates/revive-strategy/src/lib.rs index 4764fbac01940..e8af8dd3e6da2 100644 --- a/crates/revive-strategy/src/lib.rs +++ b/crates/revive-strategy/src/lib.rs @@ -39,8 +39,8 @@ pub enum ReviveRuntimeMode { impl Display for ReviveRuntimeMode { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - ReviveRuntimeMode::Pvm => write!(f, "PVM"), - ReviveRuntimeMode::Evm => write!(f, "EVM"), + Self::Pvm => write!(f, "PVM"), + Self::Evm => write!(f, "EVM"), } } } From 528cc154fc676128511263805bdd695b8ad00580 Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Mon, 20 Oct 2025 17:22:17 +0200 Subject: [PATCH 03/15] Clippy --- crates/doc/src/parser/item.rs | 2 +- crates/revive-strategy/src/cheatcodes/mod.rs | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/doc/src/parser/item.rs b/crates/doc/src/parser/item.rs index 18fcd085eb45c..a6848eb5611f9 100644 --- a/crates/doc/src/parser/item.rs +++ b/crates/doc/src/parser/item.rs @@ -16,7 +16,7 @@ pub struct ParseItem { /// Item comments. pub comments: Comments, /// Children items. - pub children: Vec, + pub children: Vec, /// Formatted code string. pub code: String, } diff --git a/crates/revive-strategy/src/cheatcodes/mod.rs b/crates/revive-strategy/src/cheatcodes/mod.rs index f4c86bd0f5acb..3870591102f72 100644 --- a/crates/revive-strategy/src/cheatcodes/mod.rs +++ b/crates/revive-strategy/src/cheatcodes/mod.rs @@ -114,9 +114,10 @@ impl PvmCheatcodeInspectorStrategyContext { runtime_mode: crate::ReviveRuntimeMode, ) -> Self { Self { - using_pvm: false, // Start in REVM mode by default - pvm_startup_migration: PvmStartupMigration::Defer, /* Will be set to Allow when test - * contract deploys */ + // Start in REVM mode by default + using_pvm: false, + // Will be set to Allow when test contract deploys + pvm_startup_migration: PvmStartupMigration::Defer, dual_compiled_contracts, runtime_mode, } From 2248db4ec0549730373c68dcc893d5917e4ab25c Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Tue, 21 Oct 2025 12:31:12 +0200 Subject: [PATCH 04/15] Fix tests --- crates/chisel/src/executor.rs | 12 ++++++------ crates/forge/tests/cli/revive_vm.rs | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/crates/chisel/src/executor.rs b/crates/chisel/src/executor.rs index 9cfe878082542..41034c174397f 100644 --- a/crates/chisel/src/executor.rs +++ b/crates/chisel/src/executor.rs @@ -542,22 +542,22 @@ enum Type { Builtin(DynSolType), /// (type) - Array(Box), + Array(Box), /// (type, length) - FixedArray(Box, usize), + FixedArray(Box, usize), /// (type, index) - ArrayIndex(Box, Option), + ArrayIndex(Box, Option), /// (types) - Tuple(Vec>), + Tuple(Vec>), /// (name, params, returns) - Function(Box, Vec>, Vec>), + Function(Box, Vec>, Vec>), /// (lhs, rhs) - Access(Box, String), + Access(Box, String), /// (types) Custom(Vec), diff --git a/crates/forge/tests/cli/revive_vm.rs b/crates/forge/tests/cli/revive_vm.rs index 30764bf128c20..d3a266728a46f 100644 --- a/crates/forge/tests/cli/revive_vm.rs +++ b/crates/forge/tests/cli/revive_vm.rs @@ -73,7 +73,7 @@ contract CounterTest is DSTest { .unwrap(); prj.update_config(|config| config.evm_version = EvmVersion::Cancun); - let res = cmd.args(["test", "--resolc", "-vvv", "--resolc-startup"]).assert(); + let res = cmd.args(["test", "--resolc", "-vvv", "--polkadot"]).assert(); res.stderr_eq(str![""]).stdout_eq(str![[r#" [COMPILING_FILES] with [SOLC_VERSION] [SOLC_VERSION] [ELAPSED] @@ -121,7 +121,7 @@ contract SetNonce is DSTest { .unwrap(); prj.update_config(|config| config.evm_version = EvmVersion::Cancun); - let res = cmd.args(["test", "--resolc", "-vvv", "--resolc-startup"]).assert_success(); + let res = cmd.args(["test", "--resolc", "-vvv", "--polkadot"]).assert_success(); res.stderr_eq(str![""]).stdout_eq(str![[r#" [COMPILING_FILES] with [SOLC_VERSION] [SOLC_VERSION] [ELAPSED] @@ -165,7 +165,7 @@ contract Roll is DSTest { ) .unwrap(); - let res = cmd.args(["test", "--resolc", "-vvv", "--resolc-startup"]).assert_success(); + let res = cmd.args(["test", "--resolc", "-vvv", "--polkadot"]).assert_success(); res.stderr_eq(str![""]).stdout_eq(str![[r#" [COMPILING_FILES] with [SOLC_VERSION] [SOLC_VERSION] [ELAPSED] @@ -209,7 +209,7 @@ contract Warp is DSTest { ) .unwrap(); - let res = cmd.args(["test", "--resolc", "-vvv", "--resolc-startup"]).assert_success(); + let res = cmd.args(["test", "--resolc", "-vvv", "--polkadot"]).assert_success(); res.stderr_eq(str![""]).stdout_eq(str![[r#" [COMPILING_FILES] with [SOLC_VERSION] [SOLC_VERSION] [ELAPSED] @@ -254,7 +254,7 @@ function test_Balance() public { ) .unwrap(); - let res = cmd.args(["test", "--resolc", "-vvv", "--resolc-startup"]).assert_success(); + let res = cmd.args(["test", "--resolc", "-vvv", "--polkadot"]).assert_success(); res.stderr_eq(str![""]).stdout_eq(str![[r#" [COMPILING_FILES] with [SOLC_VERSION] [SOLC_VERSION] [ELAPSED] From ac0a5226e1ec2933d472789807e66499c5dd31bd Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Tue, 21 Oct 2025 14:17:15 +0200 Subject: [PATCH 05/15] Clippy --- crates/cast/src/rlp_converter.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/cast/src/rlp_converter.rs b/crates/cast/src/rlp_converter.rs index 36b974fb2e976..f386edddc541e 100644 --- a/crates/cast/src/rlp_converter.rs +++ b/crates/cast/src/rlp_converter.rs @@ -11,7 +11,7 @@ use std::fmt; #[derive(Clone, Debug, PartialEq, Eq)] pub enum Item { Data(Vec), - Array(Vec), + Array(Vec), } impl Encodable for Item { From a733706ad985d41e56de8a84112de9f1843750da Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Wed, 22 Oct 2025 13:25:27 +0200 Subject: [PATCH 06/15] Fix bytecode migration --- Cargo.lock | 42 +++++++-------- crates/forge/tests/it/revive/migration.rs | 57 +++++++++----------- crates/revive-strategy/src/cheatcodes/mod.rs | 57 +++++++++++--------- 3 files changed, 79 insertions(+), 77 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5a85f79de58d9..fda03023d83ed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -636,7 +636,7 @@ dependencies = [ "alloy-rlp", "alloy-serde", "alloy-sol-types", - "itertools 0.14.0", + "itertools 0.13.0", "serde", "serde_json", "serde_with", @@ -3989,7 +3989,7 @@ checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ "serde", "termcolor", - "unicode-width 0.2.0", + "unicode-width 0.1.14", ] [[package]] @@ -4106,7 +4106,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] @@ -6764,7 +6764,7 @@ dependencies = [ [[package]] name = "foundry-compilers" version = "0.18.2" -source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#0ea2c2f7ecfb42b19a32b7e233273b682e0cb7a2" +source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#479cf2b36f591d9489fd0cb5f5a3ba72c0ee6db0" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -6777,7 +6777,7 @@ dependencies = [ "fs_extra", "futures-util", "home", - "itertools 0.14.0", + "itertools 0.13.0", "path-slash", "rand 0.8.5", "rayon", @@ -6802,7 +6802,7 @@ dependencies = [ [[package]] name = "foundry-compilers-artifacts" version = "0.18.2" -source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#0ea2c2f7ecfb42b19a32b7e233273b682e0cb7a2" +source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#479cf2b36f591d9489fd0cb5f5a3ba72c0ee6db0" dependencies = [ "foundry-compilers-artifacts-resolc", "foundry-compilers-artifacts-solc", @@ -6812,7 +6812,7 @@ dependencies = [ [[package]] name = "foundry-compilers-artifacts-resolc" version = "0.18.2" -source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#0ea2c2f7ecfb42b19a32b7e233273b682e0cb7a2" +source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#479cf2b36f591d9489fd0cb5f5a3ba72c0ee6db0" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -6832,7 +6832,7 @@ dependencies = [ [[package]] name = "foundry-compilers-artifacts-solc" version = "0.18.2" -source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#0ea2c2f7ecfb42b19a32b7e233273b682e0cb7a2" +source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#479cf2b36f591d9489fd0cb5f5a3ba72c0ee6db0" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -6854,7 +6854,7 @@ dependencies = [ [[package]] name = "foundry-compilers-artifacts-vyper" version = "0.18.2" -source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#0ea2c2f7ecfb42b19a32b7e233273b682e0cb7a2" +source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#479cf2b36f591d9489fd0cb5f5a3ba72c0ee6db0" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -6868,7 +6868,7 @@ dependencies = [ [[package]] name = "foundry-compilers-core" version = "0.18.2" -source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#0ea2c2f7ecfb42b19a32b7e233273b682e0cb7a2" +source = "git+https://github.com/paritytech/foundry-compilers-polkadot.git?branch=main#479cf2b36f591d9489fd0cb5f5a3ba72c0ee6db0" dependencies = [ "alloy-primitives", "cfg-if", @@ -9507,7 +9507,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.53.2", + "windows-targets 0.48.5", ] [[package]] @@ -11204,7 +11204,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", "syn 2.0.104", @@ -15016,8 +15016,8 @@ version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" dependencies = [ - "heck 0.5.0", - "itertools 0.14.0", + "heck 0.4.1", + "itertools 0.13.0", "log", "multimap", "once_cell", @@ -15050,7 +15050,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ "anyhow", - "itertools 0.14.0", + "itertools 0.13.0", "proc-macro2", "quote", "syn 2.0.104", @@ -18626,7 +18626,7 @@ dependencies = [ "derive_more 2.0.1", "dunce", "inturn", - "itertools 0.14.0", + "itertools 0.13.0", "itoa", "match_cfg", "normalize-path", @@ -18637,7 +18637,7 @@ dependencies = [ "solar-config", "solar-data-structures", "solar-macros", - "thiserror 2.0.12", + "thiserror 1.0.69", "tracing", "unicode-width 0.2.0", ] @@ -18660,7 +18660,7 @@ dependencies = [ "alloy-primitives", "bitflags 2.9.1", "bumpalo", - "itertools 0.14.0", + "itertools 0.13.0", "memchr", "num-bigint", "num-rational", @@ -20481,7 +20481,7 @@ dependencies = [ "serde_json", "sha2 0.10.9", "tempfile", - "thiserror 2.0.12", + "thiserror 1.0.69", "url", "zip", ] @@ -21299,7 +21299,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "319c70195101a93f56db4c74733e272d720768e13471f400c78406a326b172b0" dependencies = [ "cc", - "windows-targets 0.52.6", + "windows-targets 0.48.5", ] [[package]] @@ -22648,7 +22648,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] diff --git a/crates/forge/tests/it/revive/migration.rs b/crates/forge/tests/it/revive/migration.rs index 4f9a6de709cbb..54b9a673bf9dc 100644 --- a/crates/forge/tests/it/revive/migration.rs +++ b/crates/forge/tests/it/revive/migration.rs @@ -6,7 +6,7 @@ use revive_strategy::ReviveRuntimeMode; use revm::primitives::hardfork::SpecId; #[tokio::test(flavor = "multi_thread")] -async fn test_revive_balance_migration_pvm() { +async fn test_revive_balance_migration() { let runtime_mode = ReviveRuntimeMode::Pvm; let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = Filter::new("testBalanceMigration", "EvmReviveMigrationTest", ".*/revive/.*"); @@ -14,51 +14,24 @@ async fn test_revive_balance_migration_pvm() { } #[tokio::test(flavor = "multi_thread")] -async fn test_revive_balance_migration_evm() { - let runtime_mode = ReviveRuntimeMode::Evm; - let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); - let filter = Filter::new("testBalanceMigration", "EvmReviveMigrationTest", ".*/revive/.*"); - TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; -} - -#[tokio::test(flavor = "multi_thread")] -async fn test_revive_nonce_migration_pvm() { +async fn test_revive_nonce_migration() { let runtime_mode = ReviveRuntimeMode::Pvm; let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = Filter::new("testNonceMigration", "EvmReviveMigrationTest", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } -#[tokio::test(flavor = "multi_thread")] -async fn test_revive_nonce_migration_evm() { - let runtime_mode = ReviveRuntimeMode::Evm; - let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); - let filter = Filter::new("testNonceMigration", "EvmReviveMigrationTest", ".*/revive/.*"); - TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; -} - // Enable it after new pallet-revive is being used // #[tokio::test(flavor = "multi_thread")] -// async fn test_revive_precision_preservation_pvm() { +// async fn test_revive_precision_preservation() { // let runtime_mode = ReviveRuntimeMode::Pvm; // let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); // let filter = Filter::new("testPrecisionPreservation", "EvmReviveMigrationTest", // ".*/revive/.*"); TestConfig::with_filter(runner, // filter).spec_id(SpecId::SHANGHAI).run().await; } -// #[tokio::test(flavor = "multi_thread")] -// async fn test_revive_precision_preservation_evm() { -// let runtime_mode = ReviveRuntimeMode::Evm; -// let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); -// let filter = Filter::new("testPrecisionPreservation", "EvmReviveMigrationTest", -// ".*/revive/.*"); TestConfig::with_filter(runner, -// filter).spec_id(SpecId::SHANGHAI).run().await; } - -// Bytecode migration tests - currently only PVM mode is fully supported -// EVM mode bytecode migration is a work in progress as pallet-revive's EVM mode -// has strict bytecode validation that may reject some EVM bytecode #[tokio::test(flavor = "multi_thread")] -async fn test_revive_bytecode_migration() { +async fn test_revive_pvm_bytecode_migration() { let runtime_mode = ReviveRuntimeMode::Pvm; let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = @@ -67,7 +40,16 @@ async fn test_revive_bytecode_migration() { } #[tokio::test(flavor = "multi_thread")] -async fn test_evm_bytecode_migration() { +async fn test_revive_evm_bytecode_migration() { + let runtime_mode = ReviveRuntimeMode::Evm; + let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); + let filter = + Filter::new("testBytecodeMigrationToEvm", "EvmReviveMigrationTest", ".*/revive/.*"); + TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_evm_to_revive_pvm_bytecode_migration() { let runtime_mode = ReviveRuntimeMode::Pvm; let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = @@ -75,6 +57,17 @@ async fn test_evm_bytecode_migration() { TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } +// TODO: Enable when pallet-revive's EVM mode supports uploading EVM bytecode +// Currently getting CodeRejected errors even though pallet-revive uses REVM +// #[tokio::test(flavor = "multi_thread")] +// async fn test_evm_to_revive_evm_bytecode_migration() { +// let runtime_mode = ReviveRuntimeMode::Evm; +// let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); +// let filter = +// Filter::new("testBytecodeMigrationToRevive", "EvmReviveMigrationTest", ".*/revive/.*"); +// TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; +// } + // #[tokio::test(flavor = "multi_thread")] // async fn test_revive_timestamp_migration() { // let runtime_mode = ReviveRuntimeMode::Pvm; diff --git a/crates/revive-strategy/src/cheatcodes/mod.rs b/crates/revive-strategy/src/cheatcodes/mod.rs index 3870591102f72..fda7bb018f92d 100644 --- a/crates/revive-strategy/src/cheatcodes/mod.rs +++ b/crates/revive-strategy/src/cheatcodes/mod.rs @@ -495,20 +495,16 @@ fn select_revive(ctx: &mut PvmCheatcodeInspectorStrategyContext, data: Ecx<'_, ' // Skip if contract already exists in pallet-revive if AccountInfo::::load_contract(&account_h160).is_none() { // Determine which bytecode to upload based on runtime mode - let bytecode_to_upload = match ctx.runtime_mode { - crate::ReviveRuntimeMode::Pvm => { - // PVM mode: try to find PVM bytecode from dual_compiled_contracts - ctx.dual_compiled_contracts + let bytecode_to_upload = ctx.dual_compiled_contracts .find_by_evm_deployed_bytecode_with_immutables(bytecode.original_byte_slice()) .and_then(|(_, contract)| { - contract.resolc_bytecode.as_bytes().map(|b| b.to_vec()) - }) - } - crate::ReviveRuntimeMode::Evm => { - // EVM mode: use the EVM bytecode directly - Some(bytecode.original_byte_slice().to_vec()) - } - }; + match ctx.runtime_mode { + crate::ReviveRuntimeMode::Pvm => contract.resolc_bytecode.as_bytes().map(|b| b.to_vec()), + crate::ReviveRuntimeMode::Evm => None, + // TODO: We do not have method to upload the EVM bytecode to pallet-revive + //contract.evm_bytecode.as_bytes().map(|b| b.to_vec()) + } + }); if let Some(code_bytes) = bytecode_to_upload { let origin = OriginFor::::signed(Pallet::::account_id()); @@ -581,18 +577,31 @@ fn select_evm(ctx: &mut PvmCheatcodeInspectorStrategyContext, data: Ecx<'_, '_, && let Some(info) = AccountInfo::::load_contract(&account_evm) { let hash = hex::encode(info.code_hash); - if let Some((code_hash, bytecode)) = ctx - .dual_compiled_contracts - .find_by_resolc_bytecode_hash(hash) - .and_then(|(_, contract)| { - contract.evm_deployed_bytecode.as_bytes().map(|evm_bytecode| { - ( - contract.evm_bytecode_hash, - Bytecode::new_raw(evm_bytecode.clone()), - ) - }) - }) - { + + if let Some((code_hash, bytecode)) = match ctx.runtime_mode { + crate::ReviveRuntimeMode::Pvm => ctx + .dual_compiled_contracts + .find_by_resolc_bytecode_hash(hash) + .and_then(|(_, contract)| { + contract.evm_deployed_bytecode.as_bytes().map(|evm_bytecode| { + ( + contract.evm_bytecode_hash, + Bytecode::new_raw(evm_bytecode.clone()), + ) + }) + }), + crate::ReviveRuntimeMode::Evm => ctx + .dual_compiled_contracts + .find_by_evm_bytecode_hash(hash) + .and_then(|(_, contract)| { + contract.evm_deployed_bytecode.as_bytes().map(|evm_bytecode| { + ( + contract.evm_bytecode_hash, + Bytecode::new_raw(evm_bytecode.clone()), + ) + }) + }), + } { account.info.code_hash = code_hash; account.info.code = Some(bytecode); } else { From 133a8eda23a784f00a61ffe361f46ecd073ba7b1 Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Wed, 22 Oct 2025 14:38:28 +0200 Subject: [PATCH 07/15] Refactor tests --- Cargo.lock | 65 +++++++++++++++++------ crates/forge/Cargo.toml | 1 + crates/forge/tests/it/revive/migration.rs | 65 ++++++++++------------- 3 files changed, 78 insertions(+), 53 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fda03023d83ed..fc8c6c0badd0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -636,7 +636,7 @@ dependencies = [ "alloy-rlp", "alloy-serde", "alloy-sol-types", - "itertools 0.13.0", + "itertools 0.14.0", "serde", "serde_json", "serde_with", @@ -1221,7 +1221,7 @@ dependencies = [ "parking_lot 0.12.4", "polkadot-sdk", "rand 0.8.5", - "rstest", + "rstest 0.26.1", "secp256k1 0.28.2", "serde", "serde_json", @@ -3989,7 +3989,7 @@ checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ "serde", "termcolor", - "unicode-width 0.1.14", + "unicode-width 0.2.0", ] [[package]] @@ -4106,7 +4106,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -6318,6 +6318,7 @@ dependencies = [ "reqwest", "revive-strategy", "revm", + "rstest 0.24.0", "rvm-rs", "semver 1.0.26", "serde", @@ -6777,7 +6778,7 @@ dependencies = [ "fs_extra", "futures-util", "home", - "itertools 0.13.0", + "itertools 0.14.0", "path-slash", "rand 0.8.5", "rayon", @@ -9507,7 +9508,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.53.2", ] [[package]] @@ -11204,7 +11205,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", "syn 2.0.104", @@ -15016,8 +15017,8 @@ version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" dependencies = [ - "heck 0.4.1", - "itertools 0.13.0", + "heck 0.5.0", + "itertools 0.14.0", "log", "multimap", "once_cell", @@ -15050,7 +15051,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ "anyhow", - "itertools 0.13.0", + "itertools 0.14.0", "proc-macro2", "quote", "syn 2.0.104", @@ -16043,6 +16044,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rstest" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03e905296805ab93e13c1ec3a03f4b6c4f35e9498a3d5fa96dc626d22c03cd89" +dependencies = [ + "futures-timer", + "futures-util", + "rstest_macros 0.24.0", + "rustc_version 0.4.1", +] + [[package]] name = "rstest" version = "0.26.1" @@ -16051,7 +16064,25 @@ checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" dependencies = [ "futures-timer", "futures-util", - "rstest_macros", + "rstest_macros 0.26.1", +] + +[[package]] +name = "rstest_macros" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef0053bbffce09062bee4bcc499b0fbe7a57b879f1efe088d6d8d4c7adcdef9b" +dependencies = [ + "cfg-if", + "glob", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "regex", + "relative-path", + "rustc_version 0.4.1", + "syn 2.0.104", + "unicode-ident", ] [[package]] @@ -18626,7 +18657,7 @@ dependencies = [ "derive_more 2.0.1", "dunce", "inturn", - "itertools 0.13.0", + "itertools 0.14.0", "itoa", "match_cfg", "normalize-path", @@ -18637,7 +18668,7 @@ dependencies = [ "solar-config", "solar-data-structures", "solar-macros", - "thiserror 1.0.69", + "thiserror 2.0.12", "tracing", "unicode-width 0.2.0", ] @@ -18660,7 +18691,7 @@ dependencies = [ "alloy-primitives", "bitflags 2.9.1", "bumpalo", - "itertools 0.13.0", + "itertools 0.14.0", "memchr", "num-bigint", "num-rational", @@ -20481,7 +20512,7 @@ dependencies = [ "serde_json", "sha2 0.10.9", "tempfile", - "thiserror 1.0.69", + "thiserror 2.0.12", "url", "zip", ] @@ -21299,7 +21330,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "319c70195101a93f56db4c74733e272d720768e13471f400c78406a326b172b0" dependencies = [ "cc", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -22648,7 +22679,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/crates/forge/Cargo.toml b/crates/forge/Cargo.toml index 7a21288d522b6..22810cd5f004b 100644 --- a/crates/forge/Cargo.toml +++ b/crates/forge/Cargo.toml @@ -113,6 +113,7 @@ serial_test.workspace = true mockall = "0.13" globset = "0.4" paste = "1.0" +rstest = "0.24" similar-asserts.workspace = true svm = { package = "svm-rs", version = "0.5", default-features = false, features = [ "rustls", diff --git a/crates/forge/tests/it/revive/migration.rs b/crates/forge/tests/it/revive/migration.rs index 54b9a673bf9dc..cef92a26815bd 100644 --- a/crates/forge/tests/it/revive/migration.rs +++ b/crates/forge/tests/it/revive/migration.rs @@ -4,73 +4,66 @@ use crate::{config::*, test_helpers::TEST_DATA_REVIVE}; use foundry_test_utils::Filter; use revive_strategy::ReviveRuntimeMode; use revm::primitives::hardfork::SpecId; +use rstest::rstest; +#[rstest] +#[case::pvm(ReviveRuntimeMode::Pvm)] +#[case::evm(ReviveRuntimeMode::Evm)] #[tokio::test(flavor = "multi_thread")] -async fn test_revive_balance_migration() { - let runtime_mode = ReviveRuntimeMode::Pvm; +async fn test_revive_balance_migration(#[case] runtime_mode: ReviveRuntimeMode) { let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = Filter::new("testBalanceMigration", "EvmReviveMigrationTest", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } +#[rstest] +#[case::pvm(ReviveRuntimeMode::Pvm)] +#[case::evm(ReviveRuntimeMode::Evm)] #[tokio::test(flavor = "multi_thread")] -async fn test_revive_nonce_migration() { - let runtime_mode = ReviveRuntimeMode::Pvm; +async fn test_revive_nonce_migration(#[case] runtime_mode: ReviveRuntimeMode) { let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = Filter::new("testNonceMigration", "EvmReviveMigrationTest", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } -// Enable it after new pallet-revive is being used -// #[tokio::test(flavor = "multi_thread")] -// async fn test_revive_precision_preservation() { -// let runtime_mode = ReviveRuntimeMode::Pvm; -// let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); -// let filter = Filter::new("testPrecisionPreservation", "EvmReviveMigrationTest", -// ".*/revive/.*"); TestConfig::with_filter(runner, -// filter).spec_id(SpecId::SHANGHAI).run().await; } - -#[tokio::test(flavor = "multi_thread")] -async fn test_revive_pvm_bytecode_migration() { - let runtime_mode = ReviveRuntimeMode::Pvm; - let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); - let filter = - Filter::new("testBytecodeMigrationToEvm", "EvmReviveMigrationTest", ".*/revive/.*"); - TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; -} - +#[rstest] +#[case::pvm(ReviveRuntimeMode::Pvm)] +#[case::evm(ReviveRuntimeMode::Evm)] #[tokio::test(flavor = "multi_thread")] -async fn test_revive_evm_bytecode_migration() { - let runtime_mode = ReviveRuntimeMode::Evm; +async fn test_revive_bytecode_migration(#[case] runtime_mode: ReviveRuntimeMode) { let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = Filter::new("testBytecodeMigrationToEvm", "EvmReviveMigrationTest", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } +#[rstest] +#[case::pvm(ReviveRuntimeMode::Pvm)] +// TODO: Add Evm test when pallet-revive will allow for Evm bytecode upload #[tokio::test(flavor = "multi_thread")] -async fn test_evm_to_revive_pvm_bytecode_migration() { - let runtime_mode = ReviveRuntimeMode::Pvm; +async fn test_revive_bytecode_migration_to_revive(#[case] runtime_mode: ReviveRuntimeMode) { let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = Filter::new("testBytecodeMigrationToRevive", "EvmReviveMigrationTest", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; } -// TODO: Enable when pallet-revive's EVM mode supports uploading EVM bytecode -// Currently getting CodeRejected errors even though pallet-revive uses REVM +// Enable it after new pallet-revive is being used +// #[rstest] +// #[case::pvm(ReviveRuntimeMode::Pvm)] +// #[case::evm(ReviveRuntimeMode::Evm)] // #[tokio::test(flavor = "multi_thread")] -// async fn test_evm_to_revive_evm_bytecode_migration() { -// let runtime_mode = ReviveRuntimeMode::Evm; +// async fn test_revive_precision_preservation(#[case] runtime_mode: ReviveRuntimeMode) { // let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); -// let filter = -// Filter::new("testBytecodeMigrationToRevive", "EvmReviveMigrationTest", ".*/revive/.*"); -// TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; -// } +// let filter = Filter::new("testPrecisionPreservation", "EvmReviveMigrationTest", +// ".*/revive/.*"); TestConfig::with_filter(runner, +// filter).spec_id(SpecId::SHANGHAI).run().await; } +// #[rstest] +// #[case::pvm(ReviveRuntimeMode::Pvm)] +// #[case::evm(ReviveRuntimeMode::Evm)] // #[tokio::test(flavor = "multi_thread")] -// async fn test_revive_timestamp_migration() { -// let runtime_mode = ReviveRuntimeMode::Pvm; +// async fn test_revive_timestamp_migration(#[case] runtime_mode: ReviveRuntimeMode) { // let runner = TEST_DATA_REVIVE.runner_revive(runtime_mode); // let filter = Filter::new("testTimestampMigration", "EvmReviveMigrationTest", ".*/revive/.*"); // TestConfig::with_filter(runner, filter).spec_id(SpecId::SHANGHAI).run().await; From 3c5c7b10a96f795edbb4ab96d3cbf35e539de88c Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Wed, 22 Oct 2025 15:21:40 +0200 Subject: [PATCH 08/15] Update crates to address vulnerability in alloy --- Cargo.lock | 586 +++++++++++++++++++++++++++++++++++++---------------- Cargo.toml | 14 +- 2 files changed, 421 insertions(+), 179 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fc8c6c0badd0d..148369e45e649 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -104,9 +104,9 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.0.32" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a3bd0305a44fb457cae77de1e82856eadd42ea3cdf0dae29df32eb3b592979" +checksum = "b9b151e38e42f1586a01369ec52a6934702731d07e8509a7307331b09f6c46dc" dependencies = [ "alloy-eips", "alloy-primitives", @@ -123,15 +123,16 @@ dependencies = [ "rand 0.8.5", "secp256k1 0.30.0", "serde", + "serde_json", "serde_with", "thiserror 2.0.12", ] [[package]] name = "alloy-consensus-any" -version = "1.0.32" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a842b4023f571835e62ac39fb8d523d19fcdbacfa70bf796ff96e7e19586f50" +checksum = "6e2d5e8668ef6215efdb7dcca6f22277b4e483a5650e05f5de22b2350971f4b8" dependencies = [ "alloy-consensus", "alloy-eips", @@ -179,16 +180,15 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "1.2.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b95b3deca680efc7e9cba781f1a1db352fa1ea50e6384a514944dcf4419e652" +checksum = "3fdff496dd4e98a81f4861e66f7eaf5f2488971848bb42d9c892f871730245c8" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-type-parser", "alloy-sol-types", "arbitrary", - "derive_arbitrary", "derive_more 2.0.1", "itoa", "proptest", @@ -236,9 +236,9 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "1.0.32" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd749c57f38f8cbf433e651179fc5a676255e6b95044f467d49255d2b81725a" +checksum = "e5434834adaf64fa20a6fb90877bc1d33214c41b055cc49f82189c98614368cc" dependencies = [ "alloy-eip2124", "alloy-eip2930", @@ -286,7 +286,7 @@ dependencies = [ "derive_more 2.0.1", "op-alloy-consensus 0.18.11", "op-revm", - "revm", + "revm 27.1.0", "thiserror 2.0.12", ] @@ -318,9 +318,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125a1c373261b252e53e04d6e92c37d881833afc1315fceab53fd46045695640" +checksum = "5513d5e6bd1cba6bdcf5373470f559f320c05c8c59493b6e98912fbe6733943f" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -371,9 +371,9 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "1.0.32" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db489617bffe14847bf89f175b1c183e5dd7563ef84713936e2c34255cfbd845" +checksum = "e58f4f345cef483eab7374f2b6056973c7419ffe8ad35e994b7a7f5d8e0c7ba4" dependencies = [ "alloy-consensus", "alloy-eips", @@ -396,7 +396,7 @@ dependencies = [ "auto_impl", "op-alloy-consensus 0.18.11", "op-revm", - "revm", + "revm 27.1.0", ] [[package]] @@ -412,9 +412,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9485c56de23438127a731a6b4c87803d49faf1a7068dcd1d8768aca3a9edb9" +checksum = "355bf68a433e0fd7f7d33d5a9fc2583fde70bf5c530f63b80845f8da5505cf28" dependencies = [ "alloy-rlp", "arbitrary", @@ -422,9 +422,9 @@ dependencies = [ "cfg-if", "const-hex", "derive_more 2.0.1", - "foldhash 0.1.5", + "foldhash 0.2.0", "getrandom 0.3.3", - "hashbrown 0.15.4", + "hashbrown 0.16.0", "indexmap 2.10.0", "itoa", "k256", @@ -624,9 +624,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.0.32" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f5812f81c3131abc2cd8953dc03c41999e180cff7252abbccaba68676e15027" +checksum = "361cd87ead4ba7659bda8127902eda92d17fa7ceb18aba1676f7be10f7222487" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -645,9 +645,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" -version = "1.0.32" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1070e7e92dae6a9c48885980f4f9ca9faa70f945fcd62fbb94472182ca08854f" +checksum = "de4e95fb0572b97b17751d0fdf5cdc42b0050f9dd9459eddd1bf2e2fbfed0a33" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -671,9 +671,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.0.32" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dfe41a47805a34b848c83448946ca96f3d36842e8c074bcf8fa0870e337d12" +checksum = "64600fc6c312b7e0ba76f73a381059af044f4f21f43e07f51f1fa76c868fe302" dependencies = [ "alloy-primitives", "serde", @@ -791,9 +791,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "1.2.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a14f21d053aea4c6630687c2f4ad614bed4c81e14737a9b904798b24f30ea849" +checksum = "f3ce480400051b5217f19d6e9a82d9010cdde20f1ae9c00d53591e4a1afbb312" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -805,9 +805,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "1.2.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34d99282e7c9ef14eb62727981a985a01869e586d1dec729d3bb33679094c100" +checksum = "6d792e205ed3b72f795a8044c52877d2e6b6e9b1d13f431478121d8d4eaa9028" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -824,9 +824,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "1.2.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda029f955b78e493360ee1d7bd11e1ab9f2a220a5715449babc79d6d0a01105" +checksum = "0bd1247a8f90b465ef3f1207627547ec16940c35597875cdc09c49d58b19693c" dependencies = [ "alloy-json-abi", "const-hex", @@ -842,9 +842,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe8c27b3cf6b2bb8361904732f955bc7c05e00be5f469cec7e2280b6167f3ff0" +checksum = "954d1b2533b9b2c7959652df3076954ecb1122a28cc740aa84e7b0a49f6ac0a9" dependencies = [ "serde", "winnow", @@ -852,9 +852,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "1.2.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58377025a47d8b8426b3e4846a251f2c1991033b27f517aade368146f6ab1dfe" +checksum = "70319350969a3af119da6fb3e9bddb1bce66c9ea933600cb297c8b1850ad2a3c" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -956,9 +956,9 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.0.32" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e434e0917dce890f755ea774f59d6f12557bc8c7dd9fa06456af80cfe0f0181e" +checksum = "f8e52276fdb553d3c11563afad2898f4085165e4093604afe3d78b69afbf408f" dependencies = [ "alloy-primitives", "darling 0.21.0", @@ -1132,7 +1132,7 @@ dependencies = [ "parking_lot 0.12.4", "rand 0.8.5", "rand 0.9.2", - "revm", + "revm 27.1.0", "revm-inspectors", "serde", "serde_json", @@ -1162,7 +1162,7 @@ dependencies = [ "op-alloy-consensus 0.17.2", "op-revm", "rand 0.9.2", - "revm", + "revm 27.1.0", "serde", "serde_json", "thiserror 2.0.12", @@ -2844,7 +2844,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.11.0", @@ -2867,7 +2867,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -2964,11 +2964,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -3492,9 +3492,9 @@ dependencies = [ [[package]] name = "c-kzg" -version = "2.1.1" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7318cfa722931cb5fe0838b98d3ce5621e75f6a6408abc21721d80de9223f2e4" +checksum = "e00bf4b112b07b505472dbefd19e37e53307e2bfed5a79e0cc161d58ccd0e687" dependencies = [ "blst", "cc", @@ -3616,7 +3616,7 @@ dependencies = [ "rand 0.9.2", "rayon", "regex", - "revm", + "revm 27.1.0", "rpassword", "semver 1.0.26", "serde", @@ -3743,7 +3743,7 @@ dependencies = [ "foundry-solang-parser", "regex", "reqwest", - "revm", + "revm 27.1.0", "rustyline", "semver 1.0.26", "serde", @@ -4553,7 +4553,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "crossterm_winapi", "mio", "parking_lot 0.12.4", @@ -4645,7 +4645,7 @@ dependencies = [ "cssparser-macros", "dtoa-short", "itoa", - "phf", + "phf 0.11.3", "smallvec", ] @@ -5290,9 +5290,9 @@ dependencies = [ [[package]] name = "derive-where" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510c292c8cf384b1a340b816a9a6cf2599eb8f566a44949024af88418000c50b" +checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", @@ -6317,7 +6317,7 @@ dependencies = [ "regex", "reqwest", "revive-strategy", - "revm", + "revm 27.1.0", "rstest 0.24.0", "rvm-rs", "semver 1.0.26", @@ -6500,7 +6500,7 @@ dependencies = [ "itertools 0.14.0", "regex", "reqwest", - "revm", + "revm 27.1.0", "semver 1.0.26", "serde", "serde_json", @@ -6615,7 +6615,7 @@ dependencies = [ "parking_lot 0.12.4", "proptest", "rand 0.9.2", - "revm", + "revm 27.1.0", "revm-inspectors", "semver 1.0.26", "serde", @@ -6755,7 +6755,7 @@ dependencies = [ "alloy-serde", "chrono", "foundry-macros", - "revm", + "revm 27.1.0", "serde", "serde_json", "similar-asserts", @@ -6910,7 +6910,7 @@ dependencies = [ "path-slash", "regex", "reqwest", - "revm", + "revm 27.1.0", "semver 1.0.26", "serde", "serde_json", @@ -6939,7 +6939,7 @@ dependencies = [ "foundry-evm-core", "foundry-evm-traces", "ratatui", - "revm", + "revm 27.1.0", "revm-inspectors", "serde", "tracing", @@ -6967,7 +6967,7 @@ dependencies = [ "indicatif", "parking_lot 0.12.4", "proptest", - "revm", + "revm 27.1.0", "revm-inspectors", "serde", "serde_json", @@ -7017,7 +7017,7 @@ dependencies = [ "itertools 0.14.0", "op-revm", "parking_lot 0.12.4", - "revm", + "revm 27.1.0", "revm-inspectors", "serde", "serde_json", @@ -7037,7 +7037,7 @@ dependencies = [ "foundry-compilers", "foundry-evm-core", "rayon", - "revm", + "revm 27.1.0", "semver 1.0.26", "tracing", ] @@ -7060,7 +7060,7 @@ dependencies = [ "parking_lot 0.12.4", "proptest", "rand 0.9.2", - "revm", + "revm 27.1.0", "serde", "thiserror 2.0.12", "tracing", @@ -7084,7 +7084,7 @@ dependencies = [ "futures", "itertools 0.14.0", "rayon", - "revm", + "revm 27.1.0", "revm-inspectors", "serde", "serde_json", @@ -7109,7 +7109,7 @@ dependencies = [ "eyre", "futures", "parking_lot 0.12.4", - "revm", + "revm 27.1.0", "serde", "serde_json", "thiserror 2.0.12", @@ -7147,7 +7147,7 @@ dependencies = [ "itertools 0.14.0", "lalrpop", "lalrpop-util", - "phf", + "phf 0.11.3", "thiserror 2.0.12", "unicode-xid", ] @@ -7706,7 +7706,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27d12c0aed7f1e24276a241aadc4cb8ea9f83000f34bc062b7cc2d51e3b0fabd" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "debugid", "fxhash", "serde", @@ -7839,7 +7839,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "libc", "libgit2-sys", "log", @@ -8068,6 +8068,16 @@ dependencies = [ "serde", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "foldhash 0.2.0", + "serde", +] + [[package]] name = "hashlink" version = "0.8.4" @@ -8793,7 +8803,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "inotify-sys", "libc", ] @@ -8881,7 +8891,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cfg-if", "libc", ] @@ -9957,7 +9967,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4488594b9328dee448adb906d8b126d9b7deb7cf5c22161ee591610bb1be83c0" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "libc", "redox_syscall 0.5.13", ] @@ -10916,7 +10926,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -10928,7 +10938,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -11010,7 +11020,7 @@ version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3163f59cd3fa0e9ef8c32f242966a7b9994fd7378366099593e0e73077cd8c97" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "fsevent-sys", "inotify", "kqueue", @@ -11362,7 +11372,7 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "auto_impl", "once_cell", - "revm", + "revm 27.1.0", "serde", ] @@ -12837,7 +12847,7 @@ dependencies = [ "polkavm 0.27.0", "polkavm-common 0.27.0", "rand 0.8.5", - "revm", + "revm 27.1.0", "ripemd", "rlp 0.6.1", "scale-info", @@ -13854,8 +13864,19 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ - "phf_macros", - "phf_shared", + "phf_macros 0.11.3", + "phf_shared 0.11.3", + "serde", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros 0.13.1", + "phf_shared 0.13.1", "serde", ] @@ -13865,8 +13886,8 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.11.3", + "phf_shared 0.11.3", ] [[package]] @@ -13875,18 +13896,41 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "phf_shared", + "phf_shared 0.11.3", "rand 0.8.5", ] +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared 0.13.1", +] + [[package]] name = "phf_macros" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", "proc-macro2", "quote", "syn 2.0.104", @@ -13901,6 +13945,15 @@ dependencies = [ "siphasher 1.0.1", ] +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher 1.0.1", +] + [[package]] name = "pin-project" version = "0.4.30" @@ -14968,7 +15021,7 @@ checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.9.1", + "bitflags 2.10.0", "lazy_static", "num-traits", "rand 0.9.2", @@ -14982,9 +15035,9 @@ dependencies = [ [[package]] name = "proptest-derive" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee1c9ac207483d5e7db4940700de86a9aae46ef90c48b57f99fe7edb8345e49" +checksum = "095a99f75c69734802359b682be8daaf8980296731f6470434ea2c652af1dd30" dependencies = [ "proc-macro2", "quote", @@ -15101,7 +15154,7 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76979bea66e7875e7509c4ec5300112b316af87fa7a252ca91c448b32dfe3993" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "memchr", "pulldown-cmark-escape", "unicase", @@ -15395,7 +15448,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cassowary", "compact_str", "crossterm", @@ -15416,7 +15469,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", ] [[package]] @@ -15478,7 +15531,7 @@ version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", ] [[package]] @@ -15699,7 +15752,7 @@ dependencies = [ "parity-scale-codec", "polkadot-sdk", "revive-env", - "revm", + "revm 27.1.0", "scale-info", "semver 1.0.26", "serde", @@ -15713,17 +15766,36 @@ name = "revm" version = "27.1.0" source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de148f3cf21bbefabbe6014e561" dependencies = [ - "revm-bytecode", - "revm-context", - "revm-context-interface", - "revm-database", - "revm-database-interface", - "revm-handler", - "revm-inspector", - "revm-interpreter", - "revm-precompile", - "revm-primitives", - "revm-state", + "revm-bytecode 6.1.0", + "revm-context 8.0.4", + "revm-context-interface 9.0.0", + "revm-database 7.0.2", + "revm-database-interface 7.0.2", + "revm-handler 8.1.0", + "revm-inspector 8.1.0", + "revm-interpreter 24.0.0", + "revm-precompile 25.0.0", + "revm-primitives 20.1.0", + "revm-state 7.0.2", +] + +[[package]] +name = "revm" +version = "30.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76df793c6ef3bef8f88f05b3873ebebce1494385a3ce8f58ad2e2e111aa0de11" +dependencies = [ + "revm-bytecode 7.0.2", + "revm-context 10.1.2", + "revm-context-interface 11.1.2", + "revm-database 9.0.2", + "revm-database-interface 8.0.3", + "revm-handler 11.2.0", + "revm-inspector 11.2.0", + "revm-interpreter 28.0.0", + "revm-precompile 28.1.1", + "revm-primitives 21.0.1", + "revm-state 8.0.2", ] [[package]] @@ -15733,8 +15805,20 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "bitvec", "once_cell", - "phf", - "revm-primitives", + "phf 0.11.3", + "revm-primitives 20.1.0", + "serde", +] + +[[package]] +name = "revm-bytecode" +version = "7.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451748b17ac78bd2b0748ec472a5392cd78fc0f7d19d528be44770fda28fd6f7" +dependencies = [ + "bitvec", + "phf 0.13.1", + "revm-primitives 21.0.1", "serde", ] @@ -15745,11 +15829,28 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "cfg-if", "derive-where", - "revm-bytecode", - "revm-context-interface", - "revm-database-interface", - "revm-primitives", - "revm-state", + "revm-bytecode 6.1.0", + "revm-context-interface 9.0.0", + "revm-database-interface 7.0.2", + "revm-primitives 20.1.0", + "revm-state 7.0.2", + "serde", +] + +[[package]] +name = "revm-context" +version = "10.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7adcce0c14cf59b7128de34185a0fbf8f63309539b9263b35ead870d73584114" +dependencies = [ + "bitvec", + "cfg-if", + "derive-where", + "revm-bytecode 7.0.2", + "revm-context-interface 11.1.2", + "revm-database-interface 8.0.3", + "revm-primitives 21.0.1", + "revm-state 8.0.2", "serde", ] @@ -15762,9 +15863,25 @@ dependencies = [ "alloy-eip7702", "auto_impl", "either", - "revm-database-interface", - "revm-primitives", - "revm-state", + "revm-database-interface 7.0.2", + "revm-primitives 20.1.0", + "revm-state 7.0.2", + "serde", +] + +[[package]] +name = "revm-context-interface" +version = "11.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d620a9725e443c171fb195a074331fa4a745fa5cbb0018b4bbf42619e64b563" +dependencies = [ + "alloy-eip2930", + "alloy-eip7702", + "auto_impl", + "either", + "revm-database-interface 8.0.3", + "revm-primitives 21.0.1", + "revm-state 8.0.2", "serde", ] @@ -15774,10 +15891,24 @@ version = "7.0.2" source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de148f3cf21bbefabbe6014e561" dependencies = [ "alloy-eips", - "revm-bytecode", - "revm-database-interface", - "revm-primitives", - "revm-state", + "revm-bytecode 6.1.0", + "revm-database-interface 7.0.2", + "revm-primitives 20.1.0", + "revm-state 7.0.2", + "serde", +] + +[[package]] +name = "revm-database" +version = "9.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdefd7f40835e992bab40a245124cb1243e6c7a1c4659798827c809a59b0fea9" +dependencies = [ + "alloy-eips", + "revm-bytecode 7.0.2", + "revm-database-interface 8.0.3", + "revm-primitives 21.0.1", + "revm-state 8.0.2", "serde", ] @@ -15788,8 +15919,21 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "auto_impl", "either", - "revm-primitives", - "revm-state", + "revm-primitives 20.1.0", + "revm-state 7.0.2", + "serde", +] + +[[package]] +name = "revm-database-interface" +version = "8.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa488a73ac2738f11478650cdf1a0f263864c09d5f0e9bf6309e891a05323c60" +dependencies = [ + "auto_impl", + "either", + "revm-primitives 21.0.1", + "revm-state 8.0.2", "serde", ] @@ -15800,14 +15944,33 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "auto_impl", "derive-where", - "revm-bytecode", - "revm-context", - "revm-context-interface", - "revm-database-interface", - "revm-interpreter", - "revm-precompile", - "revm-primitives", - "revm-state", + "revm-bytecode 6.1.0", + "revm-context 8.0.4", + "revm-context-interface 9.0.0", + "revm-database-interface 7.0.2", + "revm-interpreter 24.0.0", + "revm-precompile 25.0.0", + "revm-primitives 20.1.0", + "revm-state 7.0.2", + "serde", +] + +[[package]] +name = "revm-handler" +version = "11.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d8049b2fbff6636150f4740c95369aa174e41b0383034e0e256cfdffcfcd23" +dependencies = [ + "auto_impl", + "derive-where", + "revm-bytecode 7.0.2", + "revm-context 10.1.2", + "revm-context-interface 11.1.2", + "revm-database-interface 8.0.3", + "revm-interpreter 28.0.0", + "revm-precompile 28.1.1", + "revm-primitives 21.0.1", + "revm-state 8.0.2", "serde", ] @@ -15818,21 +15981,39 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "auto_impl", "either", - "revm-context", - "revm-database-interface", - "revm-handler", - "revm-interpreter", - "revm-primitives", - "revm-state", + "revm-context 8.0.4", + "revm-database-interface 7.0.2", + "revm-handler 8.1.0", + "revm-interpreter 24.0.0", + "revm-primitives 20.1.0", + "revm-state 7.0.2", + "serde", + "serde_json", +] + +[[package]] +name = "revm-inspector" +version = "11.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2a21dd773b654ec7e080025eecef4ac84c711150d1bd36acadf0546f471329a" +dependencies = [ + "auto_impl", + "either", + "revm-context 10.1.2", + "revm-database-interface 8.0.3", + "revm-handler 11.2.0", + "revm-interpreter 28.0.0", + "revm-primitives 21.0.1", + "revm-state 8.0.2", "serde", "serde_json", ] [[package]] name = "revm-inspectors" -version = "0.26.6" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a316893eac04491a224ba7b65b2765aeaf7bbc7d24b8c34a6ce9afed39cd56" +checksum = "782c38fa94f99b4b15f1690bffc2c3cbf06a0f460cf163b470d126914b47d343" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -15840,7 +16021,7 @@ dependencies = [ "alloy-sol-types", "anstyle", "colorchoice", - "revm", + "revm 30.2.0", "serde", "serde_json", "thiserror 2.0.12", @@ -15851,9 +16032,22 @@ name = "revm-interpreter" version = "24.0.0" source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de148f3cf21bbefabbe6014e561" dependencies = [ - "revm-bytecode", - "revm-context-interface", - "revm-primitives", + "revm-bytecode 6.1.0", + "revm-context-interface 9.0.0", + "revm-primitives 20.1.0", + "serde", +] + +[[package]] +name = "revm-interpreter" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1de5c790122f8ded67992312af8acd41ccfcee629b25b819e10c5b1f69caf57" +dependencies = [ + "revm-bytecode 7.0.2", + "revm-context-interface 11.1.2", + "revm-primitives 21.0.1", + "revm-state 8.0.2", "serde", ] @@ -15876,7 +16070,31 @@ dependencies = [ "libsecp256k1", "once_cell", "p256", - "revm-primitives", + "revm-primitives 20.1.0", + "ripemd", + "rug", + "secp256k1 0.31.1", + "sha2 0.10.9", +] + +[[package]] +name = "revm-precompile" +version = "28.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57aadd7a2087705f653b5aaacc8ad4f8e851f5d330661e3f4c43b5475bbceae" +dependencies = [ + "ark-bls12-381 0.5.0", + "ark-bn254", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "arrayref", + "aurora-engine-modexp", + "c-kzg", + "cfg-if", + "k256", + "p256", + "revm-primitives 21.0.1", "ripemd", "rug", "secp256k1 0.31.1", @@ -15893,14 +16111,38 @@ dependencies = [ "serde", ] +[[package]] +name = "revm-primitives" +version = "21.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "536f30e24c3c2bf0d3d7d20fa9cf99b93040ed0f021fd9301c78cddb0dacda13" +dependencies = [ + "alloy-primitives", + "num_enum", + "once_cell", + "serde", +] + [[package]] name = "revm-state" version = "7.0.2" source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de148f3cf21bbefabbe6014e561" dependencies = [ - "bitflags 2.9.1", - "revm-bytecode", - "revm-primitives", + "bitflags 2.10.0", + "revm-bytecode 6.1.0", + "revm-primitives 20.1.0", + "serde", +] + +[[package]] +name = "revm-state" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e6bd5e669b02007872a8ca2643a14e308fe1739ee4475d74122587c3388a06a" +dependencies = [ + "bitflags 2.10.0", + "revm-bytecode 7.0.2", + "revm-primitives 21.0.1", "serde", ] @@ -16133,9 +16375,9 @@ dependencies = [ [[package]] name = "rug" -version = "1.27.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4207e8d668e5b8eb574bda8322088ccd0d7782d3d03c7e8d562e82ed82bdcbc3" +checksum = "58ad2e973fe3c3214251a840a621812a4f40468da814b1a3d6947d433c2af11f" dependencies = [ "az", "gmp-mpfr-sys", @@ -16268,7 +16510,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -16281,7 +16523,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.9.4", @@ -16399,7 +16641,7 @@ version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cfg-if", "clipboard-win", "fd-lock", @@ -17882,7 +18124,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -17964,9 +18206,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -17983,18 +18225,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -18318,7 +18560,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", ] [[package]] @@ -18689,7 +18931,7 @@ version = "0.1.5" source = "git+https://github.com/paradigmxyz/solar?tag=v0.1.5#3062e90c0f1aacfee7b01d2c3812a14804140daf" dependencies = [ "alloy-primitives", - "bitflags 2.9.1", + "bitflags 2.10.0", "bumpalo", "itertools 0.14.0", "memchr", @@ -18710,7 +18952,7 @@ source = "git+https://github.com/paradigmxyz/solar?tag=v0.1.5#3062e90c0f1aacfee7 dependencies = [ "alloy-json-abi", "alloy-primitives", - "bitflags 2.9.1", + "bitflags 2.10.0", "bumpalo", "derive_more 2.0.1", "either", @@ -19712,7 +19954,7 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.9.1", + "bitflags 2.10.0", "byteorder", "bytes", "crc", @@ -19754,7 +19996,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.9.1", + "bitflags 2.10.0", "byteorder", "crc", "dotenvy", @@ -19978,7 +20220,7 @@ checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" dependencies = [ "new_debug_unreachable", "parking_lot 0.12.4", - "phf_shared", + "phf_shared 0.11.3", "precomputed-hash", "serde", ] @@ -19989,8 +20231,8 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.11.3", + "phf_shared 0.11.3", "proc-macro2", "quote", ] @@ -20553,9 +20795,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.2.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ac494e7266fcdd2ad80bf4375d55d27a117ea5c866c26d0e97fe5b3caeeb75" +checksum = "ff790eb176cc81bb8936aed0f7b9f14fc4670069a2d371b3e3b0ecce908b2cb3" dependencies = [ "paste", "proc-macro2", @@ -20616,7 +20858,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -20709,7 +20951,7 @@ checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" dependencies = [ "fnv", "nom 7.1.3", - "phf", + "phf 0.11.3", "phf_codegen", ] @@ -21145,7 +21387,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "bytes", "http 1.3.1", "http-body 1.0.1", @@ -21161,7 +21403,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "bytes", "futures-core", "futures-util", @@ -22188,7 +22430,7 @@ version = "0.221.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d06bfa36ab3ac2be0dee563380147a5b81ba10dd8885d7fbbc9eb574be67d185" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", ] [[package]] @@ -22197,7 +22439,7 @@ version = "0.235.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "161296c618fa2d63f6ed5fffd1112937e803cb9ec71b32b01a76321555660917" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "hashbrown 0.15.4", "indexmap 2.10.0", "semver 1.0.26", @@ -22232,7 +22474,7 @@ checksum = "b6fe976922a16af3b0d67172c473d1fd4f1aa5d0af9c8ba6538c741f3af686f4" dependencies = [ "addr2line", "anyhow", - "bitflags 2.9.1", + "bitflags 2.10.0", "bumpalo", "cc", "cfg-if", @@ -22544,7 +22786,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" dependencies = [ - "phf", + "phf 0.11.3", "phf_codegen", "string_cache", "string_cache_codegen", @@ -23196,7 +23438,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index f8e0c3ea559ec..fbb28be64a961 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -252,17 +252,17 @@ alloy-hardforks = { version = "0.2.12", default-features = false } alloy-op-hardforks = { version = "0.2.12", default-features = false } ## alloy-core -alloy-dyn-abi = "1.2.1" -alloy-json-abi = "1.2.1" -alloy-primitives = { version = "1.2.1", features = [ +alloy-dyn-abi = "1.4.1" +alloy-json-abi = "1.4.1" +alloy-primitives = { version = "1.4.1", features = [ "getrandom", "rand", "map-fxhash", "map-foldhash", ] } -alloy-sol-macro-expander = "1.2.1" -alloy-sol-macro-input = "1.2.1" -alloy-sol-types = "1.2.1" +alloy-sol-macro-expander = "1.4.1" +alloy-sol-macro-input = "1.4.1" +alloy-sol-types = "1.4.1" alloy-chains = "0.2" alloy-rlp = "0.3" @@ -275,7 +275,7 @@ op-alloy-flz = "0.13.1" ## revm revm = { version = "27.0.3", default-features = false } -revm-inspectors = { version = "0.26.5", features = ["serde"] } +revm-inspectors = { version = "0.31.2", features = ["serde"] } op-revm = { version = "8.0.3", default-features = false } ## alloy-evm From ff129993ecad5e12ac91ba4bb70372be3e062d76 Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Wed, 22 Oct 2025 16:03:34 +0200 Subject: [PATCH 09/15] Revert "Update crates to address vulnerability in alloy" This reverts commit 3c5c7b10a96f795edbb4ab96d3cbf35e539de88c. --- Cargo.lock | 586 ++++++++++++++++------------------------------------- Cargo.toml | 14 +- 2 files changed, 179 insertions(+), 421 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 148369e45e649..fc8c6c0badd0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -104,9 +104,9 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.0.41" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9b151e38e42f1586a01369ec52a6934702731d07e8509a7307331b09f6c46dc" +checksum = "64a3bd0305a44fb457cae77de1e82856eadd42ea3cdf0dae29df32eb3b592979" dependencies = [ "alloy-eips", "alloy-primitives", @@ -123,16 +123,15 @@ dependencies = [ "rand 0.8.5", "secp256k1 0.30.0", "serde", - "serde_json", "serde_with", "thiserror 2.0.12", ] [[package]] name = "alloy-consensus-any" -version = "1.0.41" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2d5e8668ef6215efdb7dcca6f22277b4e483a5650e05f5de22b2350971f4b8" +checksum = "7a842b4023f571835e62ac39fb8d523d19fcdbacfa70bf796ff96e7e19586f50" dependencies = [ "alloy-consensus", "alloy-eips", @@ -180,15 +179,16 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "1.4.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdff496dd4e98a81f4861e66f7eaf5f2488971848bb42d9c892f871730245c8" +checksum = "7b95b3deca680efc7e9cba781f1a1db352fa1ea50e6384a514944dcf4419e652" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-type-parser", "alloy-sol-types", "arbitrary", + "derive_arbitrary", "derive_more 2.0.1", "itoa", "proptest", @@ -236,9 +236,9 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "1.0.41" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5434834adaf64fa20a6fb90877bc1d33214c41b055cc49f82189c98614368cc" +checksum = "5cd749c57f38f8cbf433e651179fc5a676255e6b95044f467d49255d2b81725a" dependencies = [ "alloy-eip2124", "alloy-eip2930", @@ -286,7 +286,7 @@ dependencies = [ "derive_more 2.0.1", "op-alloy-consensus 0.18.11", "op-revm", - "revm 27.1.0", + "revm", "thiserror 2.0.12", ] @@ -318,9 +318,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "1.4.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5513d5e6bd1cba6bdcf5373470f559f320c05c8c59493b6e98912fbe6733943f" +checksum = "125a1c373261b252e53e04d6e92c37d881833afc1315fceab53fd46045695640" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -371,9 +371,9 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "1.0.41" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e58f4f345cef483eab7374f2b6056973c7419ffe8ad35e994b7a7f5d8e0c7ba4" +checksum = "db489617bffe14847bf89f175b1c183e5dd7563ef84713936e2c34255cfbd845" dependencies = [ "alloy-consensus", "alloy-eips", @@ -396,7 +396,7 @@ dependencies = [ "auto_impl", "op-alloy-consensus 0.18.11", "op-revm", - "revm 27.1.0", + "revm", ] [[package]] @@ -412,9 +412,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "1.4.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "355bf68a433e0fd7f7d33d5a9fc2583fde70bf5c530f63b80845f8da5505cf28" +checksum = "bc9485c56de23438127a731a6b4c87803d49faf1a7068dcd1d8768aca3a9edb9" dependencies = [ "alloy-rlp", "arbitrary", @@ -422,9 +422,9 @@ dependencies = [ "cfg-if", "const-hex", "derive_more 2.0.1", - "foldhash 0.2.0", + "foldhash 0.1.5", "getrandom 0.3.3", - "hashbrown 0.16.0", + "hashbrown 0.15.4", "indexmap 2.10.0", "itoa", "k256", @@ -624,9 +624,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.0.41" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "361cd87ead4ba7659bda8127902eda92d17fa7ceb18aba1676f7be10f7222487" +checksum = "7f5812f81c3131abc2cd8953dc03c41999e180cff7252abbccaba68676e15027" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -645,9 +645,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" -version = "1.0.41" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de4e95fb0572b97b17751d0fdf5cdc42b0050f9dd9459eddd1bf2e2fbfed0a33" +checksum = "1070e7e92dae6a9c48885980f4f9ca9faa70f945fcd62fbb94472182ca08854f" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -671,9 +671,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.0.41" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64600fc6c312b7e0ba76f73a381059af044f4f21f43e07f51f1fa76c868fe302" +checksum = "04dfe41a47805a34b848c83448946ca96f3d36842e8c074bcf8fa0870e337d12" dependencies = [ "alloy-primitives", "serde", @@ -791,9 +791,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "1.4.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ce480400051b5217f19d6e9a82d9010cdde20f1ae9c00d53591e4a1afbb312" +checksum = "a14f21d053aea4c6630687c2f4ad614bed4c81e14737a9b904798b24f30ea849" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -805,9 +805,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "1.4.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d792e205ed3b72f795a8044c52877d2e6b6e9b1d13f431478121d8d4eaa9028" +checksum = "34d99282e7c9ef14eb62727981a985a01869e586d1dec729d3bb33679094c100" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -824,9 +824,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "1.4.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd1247a8f90b465ef3f1207627547ec16940c35597875cdc09c49d58b19693c" +checksum = "eda029f955b78e493360ee1d7bd11e1ab9f2a220a5715449babc79d6d0a01105" dependencies = [ "alloy-json-abi", "const-hex", @@ -842,9 +842,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "1.4.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954d1b2533b9b2c7959652df3076954ecb1122a28cc740aa84e7b0a49f6ac0a9" +checksum = "fe8c27b3cf6b2bb8361904732f955bc7c05e00be5f469cec7e2280b6167f3ff0" dependencies = [ "serde", "winnow", @@ -852,9 +852,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "1.4.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70319350969a3af119da6fb3e9bddb1bce66c9ea933600cb297c8b1850ad2a3c" +checksum = "58377025a47d8b8426b3e4846a251f2c1991033b27f517aade368146f6ab1dfe" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -956,9 +956,9 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.0.41" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e52276fdb553d3c11563afad2898f4085165e4093604afe3d78b69afbf408f" +checksum = "e434e0917dce890f755ea774f59d6f12557bc8c7dd9fa06456af80cfe0f0181e" dependencies = [ "alloy-primitives", "darling 0.21.0", @@ -1132,7 +1132,7 @@ dependencies = [ "parking_lot 0.12.4", "rand 0.8.5", "rand 0.9.2", - "revm 27.1.0", + "revm", "revm-inspectors", "serde", "serde_json", @@ -1162,7 +1162,7 @@ dependencies = [ "op-alloy-consensus 0.17.2", "op-revm", "rand 0.9.2", - "revm 27.1.0", + "revm", "serde", "serde_json", "thiserror 2.0.12", @@ -2844,7 +2844,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "cexpr", "clang-sys", "itertools 0.11.0", @@ -2867,7 +2867,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "cexpr", "clang-sys", "itertools 0.13.0", @@ -2964,11 +2964,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" dependencies = [ - "serde_core", + "serde", ] [[package]] @@ -3492,9 +3492,9 @@ dependencies = [ [[package]] name = "c-kzg" -version = "2.1.5" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e00bf4b112b07b505472dbefd19e37e53307e2bfed5a79e0cc161d58ccd0e687" +checksum = "7318cfa722931cb5fe0838b98d3ce5621e75f6a6408abc21721d80de9223f2e4" dependencies = [ "blst", "cc", @@ -3616,7 +3616,7 @@ dependencies = [ "rand 0.9.2", "rayon", "regex", - "revm 27.1.0", + "revm", "rpassword", "semver 1.0.26", "serde", @@ -3743,7 +3743,7 @@ dependencies = [ "foundry-solang-parser", "regex", "reqwest", - "revm 27.1.0", + "revm", "rustyline", "semver 1.0.26", "serde", @@ -4553,7 +4553,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "crossterm_winapi", "mio", "parking_lot 0.12.4", @@ -4645,7 +4645,7 @@ dependencies = [ "cssparser-macros", "dtoa-short", "itoa", - "phf 0.11.3", + "phf", "smallvec", ] @@ -5290,9 +5290,9 @@ dependencies = [ [[package]] name = "derive-where" -version = "1.6.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" +checksum = "510c292c8cf384b1a340b816a9a6cf2599eb8f566a44949024af88418000c50b" dependencies = [ "proc-macro2", "quote", @@ -6317,7 +6317,7 @@ dependencies = [ "regex", "reqwest", "revive-strategy", - "revm 27.1.0", + "revm", "rstest 0.24.0", "rvm-rs", "semver 1.0.26", @@ -6500,7 +6500,7 @@ dependencies = [ "itertools 0.14.0", "regex", "reqwest", - "revm 27.1.0", + "revm", "semver 1.0.26", "serde", "serde_json", @@ -6615,7 +6615,7 @@ dependencies = [ "parking_lot 0.12.4", "proptest", "rand 0.9.2", - "revm 27.1.0", + "revm", "revm-inspectors", "semver 1.0.26", "serde", @@ -6755,7 +6755,7 @@ dependencies = [ "alloy-serde", "chrono", "foundry-macros", - "revm 27.1.0", + "revm", "serde", "serde_json", "similar-asserts", @@ -6910,7 +6910,7 @@ dependencies = [ "path-slash", "regex", "reqwest", - "revm 27.1.0", + "revm", "semver 1.0.26", "serde", "serde_json", @@ -6939,7 +6939,7 @@ dependencies = [ "foundry-evm-core", "foundry-evm-traces", "ratatui", - "revm 27.1.0", + "revm", "revm-inspectors", "serde", "tracing", @@ -6967,7 +6967,7 @@ dependencies = [ "indicatif", "parking_lot 0.12.4", "proptest", - "revm 27.1.0", + "revm", "revm-inspectors", "serde", "serde_json", @@ -7017,7 +7017,7 @@ dependencies = [ "itertools 0.14.0", "op-revm", "parking_lot 0.12.4", - "revm 27.1.0", + "revm", "revm-inspectors", "serde", "serde_json", @@ -7037,7 +7037,7 @@ dependencies = [ "foundry-compilers", "foundry-evm-core", "rayon", - "revm 27.1.0", + "revm", "semver 1.0.26", "tracing", ] @@ -7060,7 +7060,7 @@ dependencies = [ "parking_lot 0.12.4", "proptest", "rand 0.9.2", - "revm 27.1.0", + "revm", "serde", "thiserror 2.0.12", "tracing", @@ -7084,7 +7084,7 @@ dependencies = [ "futures", "itertools 0.14.0", "rayon", - "revm 27.1.0", + "revm", "revm-inspectors", "serde", "serde_json", @@ -7109,7 +7109,7 @@ dependencies = [ "eyre", "futures", "parking_lot 0.12.4", - "revm 27.1.0", + "revm", "serde", "serde_json", "thiserror 2.0.12", @@ -7147,7 +7147,7 @@ dependencies = [ "itertools 0.14.0", "lalrpop", "lalrpop-util", - "phf 0.11.3", + "phf", "thiserror 2.0.12", "unicode-xid", ] @@ -7706,7 +7706,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27d12c0aed7f1e24276a241aadc4cb8ea9f83000f34bc062b7cc2d51e3b0fabd" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "debugid", "fxhash", "serde", @@ -7839,7 +7839,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "libc", "libgit2-sys", "log", @@ -8068,16 +8068,6 @@ dependencies = [ "serde", ] -[[package]] -name = "hashbrown" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" -dependencies = [ - "foldhash 0.2.0", - "serde", -] - [[package]] name = "hashlink" version = "0.8.4" @@ -8803,7 +8793,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "inotify-sys", "libc", ] @@ -8891,7 +8881,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "cfg-if", "libc", ] @@ -9967,7 +9957,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4488594b9328dee448adb906d8b126d9b7deb7cf5c22161ee591610bb1be83c0" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "libc", "redox_syscall 0.5.13", ] @@ -10926,7 +10916,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -10938,7 +10928,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -11020,7 +11010,7 @@ version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3163f59cd3fa0e9ef8c32f242966a7b9994fd7378366099593e0e73077cd8c97" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "fsevent-sys", "inotify", "kqueue", @@ -11372,7 +11362,7 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "auto_impl", "once_cell", - "revm 27.1.0", + "revm", "serde", ] @@ -12847,7 +12837,7 @@ dependencies = [ "polkavm 0.27.0", "polkavm-common 0.27.0", "rand 0.8.5", - "revm 27.1.0", + "revm", "ripemd", "rlp 0.6.1", "scale-info", @@ -13864,19 +13854,8 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ - "phf_macros 0.11.3", - "phf_shared 0.11.3", - "serde", -] - -[[package]] -name = "phf" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" -dependencies = [ - "phf_macros 0.13.1", - "phf_shared 0.13.1", + "phf_macros", + "phf_shared", "serde", ] @@ -13886,8 +13865,8 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", + "phf_generator", + "phf_shared", ] [[package]] @@ -13896,41 +13875,18 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "phf_shared 0.11.3", + "phf_shared", "rand 0.8.5", ] -[[package]] -name = "phf_generator" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" -dependencies = [ - "fastrand", - "phf_shared 0.13.1", -] - [[package]] name = "phf_macros" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "phf_macros" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" -dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", + "phf_generator", + "phf_shared", "proc-macro2", "quote", "syn 2.0.104", @@ -13945,15 +13901,6 @@ dependencies = [ "siphasher 1.0.1", ] -[[package]] -name = "phf_shared" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" -dependencies = [ - "siphasher 1.0.1", -] - [[package]] name = "pin-project" version = "0.4.30" @@ -15021,7 +14968,7 @@ checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.10.0", + "bitflags 2.9.1", "lazy_static", "num-traits", "rand 0.9.2", @@ -15035,9 +14982,9 @@ dependencies = [ [[package]] name = "proptest-derive" -version = "0.6.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "095a99f75c69734802359b682be8daaf8980296731f6470434ea2c652af1dd30" +checksum = "4ee1c9ac207483d5e7db4940700de86a9aae46ef90c48b57f99fe7edb8345e49" dependencies = [ "proc-macro2", "quote", @@ -15154,7 +15101,7 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76979bea66e7875e7509c4ec5300112b316af87fa7a252ca91c448b32dfe3993" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "memchr", "pulldown-cmark-escape", "unicase", @@ -15448,7 +15395,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "cassowary", "compact_str", "crossterm", @@ -15469,7 +15416,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", ] [[package]] @@ -15531,7 +15478,7 @@ version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", ] [[package]] @@ -15752,7 +15699,7 @@ dependencies = [ "parity-scale-codec", "polkadot-sdk", "revive-env", - "revm 27.1.0", + "revm", "scale-info", "semver 1.0.26", "serde", @@ -15766,36 +15713,17 @@ name = "revm" version = "27.1.0" source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de148f3cf21bbefabbe6014e561" dependencies = [ - "revm-bytecode 6.1.0", - "revm-context 8.0.4", - "revm-context-interface 9.0.0", - "revm-database 7.0.2", - "revm-database-interface 7.0.2", - "revm-handler 8.1.0", - "revm-inspector 8.1.0", - "revm-interpreter 24.0.0", - "revm-precompile 25.0.0", - "revm-primitives 20.1.0", - "revm-state 7.0.2", -] - -[[package]] -name = "revm" -version = "30.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76df793c6ef3bef8f88f05b3873ebebce1494385a3ce8f58ad2e2e111aa0de11" -dependencies = [ - "revm-bytecode 7.0.2", - "revm-context 10.1.2", - "revm-context-interface 11.1.2", - "revm-database 9.0.2", - "revm-database-interface 8.0.3", - "revm-handler 11.2.0", - "revm-inspector 11.2.0", - "revm-interpreter 28.0.0", - "revm-precompile 28.1.1", - "revm-primitives 21.0.1", - "revm-state 8.0.2", + "revm-bytecode", + "revm-context", + "revm-context-interface", + "revm-database", + "revm-database-interface", + "revm-handler", + "revm-inspector", + "revm-interpreter", + "revm-precompile", + "revm-primitives", + "revm-state", ] [[package]] @@ -15805,20 +15733,8 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "bitvec", "once_cell", - "phf 0.11.3", - "revm-primitives 20.1.0", - "serde", -] - -[[package]] -name = "revm-bytecode" -version = "7.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451748b17ac78bd2b0748ec472a5392cd78fc0f7d19d528be44770fda28fd6f7" -dependencies = [ - "bitvec", - "phf 0.13.1", - "revm-primitives 21.0.1", + "phf", + "revm-primitives", "serde", ] @@ -15829,28 +15745,11 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "cfg-if", "derive-where", - "revm-bytecode 6.1.0", - "revm-context-interface 9.0.0", - "revm-database-interface 7.0.2", - "revm-primitives 20.1.0", - "revm-state 7.0.2", - "serde", -] - -[[package]] -name = "revm-context" -version = "10.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7adcce0c14cf59b7128de34185a0fbf8f63309539b9263b35ead870d73584114" -dependencies = [ - "bitvec", - "cfg-if", - "derive-where", - "revm-bytecode 7.0.2", - "revm-context-interface 11.1.2", - "revm-database-interface 8.0.3", - "revm-primitives 21.0.1", - "revm-state 8.0.2", + "revm-bytecode", + "revm-context-interface", + "revm-database-interface", + "revm-primitives", + "revm-state", "serde", ] @@ -15863,25 +15762,9 @@ dependencies = [ "alloy-eip7702", "auto_impl", "either", - "revm-database-interface 7.0.2", - "revm-primitives 20.1.0", - "revm-state 7.0.2", - "serde", -] - -[[package]] -name = "revm-context-interface" -version = "11.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d620a9725e443c171fb195a074331fa4a745fa5cbb0018b4bbf42619e64b563" -dependencies = [ - "alloy-eip2930", - "alloy-eip7702", - "auto_impl", - "either", - "revm-database-interface 8.0.3", - "revm-primitives 21.0.1", - "revm-state 8.0.2", + "revm-database-interface", + "revm-primitives", + "revm-state", "serde", ] @@ -15891,24 +15774,10 @@ version = "7.0.2" source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de148f3cf21bbefabbe6014e561" dependencies = [ "alloy-eips", - "revm-bytecode 6.1.0", - "revm-database-interface 7.0.2", - "revm-primitives 20.1.0", - "revm-state 7.0.2", - "serde", -] - -[[package]] -name = "revm-database" -version = "9.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdefd7f40835e992bab40a245124cb1243e6c7a1c4659798827c809a59b0fea9" -dependencies = [ - "alloy-eips", - "revm-bytecode 7.0.2", - "revm-database-interface 8.0.3", - "revm-primitives 21.0.1", - "revm-state 8.0.2", + "revm-bytecode", + "revm-database-interface", + "revm-primitives", + "revm-state", "serde", ] @@ -15919,21 +15788,8 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "auto_impl", "either", - "revm-primitives 20.1.0", - "revm-state 7.0.2", - "serde", -] - -[[package]] -name = "revm-database-interface" -version = "8.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa488a73ac2738f11478650cdf1a0f263864c09d5f0e9bf6309e891a05323c60" -dependencies = [ - "auto_impl", - "either", - "revm-primitives 21.0.1", - "revm-state 8.0.2", + "revm-primitives", + "revm-state", "serde", ] @@ -15944,33 +15800,14 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "auto_impl", "derive-where", - "revm-bytecode 6.1.0", - "revm-context 8.0.4", - "revm-context-interface 9.0.0", - "revm-database-interface 7.0.2", - "revm-interpreter 24.0.0", - "revm-precompile 25.0.0", - "revm-primitives 20.1.0", - "revm-state 7.0.2", - "serde", -] - -[[package]] -name = "revm-handler" -version = "11.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d8049b2fbff6636150f4740c95369aa174e41b0383034e0e256cfdffcfcd23" -dependencies = [ - "auto_impl", - "derive-where", - "revm-bytecode 7.0.2", - "revm-context 10.1.2", - "revm-context-interface 11.1.2", - "revm-database-interface 8.0.3", - "revm-interpreter 28.0.0", - "revm-precompile 28.1.1", - "revm-primitives 21.0.1", - "revm-state 8.0.2", + "revm-bytecode", + "revm-context", + "revm-context-interface", + "revm-database-interface", + "revm-interpreter", + "revm-precompile", + "revm-primitives", + "revm-state", "serde", ] @@ -15981,39 +15818,21 @@ source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de1 dependencies = [ "auto_impl", "either", - "revm-context 8.0.4", - "revm-database-interface 7.0.2", - "revm-handler 8.1.0", - "revm-interpreter 24.0.0", - "revm-primitives 20.1.0", - "revm-state 7.0.2", - "serde", - "serde_json", -] - -[[package]] -name = "revm-inspector" -version = "11.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2a21dd773b654ec7e080025eecef4ac84c711150d1bd36acadf0546f471329a" -dependencies = [ - "auto_impl", - "either", - "revm-context 10.1.2", - "revm-database-interface 8.0.3", - "revm-handler 11.2.0", - "revm-interpreter 28.0.0", - "revm-primitives 21.0.1", - "revm-state 8.0.2", + "revm-context", + "revm-database-interface", + "revm-handler", + "revm-interpreter", + "revm-primitives", + "revm-state", "serde", "serde_json", ] [[package]] name = "revm-inspectors" -version = "0.31.2" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "782c38fa94f99b4b15f1690bffc2c3cbf06a0f460cf163b470d126914b47d343" +checksum = "c3a316893eac04491a224ba7b65b2765aeaf7bbc7d24b8c34a6ce9afed39cd56" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -16021,7 +15840,7 @@ dependencies = [ "alloy-sol-types", "anstyle", "colorchoice", - "revm 30.2.0", + "revm", "serde", "serde_json", "thiserror 2.0.12", @@ -16032,22 +15851,9 @@ name = "revm-interpreter" version = "24.0.0" source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de148f3cf21bbefabbe6014e561" dependencies = [ - "revm-bytecode 6.1.0", - "revm-context-interface 9.0.0", - "revm-primitives 20.1.0", - "serde", -] - -[[package]] -name = "revm-interpreter" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1de5c790122f8ded67992312af8acd41ccfcee629b25b819e10c5b1f69caf57" -dependencies = [ - "revm-bytecode 7.0.2", - "revm-context-interface 11.1.2", - "revm-primitives 21.0.1", - "revm-state 8.0.2", + "revm-bytecode", + "revm-context-interface", + "revm-primitives", "serde", ] @@ -16070,31 +15876,7 @@ dependencies = [ "libsecp256k1", "once_cell", "p256", - "revm-primitives 20.1.0", - "ripemd", - "rug", - "secp256k1 0.31.1", - "sha2 0.10.9", -] - -[[package]] -name = "revm-precompile" -version = "28.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57aadd7a2087705f653b5aaacc8ad4f8e851f5d330661e3f4c43b5475bbceae" -dependencies = [ - "ark-bls12-381 0.5.0", - "ark-bn254", - "ark-ec 0.5.0", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "arrayref", - "aurora-engine-modexp", - "c-kzg", - "cfg-if", - "k256", - "p256", - "revm-primitives 21.0.1", + "revm-primitives", "ripemd", "rug", "secp256k1 0.31.1", @@ -16111,38 +15893,14 @@ dependencies = [ "serde", ] -[[package]] -name = "revm-primitives" -version = "21.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "536f30e24c3c2bf0d3d7d20fa9cf99b93040ed0f021fd9301c78cddb0dacda13" -dependencies = [ - "alloy-primitives", - "num_enum", - "once_cell", - "serde", -] - [[package]] name = "revm-state" version = "7.0.2" source = "git+https://github.com/bluealloy/revm.git?rev=409c2b3#409c2b3b1a905de148f3cf21bbefabbe6014e561" dependencies = [ - "bitflags 2.10.0", - "revm-bytecode 6.1.0", - "revm-primitives 20.1.0", - "serde", -] - -[[package]] -name = "revm-state" -version = "8.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6bd5e669b02007872a8ca2643a14e308fe1739ee4475d74122587c3388a06a" -dependencies = [ - "bitflags 2.10.0", - "revm-bytecode 7.0.2", - "revm-primitives 21.0.1", + "bitflags 2.9.1", + "revm-bytecode", + "revm-primitives", "serde", ] @@ -16375,9 +16133,9 @@ dependencies = [ [[package]] name = "rug" -version = "1.28.0" +version = "1.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad2e973fe3c3214251a840a621812a4f40468da814b1a3d6947d433c2af11f" +checksum = "4207e8d668e5b8eb574bda8322088ccd0d7782d3d03c7e8d562e82ed82bdcbc3" dependencies = [ "az", "gmp-mpfr-sys", @@ -16510,7 +16268,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -16523,7 +16281,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.9.4", @@ -16641,7 +16399,7 @@ version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "cfg-if", "clipboard-win", "fd-lock", @@ -18124,7 +17882,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -18206,9 +17964,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" dependencies = [ "serde_core", "serde_derive", @@ -18225,18 +17983,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" dependencies = [ "proc-macro2", "quote", @@ -18560,7 +18318,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", ] [[package]] @@ -18931,7 +18689,7 @@ version = "0.1.5" source = "git+https://github.com/paradigmxyz/solar?tag=v0.1.5#3062e90c0f1aacfee7b01d2c3812a14804140daf" dependencies = [ "alloy-primitives", - "bitflags 2.10.0", + "bitflags 2.9.1", "bumpalo", "itertools 0.14.0", "memchr", @@ -18952,7 +18710,7 @@ source = "git+https://github.com/paradigmxyz/solar?tag=v0.1.5#3062e90c0f1aacfee7 dependencies = [ "alloy-json-abi", "alloy-primitives", - "bitflags 2.10.0", + "bitflags 2.9.1", "bumpalo", "derive_more 2.0.1", "either", @@ -19954,7 +19712,7 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.10.0", + "bitflags 2.9.1", "byteorder", "bytes", "crc", @@ -19996,7 +19754,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.10.0", + "bitflags 2.9.1", "byteorder", "crc", "dotenvy", @@ -20220,7 +19978,7 @@ checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" dependencies = [ "new_debug_unreachable", "parking_lot 0.12.4", - "phf_shared 0.11.3", + "phf_shared", "precomputed-hash", "serde", ] @@ -20231,8 +19989,8 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", + "phf_generator", + "phf_shared", "proc-macro2", "quote", ] @@ -20795,9 +20553,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.4.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff790eb176cc81bb8936aed0f7b9f14fc4670069a2d371b3e3b0ecce908b2cb3" +checksum = "b9ac494e7266fcdd2ad80bf4375d55d27a117ea5c866c26d0e97fe5b3caeeb75" dependencies = [ "paste", "proc-macro2", @@ -20858,7 +20616,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -20951,7 +20709,7 @@ checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" dependencies = [ "fnv", "nom 7.1.3", - "phf 0.11.3", + "phf", "phf_codegen", ] @@ -21387,7 +21145,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "bytes", "http 1.3.1", "http-body 1.0.1", @@ -21403,7 +21161,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "bytes", "futures-core", "futures-util", @@ -22430,7 +22188,7 @@ version = "0.221.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d06bfa36ab3ac2be0dee563380147a5b81ba10dd8885d7fbbc9eb574be67d185" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", ] [[package]] @@ -22439,7 +22197,7 @@ version = "0.235.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "161296c618fa2d63f6ed5fffd1112937e803cb9ec71b32b01a76321555660917" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", "hashbrown 0.15.4", "indexmap 2.10.0", "semver 1.0.26", @@ -22474,7 +22232,7 @@ checksum = "b6fe976922a16af3b0d67172c473d1fd4f1aa5d0af9c8ba6538c741f3af686f4" dependencies = [ "addr2line", "anyhow", - "bitflags 2.10.0", + "bitflags 2.9.1", "bumpalo", "cc", "cfg-if", @@ -22786,7 +22544,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" dependencies = [ - "phf 0.11.3", + "phf", "phf_codegen", "string_cache", "string_cache_codegen", @@ -23438,7 +23196,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.1", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index fbb28be64a961..f8e0c3ea559ec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -252,17 +252,17 @@ alloy-hardforks = { version = "0.2.12", default-features = false } alloy-op-hardforks = { version = "0.2.12", default-features = false } ## alloy-core -alloy-dyn-abi = "1.4.1" -alloy-json-abi = "1.4.1" -alloy-primitives = { version = "1.4.1", features = [ +alloy-dyn-abi = "1.2.1" +alloy-json-abi = "1.2.1" +alloy-primitives = { version = "1.2.1", features = [ "getrandom", "rand", "map-fxhash", "map-foldhash", ] } -alloy-sol-macro-expander = "1.4.1" -alloy-sol-macro-input = "1.4.1" -alloy-sol-types = "1.4.1" +alloy-sol-macro-expander = "1.2.1" +alloy-sol-macro-input = "1.2.1" +alloy-sol-types = "1.2.1" alloy-chains = "0.2" alloy-rlp = "0.3" @@ -275,7 +275,7 @@ op-alloy-flz = "0.13.1" ## revm revm = { version = "27.0.3", default-features = false } -revm-inspectors = { version = "0.31.2", features = ["serde"] } +revm-inspectors = { version = "0.26.5", features = ["serde"] } op-revm = { version = "8.0.3", default-features = false } ## alloy-evm From 915461ef29ca5fafc9091996ff63a1746689ae06 Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Wed, 22 Oct 2025 16:04:22 +0200 Subject: [PATCH 10/15] Deny check --- deny.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/deny.toml b/deny.toml index eb4831947c607..a1a2867641aaa 100644 --- a/deny.toml +++ b/deny.toml @@ -27,6 +27,9 @@ ignore = [ "RUSTSEC-2024-0384", # https://rustsec.org/advisories/RUSTSEC-2025-0057 `fxhash` is unmaintained "RUSTSEC-2025-0057", + # https://rustsec.org/advisories/RUSTSEC-2025-0047 DoS vulnerability on `alloy_dyn_abi::TypedData` hashing + # Cannot upgrade to 1.4.1 without breaking revm compatibility (requires revm upgrade) + "RUSTSEC-2025-0047", ] # This section is considered when running `cargo deny check bans`. From 23053031e7c9530187f8edd2d8bb980e319d441d Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Wed, 22 Oct 2025 16:25:57 +0200 Subject: [PATCH 11/15] Modify ignore list in deny check --- deny.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deny.toml b/deny.toml index a1a2867641aaa..5555bc9f57f44 100644 --- a/deny.toml +++ b/deny.toml @@ -27,9 +27,9 @@ ignore = [ "RUSTSEC-2024-0384", # https://rustsec.org/advisories/RUSTSEC-2025-0057 `fxhash` is unmaintained "RUSTSEC-2025-0057", - # https://rustsec.org/advisories/RUSTSEC-2025-0047 DoS vulnerability on `alloy_dyn_abi::TypedData` hashing + # https://rustsec.org/advisories/RUSTSEC-2025-0073 DoS vulnerability on `alloy_dyn_abi::TypedData` hashing # Cannot upgrade to 1.4.1 without breaking revm compatibility (requires revm upgrade) - "RUSTSEC-2025-0047", + "RUSTSEC-2025-0073", ] # This section is considered when running `cargo deny check bans`. From f466b69c06c52d5279622300ff5cbb069a87e4eb Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Thu, 23 Oct 2025 14:09:54 +0200 Subject: [PATCH 12/15] Increase job timeout --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7ff4b4bec0922..a0976b8a1a605 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -82,7 +82,7 @@ jobs: clippy: runs-on: ubuntu-latest - timeout-minutes: 30 + timeout-minutes: 60 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@clippy From c79f408d320f3ddde29c69d714599e2ceba5f584 Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Mon, 27 Oct 2025 10:25:12 +0100 Subject: [PATCH 13/15] Fix backend selection --- crates/forge/src/runner.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/forge/src/runner.rs b/crates/forge/src/runner.rs index 0b17cb7cc0dd7..aa5a2fecb037b 100644 --- a/crates/forge/src/runner.rs +++ b/crates/forge/src/runner.rs @@ -449,7 +449,7 @@ impl<'a> ContractRunner<'a> { f() } }; - let backend = if self.config.resolc.resolc_compile { + let backend = if self.config.resolc.resolc_compile || self.config.resolc.polkadot { Some(revive_strategy::Backend::get()) } else { None From fdfbfcc6c36dbb1e6e8170934aff9c4662bf9a83 Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Mon, 27 Oct 2025 12:49:40 +0100 Subject: [PATCH 14/15] Fix tests --- crates/forge/tests/it/revive/cheat_store.rs | 23 +++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/crates/forge/tests/it/revive/cheat_store.rs b/crates/forge/tests/it/revive/cheat_store.rs index c4b6387965c45..f65c13d62c28b 100644 --- a/crates/forge/tests/it/revive/cheat_store.rs +++ b/crates/forge/tests/it/revive/cheat_store.rs @@ -1,26 +1,37 @@ use crate::{config::*, test_helpers::TEST_DATA_REVIVE}; use foundry_test_utils::Filter; +use revive_strategy::ReviveRuntimeMode; use revm::primitives::hardfork::SpecId; +use rstest::rstest; +#[rstest] +#[case::pvm(ReviveRuntimeMode::Pvm)] +#[case::evm(ReviveRuntimeMode::Evm)] #[tokio::test(flavor = "multi_thread")] -async fn test_store_works() { - let runner: forge::MultiContractRunner = TEST_DATA_REVIVE.runner_revive(); +async fn test_store_works(#[case] runtime_mode: ReviveRuntimeMode) { + let runner: forge::MultiContractRunner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = Filter::new("testStoreWorks", "Store", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::PRAGUE).run().await; } +#[rstest] +#[case::pvm(ReviveRuntimeMode::Pvm)] +#[case::evm(ReviveRuntimeMode::Evm)] #[tokio::test(flavor = "multi_thread")] -async fn test_store_fuzzed() { - let runner: forge::MultiContractRunner = TEST_DATA_REVIVE.runner_revive(); +async fn test_store_fuzzed(#[case] runtime_mode: ReviveRuntimeMode) { + let runner: forge::MultiContractRunner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = Filter::new("testStoreFuzzed", "Store", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::PRAGUE).run().await; } +#[rstest] +#[case::pvm(ReviveRuntimeMode::Pvm)] +#[case::evm(ReviveRuntimeMode::Evm)] #[tokio::test(flavor = "multi_thread")] -async fn test_store_not_available_on_precompiles() { - let runner: forge::MultiContractRunner = TEST_DATA_REVIVE.runner_revive(); +async fn test_store_not_available_on_precompiles(#[case] runtime_mode: ReviveRuntimeMode) { + let runner: forge::MultiContractRunner = TEST_DATA_REVIVE.runner_revive(runtime_mode); let filter = Filter::new("testStoreNotAvailableOnPrecompiles", "Store", ".*/revive/.*"); TestConfig::with_filter(runner, filter).spec_id(SpecId::PRAGUE).run().await; From 741ec9cdd6d192a225b3e00a6f46bbcbfb2d32ec Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Mon, 27 Oct 2025 13:12:45 +0100 Subject: [PATCH 15/15] Fmt --- crates/revive-strategy/src/cheatcodes/mod.rs | 7 ++----- crates/revive-strategy/src/executor/context.rs | 12 +----------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/crates/revive-strategy/src/cheatcodes/mod.rs b/crates/revive-strategy/src/cheatcodes/mod.rs index 8350ce280ef7e..746472580c4b2 100644 --- a/crates/revive-strategy/src/cheatcodes/mod.rs +++ b/crates/revive-strategy/src/cheatcodes/mod.rs @@ -798,9 +798,6 @@ impl foundry_cheatcodes::CheatcodeInspectorStrategyExt for PvmCheatcodeInspector } }; - // Store code_bytes for use in output - let deployed_bytecode = code_bytes.clone(); - let mut tracer = Tracer::new(true); let res = execute_with_externalities(|externalities| { externalities.execute_with(|| { @@ -810,7 +807,7 @@ impl foundry_cheatcodes::CheatcodeInspectorStrategyExt for PvmCheatcodeInspector )); let evm_value = sp_core::U256::from_little_endian(&input.value().as_le_bytes()); - let code = Code::Upload(code_bytes); + let code = Code::Upload(code_bytes.clone()); let data = constructor_args; let salt = match input.scheme() { Some(CreateScheme::Create2 { salt }) => Some( @@ -861,7 +858,7 @@ impl foundry_cheatcodes::CheatcodeInspectorStrategyExt for PvmCheatcodeInspector CreateOutcome { result: InterpreterResult { result: InstructionResult::Return, - output: deployed_bytecode.into(), + output: code_bytes.into(), gas, }, address: Some(Address::from_slice(result.addr.as_bytes())), diff --git a/crates/revive-strategy/src/executor/context.rs b/crates/revive-strategy/src/executor/context.rs index 8492e08e1b062..66af906dacfe4 100644 --- a/crates/revive-strategy/src/executor/context.rs +++ b/crates/revive-strategy/src/executor/context.rs @@ -6,7 +6,7 @@ use foundry_evm::executors::ExecutorStrategyContext; use crate::ReviveRuntimeMode; /// Defines the context for [crate::ReviveExecutorStrategyRunner]. -#[derive(Debug, Clone)] +#[derive(Debug, Default, Clone)] pub struct ReviveExecutorStrategyContext { /// Runtime backend mode (PVM or EVM on Polkadot) pub(crate) runtime_mode: ReviveRuntimeMode, @@ -16,16 +16,6 @@ pub struct ReviveExecutorStrategyContext { pub(crate) compilation_output: Option, } -impl Default for ReviveExecutorStrategyContext { - fn default() -> Self { - Self { - runtime_mode: ReviveRuntimeMode::Pvm, - dual_compiled_contracts: Default::default(), - compilation_output: None, - } - } -} - impl ReviveExecutorStrategyContext { pub fn new(runtime_mode: ReviveRuntimeMode) -> Self { Self { runtime_mode, ..Default::default() }