Storage Delta is a tool for auditing storage layout changes during contract upgrades.
Powered by Foundry.
forge install 0xPolygon/storage-deltaStorage Delta analyzes the entire contract suite against any previous version.
bash lib/storage-delta/run.sh <COMMIT_OR_TAG>./storage_delta will be generated if there are findings. Open OLD and NEW files side by side for the best experience.
| Description | |
|---|---|
| 🌱 | New |
| 🏴 | Problematic |
| 🏳️ | Moved |
| 🏁 | Moved & problematic |
| 🪦 | Removed |
| Dirty bytes |
When a variable with a unique name and type is added.
uint256 a uint256 a
🌱 bool bWhen a new variable is added, but conflicts with the existing storage.
uint256 a🏴 bool bWhen an existing variable is moved.
uint256 a
... ...
🏳️ uint256 aWhen an existing variable is moved and conflicts with the existing storage.
uint256 a
bool b🏁 bool b
🏁 uint256 aWhen a variable no longer exists.
uint256 a
bool b uint256 a
🪦When the storage is not clean.
uint256 a🏴 uint128 a
16 dirty bytes| Option | Values | Description |
|---|---|---|
--omit |
new |
Do not generate a report with only those findings. |
Files should be named after the contract they hold. Example → Example.sol
The script utilizes Node.js to run. We recommend the node version defined in the .nvmrc file.
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
© 2023 PT Services DMCC
