diff --git a/crates/revive-strategy/src/tracing/call_tracer.rs b/crates/revive-strategy/src/tracing/call_tracer.rs index 6d3ad8681d0eb..e45c7119af8c6 100644 --- a/crates/revive-strategy/src/tracing/call_tracer.rs +++ b/crates/revive-strategy/src/tracing/call_tracer.rs @@ -24,12 +24,16 @@ impl Tracing for ExpectedCallTracer { &mut self, _from: H160, to: H160, - _is_delegate_call: bool, + is_delegate_call: bool, _is_read_only: bool, value: U256, input: &[u8], _gas: Weight, ) { + if is_delegate_call { + return; + } + if !self.is_create && let Some(expected_calls_for_target) = self.data.get_mut(&Address::from(to.0)) { diff --git a/testdata/default/cheats/ExpectCallRevive.t.sol b/testdata/default/cheats/ExpectCallRevive.t.sol index 9b7662aaf2633..0e4d7f44c0758 100644 --- a/testdata/default/cheats/ExpectCallRevive.t.sol +++ b/testdata/default/cheats/ExpectCallRevive.t.sol @@ -347,3 +347,17 @@ contract ExpectCallMixedTest is DSTest { target.add(1, 2); } } + +contract ExpectCallDelegateSkipTest is DSTest { + Vm constant vm = Vm(HEVM_ADDRESS); + + function testExpectCallSkipsDelegateCalls() public { + ProxyWithDelegateCall proxy = new ProxyWithDelegateCall(); + SimpleCall target = new SimpleCall(); + + vm.expectCall(address(target), abi.encodeWithSignature("call()"), 1); + + target.call(); + proxy.delegateCall(target); + } +}