Ire*_*ios 10 javascript web3js rsk
我想计算过去三个月内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))
);
Run Code Online (Sandbox Code Playgroud)
然后计算平均gas费用:
const averageGasFee = txs.reduce(
(p, c) => p + Number(c.gasPrice) * c.gas,
0
) / txs.length;
Run Code Online (Sandbox Code Playgroud)
然而,在 3 个月内,RSK 上约有 230,000 个区块,其中每个区块约有 3 笔交易。因此,我必须轮询大约 600,000 笔交易,而这需要很长时间才能完成。我等了一个小时然后取消了剧本。有没有更好的方法来查询 RSK 区块链并计算如此大量的区块和交易的平均交易 Gas 费用?
如果您作为第二个参数 ( ) 传递,则可以使用能够立即返回块中所有交易的getBlock()方法 ( docs ) 。truereturnTransactionObjects
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;
Run Code Online (Sandbox Code Playgroud)
这导致“仅”有 230k 请求,而不是之前的 600k。
使用Covalent可以更容易地完成此任务。您可以通过执行单个 PostgreSQL 查询来计算所需的 Gas 费:
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()
;
Run Code Online (Sandbox Code Playgroud)
该查询的结果是0.000009922904625(RBTC),执行/获取结果只花了4.2秒。
| 归档时间: |
|
| 查看次数: |
1637 次 |
| 最近记录: |