我想计算过去三个月内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 费用?
我正在使用 Hardhat 在 RSK 测试网上部署和测试我的智能合约。这是hardhat.config.js我正在使用的设置:
require('@nomiclabs/hardhat-waffle');
const mnemonic = fs.readFileSync('.mnemonic', 'utf8').toString().trim();
const minimumGasPriceTestnet = 65164000;
const TESTNET_GAS_MULT = 1;
module.exports = {
solidity: '0.7.3',
defaultNetwork: 'rsktestnet',
networks: {
hardhat: {},
rsktestnet: {
chainId: 31,
url: 'https://public-node.testnet.rsk.co/',
gasPrice: Math.floor(minimumGasPriceTestnet * TESTNET_GAS_MULT),
gasMultiplier: TESTNET_GAS_MULT,
accounts: {
mnemonic,
initialIndex: 0,
count: 10,
},
},
},
};
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的测试失败,并且收到以下错误消息:
Error: Timeout of 20000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/Users/ales/Work/IOV/demo-code-snippets/hardhat-tutorial/ethers-waffle/test/Token.js)
at listOnTimeout …Run Code Online (Sandbox Code Playgroud) 我注意到一些智能合约\n的地址以 、 或 - 开头,0x0000我0x1234不确定0x1337部署者是如何做到这一点的。\n\xe2\x80\x8b\n是否可以在 RSK 上执行此操作?