Hardhat's Gas Reporter plugin is an essential tool for Ethereum developers looking to optimize smart contract gas consumption. This comprehensive guide explains its installation, configuration, and practical application for maximizing efficiency.
Why Use Gas Reporter?
This Hardhat plugin provides actionable insights by:
- Quantifying function costs with precise gas measurements
- Identifying optimization opportunities in high-gas functions
- Estimating real costs in multiple currencies (USD/ETH/EUR)
- Benchmarking performance across contract versions
Installation & Setup
1. Install the Plugin
npm install --save-dev hardhat-gas-reporter2. Configure hardhat.config.js
require("hardhat-gas-reporter");
module.exports = {
solidity: "0.8.20",
gasReporter: {
enabled: true,
currency: "USD",
gasPrice: 20, // Gwei
coinmarketcap: process.env.COINMARKETCAP_KEY, // For live prices
outputFile: "gas-report.txt",
noColors: true, // For file output
excludeContracts: ["MockToken"] // Optional exclusions
}
};Generating Gas Reports
Run your tests with:
npx hardhat testSample Report Output
·----------------------------|----------------------------|-------------|----------------------------·
| Contract Method | Min Gas | Max Gas | Avg Gas |
·----------------------------|----------------------------|-------------|-------------|-------------·
| MyContract · transfer | 28912 | 51234 | 43210 |
| MyContract · approve | 2345 | 2345 | 2345 |
·----------------------------|----------------------------|-------------|-------------|-------------·Key Optimization Strategies
1. Storage Operation Reduction
// Before: Multiple storage writes
function updateValue(uint256 newValue) public {
value = newValue;
lastUpdate = block.timestamp;
}
// After: Single storage write
struct State {
uint256 value;
uint256 lastUpdate;
}
State private state;
function updateValue(uint256 newValue) public {
state = State(newValue, block.timestamp);
}2. Constant Variables
// Replace storage variables with constants
address public constant OWNER = 0x...; // Gas cost: 03. Variable Packing
// Pack smaller variables together
uint128 a;
uint128 c; // Shares slot with 'a'
uint256 b;👉 Discover more gas optimization techniques
Advanced Techniques
4. Unchecked Blocks
// Safe gas savings for known-safe operations
function increment(uint256 x) public pure returns (uint256) {
unchecked { return x + 1; }
}5. Computation Caching
// Cache repeated calculations
function calculate(uint256 a, uint256 b) public pure {
uint256 sum = a + b;
require(sum > 100, "Invalid sum");
uint256 result = sum * 2;
return result;
}FAQ Section
Q: How accurate are gas estimates?
A: Reports reflect testnet conditions; mainnet costs may vary by ±5-10% due to network congestion.
Q: Can I compare multiple contracts?
A: Yes, configure excludeContracts to focus on specific contracts during analysis.
👉 Learn about real-world gas optimization case studies
Q: Why use CoinMarketCap integration?
A: Provides real-time ETH price data for accurate USD cost estimations when configured with an API key.