@windranger-io/hardhat-contract-tools
v1.0.2
Published
Output Solidity contract sizes & layouts with Hardhat
Downloads
4
Readme
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:
- hardhat-contract-sizer - here you can get details of contributions into contract's code size.
- hardhat-storage-layout - here it works much faster, especially for projects with >20 contracts.
Installation
npm install --save-dev windranger-tools-hardhat
# or
yarn add --dev windranger-tools-hardhat
Usage
Load plugin in Hardhat config:
require('windranger-tools-hardhat');
import '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 bysolc
, 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.