web3.eth.getBlock() 中的“latest”和“earliest”这两个参数有啥区别

Posted

技术标签:

【中文标题】web3.eth.getBlock() 中的“latest”和“earliest”这两个参数有啥区别【英文标题】:What is the difference between the two parameters "latest" and "earliest" in web3.eth.getBlock()web3.eth.getBlock() 中的“latest”和“earliest”这两个参数有什么区别 【发布时间】:2021-08-23 03:06:49 【问题描述】:

我想知道web3.eth.getBlock()"latest""earliest"参数的区别,我在文档中找不到任何解释。

我的想法

最早 传递 "earliest" 为您提供代码执行时或执行之前的最后一个可用块。

最新 传递“lastest”仅在代码执行后返回一个新块。

如果有人有这方面的信息或文件,请回复。

【问题讨论】:

【参考方案1】:

getBlock() 文档指向 defaultBlock 以获取有关值的信息。

"earliest" - 字符串:创世区块

"latest" - 字符串:最新区块(区块链的当前头部)

"pending" - 字符串:当前挖出的区块(包括待处理的交易)

所以“最新”是最新块。另一方面,“最早的”是最旧的块。

【讨论】:

谢谢。我的后续问题是,我是要获取顶部的任何块,还是会等待下一个块并将其作为最新块返回?这个问题的原因是我想在代码运行后获得最新的块,而不是代码运行时的任何内容。 当你执行web3.eth.getBlock("latest")时,它会返回当前最新挖出的区块(例如区块#100),并且不会等待新的区块被挖出...如果你再次运行它时有一个新块(例如 #101),然后它返回块 #101 作为“最新”。 我在下面添加了一个后续问题,以便正确格式化。 您可以使用 WSS 提供程序(而不是 HTTP 提供程序,通常在 new Web3() 构造函数中传递),然后将 subscribe 传递给“newBlockHeaders”WSS 消息。每次有新块时,这都会向您发送一条消息,您可以使用提供的block.number(来自消息)来请求特定块(或简称为“最新”)...... HTTP 提供程序的解决方法将轮询web3.eth.getBlock("latest")(例如每秒使用setTimeout()),但这可能会达到您的提供商的速率限制。 伟大的解决方案彼得。谢谢。

以上是关于web3.eth.getBlock() 中的“latest”和“earliest”这两个参数有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

Web3 获取合约交易历史

如何使用 web3.js 获得 RSK 的最低 gas 价格?

LA PERL* 内衣中的“劳斯莱斯”!

节源码,利用Codeblocks编译通过

LA3905

Elixir NIF 中的正确资源处理