diff --git a/crates/forge/tests/it/revive/cheats_individual.rs b/crates/forge/tests/it/revive/cheats_individual.rs index 09f8885c475ea..cc96c687aa578 100644 --- a/crates/forge/tests/it/revive/cheats_individual.rs +++ b/crates/forge/tests/it/revive/cheats_individual.rs @@ -50,3 +50,4 @@ revive_cheat_test!(test_coinbase, "CoinBase"); revive_cheat_test!(test_set_custom_blockhash, "SetBlockhash"); revive_cheat_test_original!(test_set_blockhash, "SetBlockhash"); revive_cheat_test!(test_roll, "Roll"); +revive_cheat_test_original!(test_etch, "Etch"); diff --git a/crates/revive-strategy/src/cheatcodes/mod.rs b/crates/revive-strategy/src/cheatcodes/mod.rs index ffad9796329fb..ca5ce058452db 100644 --- a/crates/revive-strategy/src/cheatcodes/mod.rs +++ b/crates/revive-strategy/src/cheatcodes/mod.rs @@ -443,10 +443,15 @@ impl CheatcodeInspectorStrategyRunner for PvmCheatcodeInspectorStrategyRunner { t if using_revive && is::(t) => { let etchCall { target, newRuntimeBytecode } = cheatcode.as_any().downcast_ref().unwrap(); - let ctx = get_context_ref_mut(ccx.state.strategy.context.as_mut()); + if ccx.is_precompile(target) { + return Err(precompile_error(target)); + } + + let ctx = get_context_ref_mut(ccx.state.strategy.context.as_mut()); ctx.externalities.etch_call(target, newRuntimeBytecode, ccx.ecx)?; - Ok(Default::default()) + + cheatcode.dyn_apply(ccx, executor) } t if is::(t) => {