Skip to content

Conversation

@MartinquaXD
Copy link
Contributor

Using eth_call together with state overrides is pretty useful and widely supported thing. Currently we need to use very ugly workaround in https://github.com/cowprotocol/services to use state overrides with ethcontract-rs.
In order to make everyone's lives easier it makes the most sense to make call_with_state_overrides a first class citizen in ethcontract-rs.

  • I added the StateOverride struct which defines the format of things that can be overriden
  • I added call_with_state_overrides on MethodCallBuilder and ViewCallBuilder
    • unfortunately does the web3 crate not have any nice helper functions for using state overrides so I implemented the call with the underlying logic that the web3 crate would have called

Test Plan

I tested this by pointing the ethcontract dependency in the cowprotocol repo to a local checkout with this patch and did a manual test to make sure things work. Given that we are about to completely abandon this crate I think it's fine to check in a test specific for this.

@MartinquaXD MartinquaXD merged commit c057a6e into main Sep 19, 2025
6 checks passed
@MartinquaXD MartinquaXD deleted the call-with-state-overrides branch September 19, 2025 09:41
MartinquaXD added a commit to cowprotocol/services that referenced this pull request Sep 19, 2025
# Description
Adjusts the code base to make use of `.call_with_state_overrides` that
was introduced in
cowprotocol/ethcontract-rs#983.

# Changes
- remove `StateOverrides` types from our code base because they are now
in ethcontract-rs
- replace `Arc<dyn CodeSimulating>` with `Web3`
- use `.call_with_state_overrides` instead of weird extension trait on
web3
- migrated module declaration from `<module>.rs` to `<module>/mod.rs` to
be more consistent with the remaining code base

## How to test
tests of balance overriding logic should still work
xdecentralix pushed a commit to xdecentralix/services that referenced this pull request Oct 7, 2025
# Description
Adjusts the code base to make use of `.call_with_state_overrides` that
was introduced in
cowprotocol/ethcontract-rs#983.

# Changes
- remove `StateOverrides` types from our code base because they are now
in ethcontract-rs
- replace `Arc<dyn CodeSimulating>` with `Web3`
- use `.call_with_state_overrides` instead of weird extension trait on
web3
- migrated module declaration from `<module>.rs` to `<module>/mod.rs` to
be more consistent with the remaining code base

## How to test
tests of balance overriding logic should still work
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants