UNPKG

hardhat-gas-reporter

Version:
253 lines 8.87 kB
import { Collector } from "./lib/collector"; import { GasData } from "./lib/gasData"; import { Resolver } from "./lib/resolvers"; declare module "hardhat/types/config" { interface HardhatUserConfig { gasReporter?: GasReporterOptions; } } export type OptimismHardfork = "bedrock" | "ecotone" | undefined; export interface GasReporterOptions { /** @property Gwei base fee per gas unit. */ baseFee?: number; /** @property Arbitrum-specific gwei price per byte of L1 calldata. */ /** * This is the `l1BaseFeeEstimate` value returned by NodeInterface.gasEstimateL1Component(...) multiplied by 16. * See: https://docs.arbitrum.io/build-decentralized-apps/how-to-estimate-gas#an-example-of-how-to-apply-this-formula-in-your-code */ baseFeePerByte?: number; /** @property Gwei blob base fee per gas unit */ blobBaseFee?: number; /** @property Etherscan-like url to fetch blobBasefee from */ blobBaseFeeApi?: string; /** @property API key to access token/currency market price data with */ coinmarketcap?: string; /** @property Coinmarketcap currency code to denominate network token costs in (eg: "USD") */ currency?: string; /** @property: Decimal precision of nation state currency costs display */ currencyDisplayPrecision?: number; /** @property Use colors easier to see on dark backgrounds when rendering to terminal */ darkMode?: boolean; /** @property Enable plugin */ enabled?: boolean; /** @property Filters out gas reporting for solc generated public state & storage vars */ excludeAutoGeneratedGetters?: boolean; /** @property List of contract names to exclude from report (e.g "Ownable") */ excludeContracts?: string[]; /** @property Write to terminal even when saving output to file */ forceTerminalOutput?: boolean; /** @property Table format to output forced terminal output in */ forceTerminalOutputFormat?: 'legacy' | 'terminal' | 'markdown'; /** @property Gwei price per gas unit (eg: 20) */ gasPrice?: number; /** @property Etherscan-like url to fetch live execution network gas price from */ gasPriceApi?: string; /** @property Etherscan-like url to fetch L1 block header from */ getBlockApi?: string; /** @property Include bytecode and deployedBytecode blobs in JSON deployment data */ includeBytecodeInJSON?: boolean; /** @property Include standard 21_000 + calldata bytes fees in method gas usage data */ includeIntrinsicGas?: boolean; /** @property L1 Network to calculate execution or data costs for */ L1?: "ethereum" | "polygon" | "binance" | "fantom" | "moonbeam" | "moonriver" | "gnosis" | "avalanche"; /** @property L2 Network to calculate execution costs for */ L2?: "optimism" | "base" | "arbitrum"; /** @property Etherscan API key for L1 networks */ L1Etherscan?: string; /** @property Etherscan API key for L2 networks */ L2Etherscan?: string; /** @property Omit terminal color in output */ noColors?: boolean; /** @property Never make a remote call to fetch data */ offline?: boolean; /** @property Optimism client version to emulate gas costs for. Only applied when L2 is "optimism" */ optimismHardfork?: OptimismHardfork; /** @property Scalar applied to L1 base fee (see Optimism gas fee documentation for details) */ opStackBaseFeeScalar?: number; /** @property Scalar applied to L1 blob base fee (see Optimism gas fee documentation for details) */ opStackBlobBaseFeeScalar?: number; /** @property Relative path to a file to output terminal table to (instead of stdout) */ outputFile?: string; /** @property Write JSON object with all options, methods, deployment data to file */ outputJSON?: boolean; /** @property: Relative path to a file to output JSON data to */ outputJSONFile?: string; /** @property User-defined class with methods to help reporter identify targets of proxied calls */ proxyResolver?: CustomGasReporterResolver; /** @property List of forked-network deployed contracts to track execution costs for */ remoteContracts?: RemoteContract[]; /** @property Report format identfiers */ reportFormat?: "legacy" | "terminal" | "markdown"; /** @property Track gas usage for methods using eth_call */ reportPureAndViewMethods?: boolean; /** @property Format table output for `rst` documentation (eg sphinx, ReadTheDocs) */ rst?: boolean; /** @property Optional title for `rst` documentation */ rstTitle?: string; /** @property Display the complete function signature of methods */ showMethodSig?: boolean; /** @property Lists all methods and deployments, even if no transactions were recorded for them */ showUncalledMethods?: boolean; /** @property Skips writing the table to std out */ suppressTerminalOutput?: boolean; /** @property Network token gas fees are denominated in (eg:"ETH") */ token?: string; /** @property Network token price per nation state currency unit, to two decimal places (eg: "2145.00") */ tokenPrice?: string; /** @property Show change in current method and deployment gas usage versus previous test run */ trackGasDeltas?: boolean; /** @ignore */ solcInfo?: any; /** @ignore */ blockGasLimit?: number; /** @ignore */ cachePath?: string; } export interface GasReporterExecutionContext { collector?: Collector; task?: string; usingOZ?: boolean; usingViem?: boolean; usingCall?: boolean; blockGasLimit?: number; methodsTotalGas?: number; methodsTotalCost?: string; methodIgnoreList?: string[]; deploymentsTotalGas?: number; deploymentsTotalCost?: string; } export interface RemoteContract { abi: any; address: string; name: string; bytecode?: string; bytecodeHash?: string; deployedBytecode?: string; } export interface Deployment { name: string; bytecode: string; deployedBytecode: string; gasData: number[]; } /** * Type for the object generated by eth-gas-reporter on gasReporterOutput.json files. * More info: https://github.com/cgewecke/eth-gas-reporter/blob/master/docs/gasReporterOutput.md */ export interface GasReporterOutput { namespace: string; toolchain: string; version: string; options: GasReporterOptions; data?: GasData; } export interface MethodDataItem { key: string; isCall: boolean; contract: string; method: string; fnSig: string; callData: number[]; gasData: number[]; intrinsicGas: number[]; numberOfCalls: number; min?: number; max?: number; executionGasAverage?: number; calldataGasAverage?: number; cost?: string; minDelta?: number; maxDelta?: number; executionGasAverageDelta?: number; calldataGasAverageDelta?: number; } export interface MethodData { [key: string]: MethodDataItem; } export interface Deployment { name: string; bytecode: string; deployedBytecode: string; callData: number[]; gasData: number[]; min?: number; max?: number; executionGasAverage?: number; calldataGasAverage?: number; cost?: string; percent?: number; minDelta?: number; maxDelta?: number; executionGasAverageDelta?: number; calldataGasAverageDelta?: number; } export interface SolcInfo { version: string; optimizer: string; runs: number | string; viaIR: boolean; } export interface ArtifactInfo { abi: any[]; bytecode: string; deployedBytecode: string; address?: string; bytecodeHash?: string; } export interface ContractInfo { name: string; excludedMethods: string[]; artifact: ArtifactInfo; } export interface JsonRpcTx { input: string; data?: string; to: string | null; from: string; gas: string; gasPrice: string; maxFeePerGas?: string; maxPriorityFeePerGas?: string; type: string; accessList?: any['accessList']; chainId?: string; hash: string; nonce: string; value: string; v?: string; r?: string; s?: string; } export interface FakeTx { input: string; to: string; isCall: true; } export interface ValidatedRequestArguments { params: [ { data: string; to: string; } ]; } export interface JsonRpcBlock { gasLimit: string; baseFeePerGas: string; } export interface MinimalInterpreterStep { gasLeft: bigint; gasRefund: bigint; stack: bigint[]; opcode: { name: string; fee: number; dynamicFee?: bigint; isAsync: boolean; }; } export interface CustomGasReporterResolver { ignore: () => string[]; resolve: (this: Resolver, transaction: JsonRpcTx) => Promise<string | null>; } //# sourceMappingURL=types.d.ts.map