npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@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:

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 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.