Skip to content

cyraxred/tools-hardhat

 
 

Repository files navigation

Hardhat Contract Tools

Outputs Solidity contract information:

  • contract sizes and contributions of each source file into it (works for abstract contracts, internal libs etc).
  • storage layout of contracts with a source file for each variable.

The hardhat-contract-tools are improved alternatives for:

Installation

npm install --save-dev @windranger-io/windranger-tools-hardhat
# or
yarn add --dev @windranger-io/windranger-tools-hardhat

Usage

Load plugin in Hardhat config:

require('@windranger-io/windranger-tools-hardhat');
import '@windranger-io/windranger-tools-hardhat';

Attention! For performace reasons these tasks do NOT run hardhat compile and uses the last compiled state.

Contract sizes:

Syntax:

npx hardhat contract-sizes [--details] [--diff | --changes] [--alnum] [--size <minSizeBytes>] [--maxsize <maxSizeBytes>] [...<contracts>]

Where:

  • --details prints contribution of difference source files into the total size of each contract
  • --diff prints comparison of current contract sizes with a previous run with this flag
  • --changes prints only contracts with size changes, includes --diff flag
  • --size skips contracts of size smaller than <minSizeBytes> (NB init code size is excluded)
  • --maxsize colors contracts size above this limit as red, and above 85% of this limit as yellow (default is 24576 bytes)
  • --alnum prints contracts in alphanumberic order (by default, order is ascending by code size, init code size is excluded)
  • <contracts> prints only for the given contracts, can be contract names or FQNs

Filtering conditions of --changes, --size and <contracts> are combined as AND.

Output: The details output may contain 4 types sources unrelated to Solidity code:

  • ## compiler <name> - this is a code from compiler's internal library, usually these are methods to load strings and to encode/decode abi data
  • ## contract metadata - this is metadata appended by solc, e.g. swarm hash etc
  • ## non-mapped bytecode - this is executable code, but without a mapping to source from the compiler
  • ## non-code bytes - these are bytes usually located between the executable code and the metadata ... no idea

Contract storage layout:

Syntax:

npx hardhat storage-layout [--details] [...<contracts>]

Where:

  • --details prints a source file for each variable, useful for complex inheritance

Tests:

Functionality of these tasks is also available as functions for direct use in tests, e.g. to check size limits or compatibility of storage layouts.

About

No description, website, or topics provided.

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 100.0%