Hardhat plugin to check for storage layout changes
When working with complex and upgradable contracts, it can be difficult to manually see whether some solidity changes broke the storage layout or not. A mistake can cause undefined behavior in deployed contracts. This plugin aims to help notice any storage layout breakings while dev works on solidity changes.
npm install hardhat-storage-layout-changes
Import the plugin in your hardhat.config.js
:
require("hardhat-storage-layout-changes");
Or if you are using TypeScript, in your hardhat.config.ts
:
import "hardhat-storage-layout-changes";
This plugin adds the storage-layout task to Hardhat:
Usage: hardhat [GLOBAL OPTIONS] storage-layout [--check] [--update]
OPTIONS:
--check Checks if storage layout has changed
--update Updates storage layout artifact
This plugin extends the HardhatUserConfig
's ProjectPathsUserConfig
object with an optional
storageLayouts
field and also adds a storageLayoutConfig
.
This is an example of how to set it:
module.exports = {
paths: {
storageLayouts: ".storage-layouts",
},
storageLayoutConfig: {
contracts: ["Pool"],
fullPath: false
};
};
Contract: Pool
"accounts": at same location
"user": at same location
"balance": at same location
"owner": changed slot from 1 to 2
"lastUpdate": found new storage entry at slot 1 offset 0
"owner": found new storage entry at slot 2 offset 0
Error: Storage Layout Changed. If this was intentional, please update the storage layout files using "npx hardhat storage-layout --update".
Contract: Pool
updating Pool.json