hardhat-gas-reporter
Version:
Gas Analytics plugin for Hardhat
215 lines • 8.84 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateLegacyTextTable = void 0;
const chalk_1 = __importDefault(require("chalk"));
const lodash_1 = __importDefault(require("lodash"));
const cli_table3_1 = __importDefault(require("cli-table3"));
const units_1 = require("@ethersproject/units");
/**
* LEGACY ONLY
* IGNORE THIS FORMAT WHEN ADDING INFO TO TABLES (UNLESS BUG FIXING)
*/
/**
* Generates a gas statistics text table formatted for terminal or file.
* Based on Alan Lu's (github.com/cag) stats for Gnosis
* @param {HardhatRuntimeEnvironment} hre
* @param {GasData} data
* @param {GasReporterOptions} options
*/
function generateLegacyTextTable(hre, data, options) {
let optionalColor;
if (options.noColors || options.outputFile !== undefined) {
chalk_1.default.level = 0;
}
else {
chalk_1.default.level = 1;
}
if (options.darkMode) {
optionalColor = chalk_1.default.cyan;
}
else {
optionalColor = chalk_1.default.grey;
}
// ---------------------------------------------------------------------------------------------
// Assemble section: methods
// ---------------------------------------------------------------------------------------------
const methodRows = [];
lodash_1.default.forEach(data.methods, (method) => {
if (!method)
return;
const stats = {};
if (method.gasData.length > 0) {
stats.executionGasAverage = (0, units_1.commify)(method.executionGasAverage);
stats.cost = (method.cost === undefined) ? chalk_1.default.grey("-") : method.cost;
}
else {
stats.executionGasAverage = chalk_1.default.grey("-");
stats.cost = chalk_1.default.grey("-");
}
if (method.min && method.max) {
const uniform = (method.min === method.max);
stats.min = uniform ? chalk_1.default.grey("-") : chalk_1.default.cyan((0, units_1.commify)(method.min));
stats.max = uniform ? chalk_1.default.grey("-") : chalk_1.default.red((0, units_1.commify)(method.max));
}
stats.numberOfCalls = optionalColor(method.numberOfCalls.toString());
const fnName = options.showMethodSig ? method.fnSig : method.method;
if (options.showUncalledMethods || method.numberOfCalls > 0) {
const section = [];
section.push(optionalColor.bold(method.contract));
section.push(fnName);
section.push({ hAlign: "right", content: stats.min });
section.push({ hAlign: "right", content: stats.max });
section.push({ hAlign: "right", content: stats.executionGasAverage });
section.push({ hAlign: "right", content: stats.numberOfCalls });
section.push({
hAlign: "right",
content: chalk_1.default.green(stats.cost.toString())
});
methodRows.push(section);
}
});
// ---------------------------------------------------------------------------------------------
// Assemble section: deployments
// ---------------------------------------------------------------------------------------------
const deployRows = [];
// Alphabetize contract names
data.deployments.sort((a, b) => a.name.localeCompare(b.name));
data.deployments.forEach(deployment => {
const stats = {};
if (deployment.gasData.length === 0)
return;
stats.cost = (deployment.cost === undefined) ? chalk_1.default.grey("-") : deployment.cost;
if (deployment.min && deployment.max) {
const uniform = deployment.min === deployment.max;
stats.min = uniform ? chalk_1.default.grey("-") : chalk_1.default.cyan((0, units_1.commify)(deployment.min));
stats.max = uniform ? chalk_1.default.grey("-") : chalk_1.default.red((0, units_1.commify)(deployment.max));
}
const section = [];
section.push({ hAlign: "left", colSpan: 2, content: deployment.name });
section.push({ hAlign: "right", content: stats.min });
section.push({ hAlign: "right", content: stats.max });
section.push({ hAlign: "right", content: (0, units_1.commify)(deployment.executionGasAverage) });
section.push({
hAlign: "right",
content: optionalColor(`${deployment.percent} %`)
});
section.push({
hAlign: "right",
content: chalk_1.default.green(stats.cost.toString())
});
deployRows.push(section);
});
// ---------------------------------------------------------------------------------------------
// Assemble section: headers
// ---------------------------------------------------------------------------------------------
// Configure indentation for RTD
const leftPad = options.rst ? " " : "";
// Format table
const table = new cli_table3_1.default({
style: { head: [], border: [], "padding-left": 2, "padding-right": 2 },
chars: {
mid: "·",
"top-mid": "|",
"left-mid": `${leftPad}·`,
"mid-mid": "|",
"right-mid": "·",
left: `${leftPad}|`,
"top-left": `${leftPad}·`,
"top-right": "·",
"bottom-left": `${leftPad}·`,
"bottom-right": "·",
middle: "·",
top: "-",
bottom: "-",
"bottom-mid": "|"
}
});
// Format and load methods metrics
const title = [
{
hAlign: "center",
colSpan: 2,
content: optionalColor.bold(`Solc version: ${options.solcInfo.version}`)
},
{
hAlign: "center",
colSpan: 2,
content: optionalColor.bold(`Optimizer enabled: ${options.solcInfo.optimizer}`)
},
{
hAlign: "center",
colSpan: 1,
content: optionalColor.bold(`Runs: ${options.solcInfo.runs}`)
},
{
hAlign: "center",
colSpan: 2,
content: optionalColor.bold(`Block limit: ${(0, units_1.commify)(options.blockGasLimit)} gas`)
}
];
let methodSubtitle;
if (options.tokenPrice && options.gasPrice) {
const gwei = options.gasPrice;
const rate = parseFloat(options.tokenPrice.toString()).toFixed(2);
const currency = `${options.currency.toLowerCase()}`;
const token = `${options.token.toLowerCase()}`;
methodSubtitle = [
{ hAlign: "left", colSpan: 2, content: chalk_1.default.green.bold("Methods") },
{
hAlign: "center",
colSpan: 3,
content: chalk_1.default.cyan.bold(`${gwei} gwei/gas`)
},
{
hAlign: "center",
colSpan: 2,
content: chalk_1.default.red.bold(`${rate} ${currency}/${token}`)
}
];
}
else {
methodSubtitle = [
{ hAlign: "left", colSpan: 7, content: chalk_1.default.green.bold("Methods") }
];
}
const header = [
chalk_1.default.bold("Contract"),
chalk_1.default.bold("Method"),
chalk_1.default.green("Min"),
chalk_1.default.green("Max"),
chalk_1.default.green("Avg"),
chalk_1.default.bold("# calls"),
chalk_1.default.bold(`${options.currency.toLowerCase()} (avg)`)
];
// ---------------------------------------------------------------------------------------------
// Final assembly
// ---------------------------------------------------------------------------------------------
table.push(title);
table.push(methodSubtitle);
table.push(header);
methodRows.sort((a, b) => {
const contractName = a[0].localeCompare(b[0]);
const methodName = a[1].localeCompare(b[1]);
return contractName || methodName;
});
methodRows.forEach(row => table.push(row));
if (deployRows.length) {
const deploymentsSubtitle = [
{
hAlign: "left",
colSpan: 2,
content: chalk_1.default.green.bold("Deployments")
},
{ hAlign: "right", colSpan: 3, content: "" },
{ hAlign: "left", colSpan: 1, content: chalk_1.default.bold(`% of limit`) }
];
table.push(deploymentsSubtitle);
deployRows.forEach((row) => table.push(row));
}
return table.toString();
}
exports.generateLegacyTextTable = generateLegacyTextTable;
//# sourceMappingURL=legacy.js.map