3

我正在尝试遍历块并获取他们的交易信息,如下所示:

var endOfLoop = app.web3.eth.blockNumber;
var latestBlockNumberInDb = 1;
    for (var i = latestBlockNumberInDb; i <= endOfLoop; i++) {
        var block = app.web3.eth.getBlock(i, true);
        console.log(i);
        if (block.transactions.length) { 
            /*TODO*/
            }
        else {
            /*TODO*/
            }
        }

问题是我正确地绕过 525-545 块,然后 app.web3.eth.getBlock(i)调用块执行。循环卡在那里。这不是关于可能使过程错误的传入块,因为当我从块 1000 开始循环时,它正确地获取块 1000 - 1540 并停留在 1540。

也是app.web3.eth.blockNumber300万左右,无论如何问题不在于终止循环。

有趣的是,循环上的迭代计数并不稳定。它总是在 525-545 之间变化。

我试图在请求之间延迟,但这也没有用。

此外,当我将 API 调用加倍时,如下所示:

var block = app.web3.eth.getBlock(i, true);
block = app.web3.eth.getBlock(i, true);

循环迭代大约 270 次。

API 调用有限制吗?如果是这样,怎么可能被超越?

4

1 回答 1

0

一些功能与区块链交互,这些需要一个节点。

除非您正在运行一个节点并配置 web3 以使用它,否则它可能默认使用 infura.io。

Infura 是一项付费服务​​,它们允许您在注册、获取密钥并在需要时升级您的计划之前进行一些免费的 API 调用来查询区块链。

于 2021-08-08T05:49:49.010 回答