hardhat-gas-reporter
Version:
Gas Analytics plugin for Hardhat
90 lines (80 loc) • 2.61 kB
text/typescript
import { HardhatUserConfig } from "hardhat/types";
import {
DEFAULT_CURRENCY,
DEFAULT_CURRENCY_DISPLAY_PRECISION,
DEFAULT_JSON_OUTPUT_FILE,
DEFAULT_OPTIMISM_HARDFORK,
BASE_ECOTONE_BASE_FEE_SCALAR,
BASE_ECOTONE_BLOB_BASE_FEE_SCALAR,
OPTIMISM_ECOTONE_BASE_FEE_SCALAR,
OPTIMISM_ECOTONE_BLOB_BASE_FEE_SCALAR,
TABLE_NAME_TERMINAL
} from "../constants";
import { GasReporterOptions, OptimismHardfork } from "../types";
/**
* Validates Optimism hardfork option
* @param hardfork
* @returns {boolean}
*/
function isOptimismHardfork(hardfork: string | undefined) {
if (hardfork === undefined) return false;
return ["bedrock, ecotone"].includes(hardfork);
}
/**
* Sets default reporter options
*/
export function getDefaultOptions(userConfig: Readonly<HardhatUserConfig>): GasReporterOptions {
let optimismHardfork: OptimismHardfork;
let opStackBaseFeeScalar: number = 0;
let opStackBlobBaseFeeScalar: number = 0;
const userOptions = userConfig.gasReporter;
// NB: silently coercing to default if there's a misspelling or option not avail
if (userOptions) {
if (userOptions.L2 === "optimism" || userOptions.L2 === "base")
if (!isOptimismHardfork(userOptions.optimismHardfork)){
optimismHardfork = DEFAULT_OPTIMISM_HARDFORK;
}
if (userOptions.L2 === "optimism") {
if (!userOptions.opStackBaseFeeScalar) {
opStackBaseFeeScalar = OPTIMISM_ECOTONE_BASE_FEE_SCALAR;
}
if (!userOptions.opStackBlobBaseFeeScalar) {
opStackBlobBaseFeeScalar = OPTIMISM_ECOTONE_BLOB_BASE_FEE_SCALAR
}
}
if (userOptions.L2 === "base") {
if (!userOptions.opStackBaseFeeScalar) {
opStackBaseFeeScalar = BASE_ECOTONE_BASE_FEE_SCALAR;
}
if (!userOptions.opStackBlobBaseFeeScalar) {
opStackBlobBaseFeeScalar = BASE_ECOTONE_BLOB_BASE_FEE_SCALAR
}
}
}
return {
currency: DEFAULT_CURRENCY,
currencyDisplayPrecision: DEFAULT_CURRENCY_DISPLAY_PRECISION,
darkMode: false,
enabled: true,
excludeContracts: [],
excludeAutoGeneratedGetters: false,
forceTerminalOutput: false,
includeBytecodeInJSON: false,
includeIntrinsicGas: true,
L1: "ethereum",
noColors: false,
offline: false,
opStackBaseFeeScalar,
opStackBlobBaseFeeScalar,
optimismHardfork,
outputJSON: false,
outputJSONFile: DEFAULT_JSON_OUTPUT_FILE,
reportFormat: TABLE_NAME_TERMINAL,
reportPureAndViewMethods: false,
rst: false,
rstTitle: "",
suppressTerminalOutput: false,
showMethodSig: false,
showUncalledMethods: false,
};
}