如何使用 web3 获取以太坊区块的数据

Posted

技术标签:

【中文标题】如何使用 web3 获取以太坊区块的数据【英文标题】:How to get the data of an ethereum block using web3 【发布时间】:2020-09-22 10:40:08 【问题描述】:

这是我的合同:

pragma solidity ^0.4.18;
contract Signup 
   string fStudentId;
   string fLocation;

   function setInfo(string _fStudentId, string _fLocation) public  
       fStudentId = _fStudentId;
       fLocation = _fLocation;
   
   function getInfo() public constant returns (string, string)    
       return (fStudentId, fLocation);
   

我将 studentId 和 location 放入阻止,如何使用 web3 获取此信息? 我尝试使用: web3.eth.getBlock(7).then(console.log);

但得到:

我的 studentId 和位置在哪里? 谢谢!!!!!!

【问题讨论】:

要获取值,您应该使用使用 web3 的合同方法。 web3js.readthedocs.io/en/v1.2.8/… 【参考方案1】:

当您说“我将 studentId 和位置放入阻止”时不确定您的意思,但我会尝试回答。

您可能正在通过执行类似的操作来设置状态

contract.functions.setInfo(1, "here")

要检索该数据,您将执行此操作

contract.functions.getInfo()


以太坊区块链的实际状态由默克尔树组成,并由stateRoot 引用。如您所见,根据您拥有的区块头找到这些数据并不容易。

要从合同中检索数据,您有几个选择:

    使用我上面描述的 getInfo 方法 查找您执行setInfo 的交易并解析交易收据中的输入 每当调用 setInfo 时从您的合约中发出一个事件,并为一个过滤器设置一个监听器,该过滤器将在任何时候发出您的合约事件的交易发生时被调用 运行一个节点并从块中获取原始数据,而不仅仅是块头

【讨论】:

以上是关于如何使用 web3 获取以太坊区块的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何查看以太坊区块的原始数据?

尝试监控以太坊区块时获取“web3.eth.filter 不是功能”

如何获取以太坊合约和账户信息(使用geth和web3.py)

如何读取以太坊交易的数据字段

以太坊/BSC 区块链交易数据

python如何使用web3py与以太坊投资智能合约交互