Web3.js API 调用有限制吗?

Posted

技术标签:

【中文标题】Web3.js API 调用有限制吗?【英文标题】:Is there a limitation on Web3.js API calls? 【发布时间】:2017-10-18 14:08:48 【问题描述】:

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

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.blockNumber 大约是 300 万,无论如何问题不在于终止循环。

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

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

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

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

循环迭代大约 270 次。

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

一般情况下,如果要进行多次调用,在本地运行自己的节点会更便宜、更容易:twitter.com/moo9000/status/1370323189486784513

以上是关于Web3.js API 调用有限制吗?的主要内容,如果未能解决你的问题,请参考以下文章

web3.js 有 TypeScript 类型定义吗?

关于web3.js中与交易发送交易签名智能合约函数调用相关api的理解

使用 Web3.js HttpProvider 调用 API 时如何向 Ankr 提供凭据?

web3.js

web3.js

使用 Web3 从 Solidity 调用函数