From e810a2bfcabc20ae1dfdd2eb2d7bf884e009953f Mon Sep 17 00:00:00 2001 From: NathanBSC Date: Thu, 13 Jun 2024 18:26:05 +0800 Subject: [PATCH] cmd/jsutils: add a tool to get performance between a range of blocks --- cmd/jsutils/get_perf.js | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 cmd/jsutils/get_perf.js diff --git a/cmd/jsutils/get_perf.js b/cmd/jsutils/get_perf.js new file mode 100644 index 0000000000..8c377ede90 --- /dev/null +++ b/cmd/jsutils/get_perf.js @@ -0,0 +1,50 @@ +import { ethers } from "ethers"; +import program from "commander"; + +program.option("--rpc ", "Rpc"); +program.option("--startNum ", "start num") +program.option("--endNum ", "end num") +program.parse(process.argv); + +const provider = new ethers.JsonRpcProvider(program.rpc) + +const main = async () => { + let txCountTotal = 0; + let gasUsedTotal = 0; + console.log("Get the performance between [", program.startNum, ",", program.endNum, ")"); + for (let i = program.startNum; i < program.endNum; i++) { + let txCount = await provider.send("eth_getBlockTransactionCountByNumber", [ + ethers.toQuantity(i)]); + txCountTotal += ethers.toNumber(txCount) + + let header = await provider.send("eth_getHeaderByNumber", [ + ethers.toQuantity(i)]); + let gasUsed = eval(eval(header.gasUsed).toString(10)) + gasUsedTotal += gasUsed + } + + let blockCount = program.endNum - program.startNum + let txCountPerBlock = txCountTotal/blockCount + + let startHeader = await provider.send("eth_getHeaderByNumber", [ + ethers.toQuantity(program.startNum)]); + let startTime = eval(eval(startHeader.timestamp).toString(10)) + let endHeader = await provider.send("eth_getHeaderByNumber", [ + ethers.toQuantity(program.endNum)]); + let endTime = eval(eval(endHeader.timestamp).toString(10)) + let timeCost = endTime - startTime + let avgBlockTime = timeCost/blockCount + let tps = txCountTotal/timeCost + let M = 1000000 + let avgGasUsedPerBlock = gasUsedTotal/blockCount/M + let avgGasUsedPerSecond = gasUsedTotal/timeCost/M + + console.log("txCountPerBlock =", txCountPerBlock, "txCountTotal =", txCountTotal, "BlockCount =", blockCount, "avgBlockTime =", avgBlockTime); + console.log("txCountPerSecond =", tps, "avgGasUsedPerBlock =", avgGasUsedPerBlock, "avgGasUsedPerSecond = ", avgGasUsedPerSecond); +}; + +main().then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); \ No newline at end of file