Releases: cgewecke/hardhat-gas-reporter
Etherscan API V2
This release migrates the plugin to Etherscan's new V2 API. (V1 will stop working in June 2025). A benefit of this change is that you'll only need a single API key to access any of the L1 and L2 networks Etherscan supports. As a result, the plugin's L1Etherscan and L2Etherscan options are being deprecated in favor of a new etherscan option.
Your existing L1Etherscan key will continue to work.
To simplify your reporter config as you make this upgrade, make the change below:
const config: HardhatUserConfig = {
gasReporter: {
+ etherscan: "ABC...", // Same value as your old `L1Etherscan` key
- L1Etherscan: "ABC...",
- L2Etherscan: "DEF..."
}
}(You'll continue to see price data even if you don't change your config. The plugin defaults to using your L1Etherscan key if it doesn't see the newer option set.)
What's Changed
- Update @solidity-parser/parser to 0.20.1 by @cgewecke in #271
- Use Etherscan API V2 by @cgewecke in #273
Full Changelog: v2.2.3...v2.3.0
Small L2 Bug Fixes
This release fixes two small bugs affecting L2 gas reporting:
- Sub-gwei L1 baseFees were being incorrectly rounded to zero when calculating OPStack chain costs.
- Setting a
gasPriceon the Hardhat Network config could result in test suites which emulate Arbitrum hanging (thanks to @mattador1 for reporting and helping debug this) - We've also updated the
viempackage (which should resolve npm installation warnings for one of its transitive dependencies)
What's Changed
- Skip signature emulation for Arbitrum by @cgewecke in #265
- Stop sub-gwei baseFee being rounded to zero by @cgewecke in #269
- Update viem to ^2.27.0 (and unpin) by @cgewecke in #268
Full Changelog: v2.2.2...v2.2.3
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
L1Etherscanoption 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
blobBaseFeedrops 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...", }
blobBaseFeeis now fetched directly from the OP stack GasOracle contracts (should be accurate)⚠️ To get liveblobBaseFeeprices for L2 emulation you'll need to set theL2Etherscanapi 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
L1option 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
viewandpuremethods 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
currencyDisplayPrecisionoption -
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:mergetask has been renamedhhgas:merge - The
onlyCalledMethodsoption has been renamedshowUncalledMethodsand 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

