如何使用 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 不是功能”