Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: migrate to alloy providers #6219

Merged
merged 88 commits into from
Jan 8, 2024
Merged

refactor: migrate to alloy providers #6219

merged 88 commits into from
Jan 8, 2024

Conversation

onbjerg
Copy link
Member

@onbjerg onbjerg commented Nov 5, 2023

Motivation

We want to migrate from Ethers to Alloy, which includes removing all references to Ether's Middleware trait and using Alloy equivalents (alloy-providers).

Solution

The API for providers is not final, so a temporary trait has been introduced to make migrating to the final API easier later on. Additionally, I will be removing code that is no longer needed (e.g. RuntimeClient), as well as adjusting everything that breaks downstream as a result of me changing the providers (e.g. forge script).

Todo

  • Adjust tests
  • Adjust docs
  • Resolve final breakages
  • Open up issues re: ergonomics with Alloy encountered during migration
  • Implement WebSocket and IPC support
  • Migrate Alchemy CU rate limiting mechanism as a Tower layer
  • Add retries as a tower layer on the transports

Depends on alloy-rs/alloy#20

@onbjerg onbjerg added A-evm Area: EVM Cmd-forge-test Command: forge test C-cast Command: cast C-forge Command: forge Cmd-forge-debug Command: forge run T-debt Type: code debt C-anvil Command: anvil Cmd-forge-script Command: forge script labels Nov 5, 2023
@onbjerg onbjerg force-pushed the onbjerg/alloy-providers branch from f70ccc5 to 121b7bb Compare November 13, 2023 01:09
onbjerg and others added 11 commits November 13, 2023 02:10
* wip

* fmt

* wip

* feat: start migrating basic types

* more type changes across /eth and backend

* wip type replacements

* chore: replace mistaken type

* feat: rpc types without pubsub migrated

* chore: changes from rpc types

* chore: re-add changes

* feat: rpc types done, onto providers

* we on that grind

* feat: types migrated, tests remaining

* chore: comment tests for now to get proper compile errors

---------

Co-authored-by: Oliver Nordbjerg <[email protected]>
* chore: update doctests

* chore: update cargo lock to make anvil test pass

* chore: bump cargo lock again

