-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Description
Component
Cast
Describe the feature you would like
Moving the discussion from #2494 here
Right now
cast storage <address> <slot>prints the the specified slot. Expanding on @onbjerg's suggestion, I'd proposecast storage <address>(i.e. when no slot is specified) to behave as follows:
- Fetch the bytecode of the provided address.
- If we're in a foundry project, check artifacts for matching bytecode + recompile if needed to get storage layout.
- Otherwise, fetch source from etherscan and compile it with the specified settings to get storage layout (this is also useful for debugging txs against a live network where we'd recompile to get source maps).
- Print variable names, slots, sizes, offsets, and decoded values in a table similar to the existing one that you get with
forge inspect MyContract storage-layout --pretty.Note this PR does not properly handle dynamic types. It will print the length of an array for array types, and zero for mappings because it doesn't know the keys. I think that's ok for the first version, but I'd love for the next iteration to figure out array lengths and all mapping keys to print the all storage. @banteg has a POC for doing this here: https://github.com/banteg/storage-layout
Originally posted by @mds1 in #2494 (comment)
Definitely +1 for @mds1
cast storage <address>proposal, I think it would also be cool to have a--blocknumberparam that lets you do historical queries so that you can write a script that can see how state changes in a contract over a range of blocks
Originally posted by @tynes in #2494 (comment)
Agreed,
--block <blockNumber/earliest/latest/pending>is the syntax used elsewhere in cast which we should support here too
Originally posted by @mds1 in #2494 (comment)
Additional context
No response
Metadata
Metadata
Assignees
Labels
Type
Projects
Status