GithubHelp home page GithubHelp logo

defistar / hardhat-storage-layout Goto Github PK

View Code? Open in Web Editor NEW

This project forked from aurora-is-near/hardhat-storage-layout

0.0 0.0 0.0 342 KB

Generate Ethereum smart contract storage layout with Hardhat.

License: Apache License 2.0

TypeScript 100.00%

hardhat-storage-layout's Introduction

hardhat-storage-layout

hardhat-storage-layout Version

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.

Installation

yarn add --dev hardhat-storage-layout

Configuration

In order to use this Hardhat plugin, you should update the solidity compiler configurations in hardhat.congig.js as follows:

module.exports = {
  solidity: {
    version: '0.8.3',
    settings: {
        optimizer: {
            enabled: true,
            runs: 1000,
        },
        outputSelection: {
            "*": {
                "*": ["storageLayout"],
            },
          },
    },
  },
  ....

Usage

  • Add this plugin to hardhat.config.js:
require('hardhat-storage-layout');
  • Compile your contracts
  • Export the contracts storage layout prior deployment as follows:
const hre = require("hardhat");
async function main() {
    ....
    await hre.storageLayout.export();
}
┌─────────────────┬────────────────┬──────────────┬────────┬─────────────────────────────────────────────────────┐
│ contract        │ state_variable │ storage_slot │ offset │ type                                                │
├─────────────────┼────────────────┼──────────────┼────────┼─────────────────────────────────────────────────────┤
│ ERC20           │ _balances      │      0       │   0    │ t_mapping(t_address,t_uint256)                      │
│ ERC20           │ _allowances    │      1       │   0    │ t_mapping(t_address,t_mapping(t_address,t_uint256)) │
│ ERC20           │ _totalSupply   │      2       │   0    │ t_uint256                                           │
│ ERC20           │ _name          │      3       │   0    │ t_string_storage                                    │
│ ERC20           │ _symbol        │      4       │   0    │ t_string_storage                                    │
│ WatermelonToken │ _balances      │      0       │   0    │ t_mapping(t_address,t_uint256)                      │
│ WatermelonToken │ _allowances    │      1       │   0    │ t_mapping(t_address,t_mapping(t_address,t_uint256)) │
│ WatermelonToken │ _totalSupply   │      2       │   0    │ t_uint256                                           │
│ WatermelonToken │ _name          │      3       │   0    │ t_string_storage                                    │
│ WatermelonToken │ _symbol        │      4       │   0    │ t_string_storage                                    │
└─────────────────┴────────────────┴──────────────┴────────┴─────────────────────────────────────────────────────┘

  • 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)

hardhat-storage-layout's People

Contributors

0x3bfc avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.