foundry-rs / foundry

Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.
https://getfoundry.sh
Apache License 2.0
8.35k stars 1.77k forks source link

feat(`cheatcodes`): add cheatcode to defer call to fork #9192

Open bernard-wagner opened 1 month ago

bernard-wagner commented 1 month ago

Component

Forge

Describe the feature you would like

There are already some thoughts given in #7262 to handle precompiles, but with more L2s implementing non-evm VMs (thinking mainly of Arbitrum Stylus) the issue is expanding past just precompiles.

As a more generic approach, it would be useful to mark a contract address or a call filter similar to vm.mockCall that defers execution to the fork endpoint.

vm.deferExecution(0x000000000000000000000000000000000000006C);

vm.deferExecution(0x000000000000000000000000000000000000006C, abi.encodeWithSignature('getPricesInWei()'));

When the interrupter encounters a call that is deferred it performs an eth_call against the fork-url on the fork block number. Ideally, there would be some additional caching.

Only static calls would be supported initially, as this is the most common use case and any state changes would be far more complex to handle (state overrides in eth_call and debug tracing to get any storage changes).

Additional context

No response

zerosnacks commented 1 month ago

Would it be possible to use the vm.rpc cheatcode in combination with mockCall here to return the data received from vm.rpc?