From 228b0343f372c69924023721c00f2d0e01e72a86 Mon Sep 17 00:00:00 2001 From: Roman Krasiuk Date: Wed, 14 Aug 2024 19:21:47 -0700 Subject: [PATCH] fix(eip7702): set delegated code on call --- crates/revm/src/context/evm_context.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/revm/src/context/evm_context.rs b/crates/revm/src/context/evm_context.rs index cfd87f0ec2..c66a866a5b 100644 --- a/crates/revm/src/context/evm_context.rs +++ b/crates/revm/src/context/evm_context.rs @@ -222,7 +222,7 @@ impl EvmContext { .load_code(inputs.bytecode_address, &mut self.inner.db)?; let code_hash = account.info.code_hash(); - let bytecode = account.info.code.clone().unwrap_or_default(); + let mut bytecode = account.info.code.clone().unwrap_or_default(); // ExtDelegateCall is not allowed to call non-EOF contracts. if inputs.scheme.is_ext_delegate_call() @@ -236,6 +236,17 @@ impl EvmContext { return return_result(InstructionResult::Stop); } + if let Bytecode::Eip7702s(eip7702_bytecode) = bytecode { + bytecode = self + .inner + .journaled_state + .load_code(eip7702_bytecode.delegated_address, &mut self.inner.db)? + .info + .code + .clone() + .unwrap_or_default(); + } + let contract = Contract::new_with_context(inputs.input.clone(), bytecode, Some(code_hash), inputs); // Create interpreter and executes call and push new CallStackFrame.