Releases: cgewecke/hardhat-gas-reporter
v2.2.2 Support solc 0.8.28 features
v2.2.1 Fix L1 Etherscan api key logic
Bug Fixes
Recently, Etherscan began requiring an api key to fetch live gasPrice
and baseFee
data for Ethereum mainnet. This release fixes a bug in the way the L1Etherscan
api key option was set which caused those data calls to fail.
- Fix
L1Etherscan
option logic by @cgewecke in #240 - Fix premature return bug in deployment delta tracking loop by @cgewecke in #235
Full Changelog: v2.2.0...v2.2.1
Gas Golfing Support
New
This release adds a trackGasDeltas
option.
When enabled, the reporter displays changes in gas usage between test runs - super useful for optimization work.
Many thanks to @0xVolosnikov for writing this feature.
Bugfixes
- A bug that prevented correct identification of factory deployed contracts in some cases has been fixed. (Thanks to @CSY54 for reporting and providing a nice reproduction case to add to the test suite).
PRs
- Track gas deltas by @0xVolosnikov in #230
- Add gas delta tracking for deployments by @cgewecke in #233
- Fix bug preventing correct resolution of factory deployed contracts by @cgewecke in #234
New Contributors
- @0xVolosnikov made their first contribution in #230
Full Changelog: v2.1.1...v2.2.0
Allow sub-gwei `blobBaseFee`
What's Changed
- Fix bug in pricing for OP stack chains when the reported L1
blobBaseFee
drops below 1 gwei by @cgewecke in #228
Full Changelog: v2.1.0...v2.1.1
Arbitrum & Base L2 Network Support
What's New
- Arbitrum and Base have been added to the list of L2 networks the gas reporter can emulate
gasReporter: { L2: "arbitrum" | "base" | "optimism", L2Etherscan: "ABC....", coinmarketcap: "abc...", }
blobBaseFee
is now fetched directly from the OP stack GasOracle contracts (should be accurate)⚠️ To get liveblobBaseFee
prices for L2 emulation you'll need to set theL2Etherscan
api key option.- the JSON output object now includes a separate intrinsic gas measurement for each transaction. This could be convenient if you want to do more complex post-processing with the gas data.
What's changed
- Bump undici from 5.28.2 to 5.28.3 by @dependabot in #175
- Fetch live blobBaseFee from OP Stack GasPriceOracle by @cgewecke in #222
- Add Base network support by @cgewecke in #223
- Collect intrinsicGas for JSON output by @cgewecke in #224
- Add Arbitrum support by @cgewecke in #225
- Update README image for 2.1.0 by @cgewecke in #226
Full Changelog: v2.0.2...v2.1.0
v2.0.2 Fix crash with --parallel flag
What's Changed
Full Changelog: v2.0.1...v2.0.2
v2.0.1 Optimism Ecotone (EIP-4844)
What's Changed
Full Changelog: v2.0.0...v2.0.1
v2.0.0: Optimism L2 & View/Pure Method Gas
What's New
-
Configuration for chains with Etherscan support has been simplified to a single key. Just set the
L1
option to one of the supported networks and the reporter will take care of the rest. (You'll still need a coinmarketcap api key)gasReporter: { L1: "gnosis", coinmarketcap: "abc...", }
-
Gas reporting for L2 networks is coming online, starting with Optimism.
gasReporter: { L2: "optimism", coinmarketcap: "abc...", }
-
Gas metrics for
view
andpure
methods are now available as an option. You can also exclude intrinsic gas costs for state-changing methods. (⚠️ There are performance hits when the view and pure options are enabled)gasReporter: { // Debits intrinsic gas for state-changing method calls in order to model contracts // that will never be called by an EOA includeIntrinsicGas: false, // This option executes an additional `eth_estimateGas` for every `eth_call` // detected by the reporter. If you have 1000's of tests setting it to true has a // noticeable performance impact reportPureAndViewMethods: true, // This option can add SIGNIFICANT LAG to test startup time if you have // 100's of contracts in your project. (It parses all the sources in your dependency tree // to identify state variable declarations) excludeAutoGeneratedGetters: true, }
-
There are multiple report formats, including markdown.
-
The reporter now supports sub-gwei gas prices. Sub-penny cost display is possible by configuring the
currencyDisplayPrecision
option -
Dedicated support for the OpenZeppelin Upgrades plugin has been added. (Their proxy pattern often resulted in missing gas data because the reporter didn't know what contract was being called - that's all handled under the hood now.)
-
Dedicated support for the hardhat-viem plugin has been added (this was broken and should be fixed by this release)
-
There are many new output, display and low-level options - check out the Config Examples section of the docs
-
There's additional support for custom proxy contract resolution. If you're routing your calls through contract middleware you can configure the reporter to understand how that works and get the data you expect.
-
Additionally:
- eth-gas-reporter's logic has been ported here and translated to Typescript
- The plugin has been decoupled from Mocha so it can be seamlessly integrated with lots of other tasks or test frameworks
- There have been big architectural changes and testing improvements and additional features are in the pipeline
Breaking
- Codechecks support was removed because it hasn't been accepting users for a while. I loved codechecks. (Building a github action for the reporter is on the V2 roadmap though).
- The JSON object emitted by the reporter has changed to reflect the plugin's internal types. If you've been post-processing that data you'll need to look at the JSON Output docs and update your logic.
- The
gas-reporter:merge
task has been renamedhhgas:merge
- The
onlyCalledMethods
option has been renamedshowUncalledMethods
and must be set totrue
(if you want that).
Funding
Work on V2 was funded in part by OpenZeppelin via DRIPS, a public goods protocol that helps direct funding to packages in your dependency tree. If you're using DRIPS and want to add hardhat-gas-reporter to the packages you support its page is here.
Full Changelog: v1.10.0...v2.0.0
1.10.0
What's Changed
Fixes
- Fix errors during remote contract gathering (#153) by @3commascapital in #166
Dependabot
- Bump cross-fetch from 2.2.3 to 2.2.6 by @dependabot in #128
- Bump decode-uri-component from 0.2.0 to 0.2.2 by @dependabot in #137
- Bump qs from 6.5.2 to 6.5.3 by @dependabot in #138
- Bump express from 4.17.1 to 4.18.2 by @dependabot in #139
- Bump cookiejar from 2.1.2 to 2.1.4 by @dependabot in #143
- Bump http-cache-semantics from 4.1.0 to 4.1.1 by @dependabot in #145
- Bump minimist from 1.2.5 to 1.2.8 by @dependabot in #151
- Bump undici from 5.10.0 to 5.28.2 by @dependabot in #165
- Bump follow-redirects from 1.14.8 to 1.15.5 by @dependabot in #164
- Bump get-func-name from 2.0.0 to 2.0.2 by @dependabot in #163
- Bump browserify-sign from 4.2.0 to 4.2.2 by @dependabot in #162
- Fixes errors during remote contract gathering (#153) by @cgewecke in #166
Full Changelog: v1.0.9...v1.10.0
1.0.9-viem.0
This pre-release contains a work-around patch to make the gas reporter work with Hardhat's viem
tooling. It can be installed with:
npm install --save-dev hardhat-gas-reporter@viem
hardhat-viem
plugin in hardhat.config.ts
e.g
import "hardhat-gas-reporter" // <--- first
import "@nomicfoundation/hardhat-toolbox-viem"
There is ongoing work to make this part of the normally published package in #167 but it will not be released until v2.0 (probably end of February at the earliest).