* fix: parse unit logics (#6713)

---------

Co-authored-by: DaniPopes <[email protected]>
Copy link
Member

@mattsse mattsse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okay, we need another pass and remove alloy ethers conversion where possible

crates/anvil/src/config.rs Outdated Show resolved Hide resolved
crates/anvil/src/config.rs Outdated Show resolved Hide resolved
crates/anvil/src/config.rs Outdated Show resolved Hide resolved
crates/anvil/src/eth/api.rs Outdated Show resolved Hide resolved
crates/anvil/src/eth/api.rs Outdated Show resolved Hide resolved
crates/anvil/src/eth/api.rs Outdated Show resolved Hide resolved
@@ -2446,7 +2522,7 @@ impl EthApi {

/// Returns true if the `addr` is currently impersonated
pub fn is_impersonated(&self, addr: Address) -> bool {
self.backend.cheats().is_impersonated(addr)
self.backend.cheats().is_impersonated(addr.to_ethers())
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why no alloy

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also an storage type.

Comment on lines +236 to 239
base_fee: base_fee.map(|b| b.to_ethers()),
gas_limit: env.block.gas_limit.to_ethers(),
beneficiary: env.block.coinbase.to_ethers(),
difficulty: env.block.difficulty.to_ethers(),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why still on ethers?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are storage-related types and we agreed not to migrate them on this PR.

crates/anvil/src/lib.rs Show resolved Hide resolved
crates/anvil/src/pubsub.rs Outdated Show resolved Hide resolved
@Evalir Evalir requested review from mattsse and DaniPopes January 5, 2024 18:45
Copy link
Member

@mattsse mattsse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

more things to come!

@onbjerg
Copy link
Member Author

onbjerg commented Jan 8, 2024

I've tried looking at the ICE but I don't think there's a workaround. Should we merge with the ICE present?

@Evalir
Copy link
Member

Evalir commented Jan 8, 2024

yep @onbjerg we can safely ignore the ICE for now—clippy won't run anyway until it's fixed.

@Evalir Evalir merged commit d46bcb3 into master Jan 8, 2024
19 of 20 checks passed
@Evalir Evalir deleted the onbjerg/alloy-providers branch January 8, 2024 13:48
RPate97 pushed a commit to RPate97/foundry that referenced this pull request Jan 12, 2024
* wip

* fmt

* wip

* more wip

* wip

* wip

* rebase stuff

* more rebase stuff

* wip

* fmt

* wip resolve warnings

* wip

* wip

* wip

* aaand cast started complaining gn

* feat(`anvil`): RPC Types migration (foundry-rs#6256)

* wip

* fmt

* wip

* feat: start migrating basic types

* more type changes across /eth and backend

* wip type replacements

* chore: replace mistaken type

* feat: rpc types without pubsub migrated

* chore: changes from rpc types

* chore: re-add changes

* feat: rpc types done, onto providers

* we on that grind

* feat: types migrated, tests remaining

* chore: comment tests for now to get proper compile errors

---------

Co-authored-by: Oliver Nordbjerg <[email protected]>

* fix latest rebase errors

* chore: `alloy-transports` -> `alloy-transport` (foundry-rs#6341)

* fix: use new `TransportResult` (foundry-rs#6342)

* fix: `TransportResult` for multi wallet (foundry-rs#6343)

* feat: use TransportError on Anvil (foundry-rs#6344)

* fix: uncomment serde tests, fix genesis test (foundry-rs#6346)

* refactor: split ethers/alloy providers (foundry-rs#6378)

* split ethers/alloy providers

* chore: complete Transaction ToAlloy compat trait

* chore: clone txs

---------

Co-authored-by: Enrique Ortiz <[email protected]>

* fix: block numbers are u64 (foundry-rs#6382)

* fix: remove U64 cast (foundry-rs#6384)

* chore(`anvil`): fix tests (foundry-rs#6383)

* wip

* chore: fix u64

* fix: access lists

* chore: use latest ethers

* silly ahhh otterscan test failing

* more fixdy

* almost done lesgo

* pub sob

* chre: fix otterscan test

---------

Co-authored-by: Oliver Nordbjerg <[email protected]>

* fix(anvil): port serde helpers, remove multiline jsons (foundry-rs#6404)

* chore(`anvil`): extend alloy types until entry lib, cleanup warnings (foundry-rs#6413)

* chore: extend alloy types until entry lib, cleanup warnings

* chore: fix review comments

* chore: pin alloy providers to repo & test fixup (foundry-rs#6414)

* chore: pin alloy providers to repo

* chore: fix doctests

* clippy

* clippy

* clippy

* fix fixtures

* update

* feat: reimplement rpc cheatcode

* chore: fix warnings

* chore: fmt, switch to local tx request type in the meanwhile for optimism tests

* [Alloy providers migration]: Fix tests (foundry-rs#6462)

* fix: properly return tx-only blocks instead of full blocks

* chore: fix up fork tests

* chore: mine blocks first before getting tx receipt

* clippy/fmt

* clippy

* clippy

* chore: add more delta for timestamp test

* chore: fix up anvil API tests (foundry-rs#6517)

* chore: fix up anvil API tests

* fmt

* feat: `RuntimeTransport` for `ws`/`ipc` support (foundry-rs#6525)

* wip

* chore: change to using the naked transport instead of an RpcClient<T>

* chore: properly implement request

* always poll ready

* chore: docs

* chore: clippy and other fixes

* chore: use call to pass down the tower stack

* chore: no unwraps

* chore: new fn

* feat: implement runtimetransport on the alloy provider builder

* chore: refactor into separate functions depending on transport

* feat: RuntimeTransportBuilder, refactor

* feat: cleanup, docs

* feat: IPC

* clippy

* cosmetics

* feat: enable anvil ipc tests (foundry-rs#6570)

* refactor: replace tracers with reth tracers (foundry-rs#6428)

* wip

* wip

not working still -.-

- gas reports
- `forge script` cannot set `gas_used` for root
  trace since that requires mut access to the arena
- event decoding not impl

possibly broken

- anvil traces (not tested)
- test traces (not tested)
- debugging (not tested)

but hey, at least it compiles...

* wip

* chore: fix deps

* remove utils import

* chore: remove errors

* chore: use render_trace_arena

* derive debug

* fix contract identification

* fix formatting

* remove stray todo

* fix empty output

* fix unrelated test :)

---------

Co-authored-by: evalir <[email protected]>

* fix lockfile

* chore: fix anvil test

* fixup: missing import

* chore: lint

* fixup: imports

* fixup: more fixes

* chore: fmt

* clippy clippy clippy always clippy

* and fmt

* test: fix test

* chore: add todo

* clippy

* feat(`anvil`/`evm`): re-add support for additional fields (foundry-rs#6573)

* feat: re-add additional fields support

* chore: clippy/fmt

* bump Cargo.lock

* chore: handle mixhash being optional (foundry-rs#6575)

* fix: always ensure prevrandao is set (foundry-rs#6576)

* chore: cleanup, reintroduce trace endpoints (foundry-rs#6577)

* feat: re-enable debug_traceTransaction support (foundry-rs#6583)

* chore: fix ipc test

* chore: re-enable trace tests (foundry-rs#6586)

* refactor: rm unused param

* refactor: rm gas adjustment in script

This should be solved in the tracer inspector itself
already, cc @mattsse

* chore: fix ci failures (foundry-rs#6595)

* chore: use self.debug instead of self.verbose

* chore: update lock

* chore: fix deny check

* feat(`RuntimeTransport`): port cups/retry logic (foundry-rs#6594)

* some random stuff

* fmt: toml

* chore: use u64 in BlockRequest::Number

* update

* chore: remove some more ethers

* chore: more ethers removals (units)

* wip: remove reth

* wip

* rm ice

* fix(`rpc-types`): use newer `alloy-rpc-types`, `alloy-rpc-trace-types` (foundry-rs#6705)

* fix(rpc-types): use newer alloy-rpc-types, alloy-rpc-trace-types and reth inspectors

* chore: remove ToReth

* chore: fix imports

* chore: quicknode retry (foundry-rs#6712)

* fix(`general`): get ci green on 6219 (foundry-rs#6711)

* chore: update doctests

* chore: update cargo lock to make anvil test pass

* chore: bump cargo lock again

* fix: parse unit logics (foundry-rs#6713)

---------

Co-authored-by: DaniPopes <[email protected]>

* chore: remove borrows

* chore: add removal note

* chore: use alloy chains to compare

* chore: remove some conversions, migrate feemanager/newblocknotifications

* chore: clippy

* chore: fix doctests

---------

Co-authored-by: evalir <[email protected]>
Co-authored-by: DaniPopes <[email protected]>
Co-authored-by: Matthias Seitz <[email protected]>
tomholford added a commit to tomholford/book that referenced this pull request Jan 31, 2024
This updates the docs to reflect that the `--verbose` flag was removed from `call`.

See:

foundry-rs/foundry#6939
foundry-rs/foundry#6219
mattsse pushed a commit to foundry-rs/book that referenced this pull request Jan 31, 2024
This updates the docs to reflect that the `--verbose` flag was removed from `call`.

See:

foundry-rs/foundry#6939
foundry-rs/foundry#6219

Co-authored-by: tomholford <[email protected]>
togetherAll7 pushed a commit to togetherAll7/foundry-book that referenced this pull request Nov 17, 2024
This updates the docs to reflect that the `--verbose` flag was removed from `call`.

See:

foundry-rs/foundry#6939
foundry-rs/foundry#6219

Co-authored-by: tomholford <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-evm Area: EVM C-anvil Command: anvil C-cast Command: cast C-forge Command: forge Cmd-forge-debug Command: forge run Cmd-forge-script Command: forge script Cmd-forge-test Command: forge test T-debt Type: code debt
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Anvil: Migrate reth's tracers once the providers & RPC types migration is complete.
5 participants