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

feat: vm.dumpState #6827

Merged
merged 4 commits into from
Jan 17, 2024
Merged

feat: vm.dumpState #6827

merged 4 commits into from
Jan 17, 2024

Conversation

tynes
Copy link
Contributor

@tynes tynes commented Jan 17, 2024

Closes #6810

Motivation

We would like to be able to use deploy scripts to generate genesis states that can be used by client implementations.
This same genesis generation could be used for in memory testing, so that the exact same genesis state is used in both production networks as well as the unit tests.

Solution

Implements a cheatcode vm.dumpState(string) that dumps the current revm state to disk in the same format as the "allocs" field in a geth style genesis.json. This can dump state that can be read in by vm.loadAllocs(string).

The implementation of the cheatcode skips dumping system contracts. It includes various test coverage.

Implements a cheatcode `vm.dumpState(string)` that dumps the current
revm state to disk in the same format as the "allocs" field in a geth
style `genesis.json`. This can dump state that can be read in by
`vm.loadAllocs(string)`.

The implementation of the cheatcode skips dumping system contracts.
It includes various test coverage.
Run `cargo test` from within the specs crate
crates/cheatcodes/src/evm.rs Outdated Show resolved Hide resolved
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.

lgtm, pending nit

Better implementation based on review
@tynes
Copy link
Contributor Author

tynes commented Jan 17, 2024

Thanks for the review @DaniPopes @mattsse. I addressed the comment

@mattsse mattsse merged commit 9e2830d into foundry-rs:master Jan 17, 2024
19 checks passed
@mattsse
Copy link
Member

mattsse commented Jan 17, 2024

can upstream to forge-std now

tynes added a commit to ethereum-optimism/optimism that referenced this pull request Jan 17, 2024
Updates foundry to the commit `9e2830d7f0566e0d00b1104eeaedd5032a4e556e`.
Includes the `vm.dumpState` cheatcode implemented in foundry-rs/foundry#6827.
This will unblock the migration of the genesis generation to solidity to
improve the devex of the L2 contracts and allow us to delete a lot of
custom Go code as well as reduce flakes in CI due to not being able to
find the `genesis.json`.
tynes added a commit to tynes/forge-std that referenced this pull request Jan 17, 2024
Adds a new cheatcode `dumpState(string)` that was implemented
in foundry in foundry-rs/foundry#6827.
This cheatcode will write a JSON file to disk that contains the
current state of the EVM.
tynes added a commit to tynes/forge-std that referenced this pull request Jan 17, 2024
Adds a new cheatcode `dumpState(string)` that was implemented
in foundry in foundry-rs/foundry#6827.
This cheatcode will write a JSON file to disk that contains the
current state of the EVM.
github-merge-queue bot pushed a commit to ethereum-optimism/optimism that referenced this pull request Jan 17, 2024
Updates foundry to the commit `9e2830d7f0566e0d00b1104eeaedd5032a4e556e`.
Includes the `vm.dumpState` cheatcode implemented in foundry-rs/foundry#6827.
This will unblock the migration of the genesis generation to solidity to
improve the devex of the L2 contracts and allow us to delete a lot of
custom Go code as well as reduce flakes in CI due to not being able to
find the `genesis.json`.
mds1 pushed a commit to tynes/forge-std that referenced this pull request Jan 17, 2024
Adds a new cheatcode `dumpState(string)` that was implemented
in foundry in foundry-rs/foundry#6827.
This cheatcode will write a JSON file to disk that contains the
current state of the EVM.
mds1 added a commit to foundry-rs/forge-std that referenced this pull request Jan 17, 2024
* vm: add dumpState cheatcode

Adds a new cheatcode `dumpState(string)` that was implemented
in foundry in foundry-rs/foundry#6827.
This cheatcode will write a JSON file to disk that contains the
current state of the EVM.

* chore: regenerate Vm.sol

* test: update interface ID

---------

Co-authored-by: Matt Solomon <matt@mattsolomon.dev>
tynes added a commit to ethereum-optimism/optimism that referenced this pull request Jan 17, 2024
…dc809

Bumps `forge-std` to the latest commit that includes the `vm.dumpState`
cheatcode.

- foundry-rs/forge-std#499
- foundry-rs/foundry#6827
github-merge-queue bot pushed a commit to ethereum-optimism/optimism that referenced this pull request Jan 17, 2024
…dc809 (#9043)

* contracts-bedrock: bump forge-std 1fd874f0efdb711cb6807c4f4a000ed2805dc809

Bumps `forge-std` to the latest commit that includes the `vm.dumpState`
cheatcode.

- foundry-rs/forge-std#499
- foundry-rs/foundry#6827

* contracts-bedrock: fix build
github-merge-queue bot pushed a commit to ethereum-optimism/optimism that referenced this pull request Jan 17, 2024
…dc809 (#9043)

* contracts-bedrock: bump forge-std 1fd874f0efdb711cb6807c4f4a000ed2805dc809

Bumps `forge-std` to the latest commit that includes the `vm.dumpState`
cheatcode.

- foundry-rs/forge-std#499
- foundry-rs/foundry#6827

* contracts-bedrock: fix build
github-merge-queue bot pushed a commit to ethereum-optimism/optimism that referenced this pull request Jan 17, 2024
…dc809 (#9043)

* contracts-bedrock: bump forge-std 1fd874f0efdb711cb6807c4f4a000ed2805dc809

Bumps `forge-std` to the latest commit that includes the `vm.dumpState`
cheatcode.

- foundry-rs/forge-std#499
- foundry-rs/foundry#6827

* contracts-bedrock: fix build
dshiell pushed a commit to polymerdao/optimism-dev that referenced this pull request Jan 22, 2024
Updates foundry to the commit `9e2830d7f0566e0d00b1104eeaedd5032a4e556e`.
Includes the `vm.dumpState` cheatcode implemented in foundry-rs/foundry#6827.
This will unblock the migration of the genesis generation to solidity to
improve the devex of the L2 contracts and allow us to delete a lot of
custom Go code as well as reduce flakes in CI due to not being able to
find the `genesis.json`.
dshiell pushed a commit to polymerdao/optimism-dev that referenced this pull request Jan 22, 2024
…dc809 (ethereum-optimism#9043)

* contracts-bedrock: bump forge-std 1fd874f0efdb711cb6807c4f4a000ed2805dc809

Bumps `forge-std` to the latest commit that includes the `vm.dumpState`
cheatcode.

- foundry-rs/forge-std#499
- foundry-rs/foundry#6827

* contracts-bedrock: fix build
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.

Dump State Cheatcode
3 participants