Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/aurora-is-near/hardhat-storage-layout
Generate Ethereum smart contract storage layout with Hardhat.
https://github.com/aurora-is-near/hardhat-storage-layout
Last synced: 2 days ago
JSON representation
Generate Ethereum smart contract storage layout with Hardhat.
- Host: GitHub
- URL: https://github.com/aurora-is-near/hardhat-storage-layout
- Owner: aurora-is-near
- License: apache-2.0
- Created: 2021-07-07T10:10:41.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-09-21T04:20:04.000Z (over 1 year ago)
- Last Synced: 2024-12-25T21:07:19.438Z (9 days ago)
- Language: TypeScript
- Size: 559 KB
- Stars: 65
- Watchers: 6
- Forks: 20
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
# hardhat-storage-layout
Generate Ethereum smart contract storage layout with Hardhat. This plugin saves time and avoids human error when a
developer tries to update a specific `storage slot` in a remote solidity contract. For more info about the storage
layout, please refer to the [official solidity documentation](https://docs.soliditylang.org/en/v0.6.8/internals/layout_in_storage.html).## Installation
```bash
yarn add --dev hardhat-storage-layout
```## Usage
- Add this plugin to `hardhat.config.js`:
```javascript
require('hardhat-storage-layout');
```- Compile your contracts (Solc version must be grather than 0.5.13)
- Run `yarn hardhat check`Or
- Export the contracts storage layout prior deployment as follows:
```javascript
const hre = require("hardhat");async function main() {
....
await
hre.storageLayout.export();
}
``````
┌─────────────────┬────────────────┬──────────────┬────────┬─────────────────────────────────────────────────────┬────────────────┐
│ contract │ state_variable │ storage_slot │ offset │ type │ numberOfBytes │
├─────────────────┼────────────────┼──────────────┼────────┼─────────────────────────────────────────────────────┤────────────────┤
│ ERC20 │ _balances │ 0 │ 0 │ t_mapping(t_address,t_uint256) │1 │
│ ERC20 │ _allowances │ 1 │ 0 │ t_mapping(t_address,t_mapping(t_address,t_uint256)) │1 │
│ ERC20 │ _totalSupply │ 2 │ 0 │ t_uint256 │1 │
│ ERC20 │ _name │ 3 │ 0 │ t_string_storage │1 │
│ ERC20 │ _symbol │ 4 │ 0 │ t_string_storage │1 │
│ WatermelonToken │ _balances │ 0 │ 0 │ t_mapping(t_address,t_uint256) │1 │
│ WatermelonToken │ _allowances │ 1 │ 0 │ t_mapping(t_address,t_mapping(t_address,t_uint256)) │1 │
│ WatermelonToken │ _totalSupply │ 2 │ 0 │ t_uint256 │1 │
│ WatermelonToken │ _name │ 3 │ 0 │ t_string_storage │1 │
│ WatermelonToken │ _symbol │ 4 │ 0 │ t_string_storage │1 │
└─────────────────┴────────────────┴──────────────┴────────┴─────────────────────────────────────────────────────┘────────────────┘```
- **contract**: is the name of the contract including its path as prefix
- **state variable**: is the name of the state variable
- **offset**: is the offset in bytes within the storage slot according to the encoding
- **storage slot**: is the storage slot where the state variable resides or starts. This number may be very large and
therefore its JSON value is represented as a string.
- **type**: is an identifier used as key to the variable’s type information (described in the following)
- **numberOfBytes**: is the nummber of bytes used by the state variable.