我想计算一下在过去三个月内RSK上所有交易的平均煤气费。我尝试使用Web3.js库查询RSK块链。要获得仅为单个块高度的事务数据,我必须执行以下操作:
const txsPerBlock = await web3.getBlockTransactionCount(block.height);
const txs = await Promise.all(
[...Array(txsPerBlock).keys()].map(
(i) => web3.eth.getTransactionFromBlock(block.height, i))
);然后计算平均煤气费:
const averageGasFee = txs.reduce(
(p, c) => p + Number(c.gasPrice) * c.gas,
0
) / txs.length;然而,在3个月内,RSK上大约有23万块区块,包括每个区块约3笔交易。因此,我不得不调查了大约60万笔交易,这些交易要花很长时间才能完成。我等了一个小时,然后取消了剧本。是否有更好的查询RSK区块链和计算平均交易气体费用在这么多的区块和交易?
发布于 2022-03-11 11:16:59
您可以使用getBlock()方法(文档),如果将true作为第二个param (returnTransactionObjects)传递,该方法可以立即返回块中的所有事务。
const block = await web3.eth.getBlock(blockNumber, true);
const averageGasFee = block.transactions.reduce(
(p, c) => p + Number(c.gasPrice) * c.gas,
0
) / block.transactions.length;这将导致“仅”230 k请求,而不是以前的600 k请求。
发布于 2022-03-11 12:23:17
使用共价实现这一点要容易得多。您可以通过执行一个PostgreSQL查询来计算所需的煤气费:
SELECT AVG(t.gas_spent * t.gas_price) / 10^18 AS gas_paid
FROM chain_rsk_mainnet.block_transactions t
WHERE
t.signed_at > (NOW() - INTERVAL '3 month')
AND t.signed_at <= NOW()
;该查询的结果是0.000009922904625 (RBTC),执行/获取结果只需4.2秒。
https://stackoverflow.com/questions/71437556
复制相似问题