1.0.2 • Published 3 years ago
@windranger-io/hardhat-contract-tools v1.0.2
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-hardhatUsage
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:
--detailsprints contribution of difference source files into the total size of each contract--diffprints comparison of current contract sizes with a previous run with this flag--changesprints only contracts with size changes, includes--diffflag--sizeskips contracts of size smaller than<minSizeBytes>(NB init code size is excluded)--maxsizecolors contracts size above this limit as red, and above 85% of this limit as yellow (default is 24576 bytes)--alnumprints 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:
--detailsprints 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.
1.0.2
3 years ago