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 diff --git a/cmd/jsutils/gettxcount.js b/cmd/jsutils/gettxcount.js index 8bc7f2bdd9..1ea5ca1c5d 100644 --- a/cmd/jsutils/gettxcount.js +++ b/cmd/jsutils/gettxcount.js @@ -4,34 +4,51 @@ import program from "commander"; program.option("--rpc ", "Rpc"); program.option("--startNum ", "start num") program.option("--endNum ", "end num") -// --miner: -// specified: find the max txCounter from the specified validator -// not specified: find the max txCounter from all validators -program.option("--miner ", "miner", "") program.parse(process.argv); const provider = new ethers.JsonRpcProvider(program.rpc) const main = async () => { - let txCount = 0; - let num = 0; - console.log("Find the max txs count between", program.startNum, "and", program.endNum); + let txCountTotal = 0; + let gasUsedTotal = 0; + let inturnBlocks = 0; for (let i = program.startNum; i < program.endNum; i++) { - if (program.miner !== "") { - let blockData = await provider.getBlock(Number(i)) - if (program.miner !== blockData.miner) { - continue - } - } - let x = await provider.send("eth_getBlockTransactionCountByNumber", [ + 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 a = ethers.toNumber(x) - if (a > txCount) { - num = i; - txCount = a; + let gasUsed = eval(eval(header.gasUsed).toString(10)) + gasUsedTotal += gasUsed + let difficulty = eval(eval(header.difficulty).toString(10)) + if (difficulty == 2) { + inturnBlocks += 1 } + let timestamp = eval(eval(header.timestamp).toString(10)) + console.log("BlockNumber =", i, "mod =", i%4, "miner =", header.miner , "difficulty =", difficulty, "txCount =", ethers.toNumber(txCount), "gasUsed", gasUsed, "timestamp", timestamp) } - console.log("BlockNum = ", num, "TxCount =", txCount); + + 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 inturnBlocksRatio = inturnBlocks/blockCount + let tps = txCountTotal/timeCost + let M = 1000000 + let avgGasUsedPerBlock = gasUsedTotal/blockCount/M + let avgGasUsedPerSecond = gasUsedTotal/timeCost/M + + console.log("Get the performance between [", program.startNum, ",", program.endNum, ")"); + console.log("txCountPerBlock =", txCountPerBlock, "txCountTotal =", txCountTotal, "BlockCount =", blockCount, "avgBlockTime =", avgBlockTime, "inturnBlocksRatio", inturnBlocksRatio); + console.log("txCountPerSecond =", tps, "avgGasUsedPerBlock =", avgGasUsedPerBlock, "avgGasUsedPerSecond = ", avgGasUsedPerSecond); }; main().then(() => process.exit(0))