How to get Ethers.js response data(如何获取Ethers.js响应数据)
问题描述
坚固性:
function ping() public view returns ( uint ) {
return 999999999;
}
function ping2() public returns ( uint ) {
return 999999999;
}
Java Ethers.js:
(await contract.ping()).toString(); //-> 999999999 ( correct )
(await contract.ping2()).toString(); //-> [object Object] ( ?? )
为什么ping2返回[Object Object]?如何从ping2获取数据?
同时:
(await contract.sendTransaction(txObj)).toString(); //-> [object Object] ( ?? )
为什么使用sendTransaction也返回[对象对象]?
推荐答案
(等待契约.ping()).toString();//->;999999999(正确)
ping()
是一个view
函数-您只需调用它,而无需创建事务。因此,ethers.js不会创建事务,而只是返回调用的结果。
(等待契约.ping2()).toString();//->;[对象对象](??)
为什么使用sendTransaction也返回[对象对象]?
ping2()
是正则public
函数。这表明您需要创建一个事务来执行它(尽管在本例中它不会进行任何状态更改,因此它也可以是一个视图函数)。
在创建事务时,Ethers.js返回事务数据,而不是协定函数返回值。
读取事务使用Ethers.js生成的值的方法很少。
在这种情况下,
ping2()
不会进行任何状态更改,甚至不会读取任何区块链数据,因此它可能是pure
函数。如果它在读取区块链数据,它将是一个view
函数...在这两种情况下,ethers.js
都返回函数调用(而不是tx)的结果。设置程序和calling a getter的事务。
contract MyContract { uint256 value; function setValue(uint256 _value) public { value = _value; } function getValue() public view returns (uint256) { return value; } }
首先创建一个执行
setValue()
函数的事务,然后调用getValue()
(没有事务,因此它返回JS中的值)。读取您的事务生成的事件日志
event Transfer(address from, address to, uint256 amount); function transfer(address _to, uint256 _amount) public { emit Transfer(msg.sender, _to, _amount); }
您可以获取还包含事件日志的transaction receipt(在本例中为
Transfer
事件及其值)。
这篇关于如何获取Ethers.js响应数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何获取Ethers.js响应数据


- addEventListener 在 IE 11 中不起作用 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- 400或500级别的HTTP响应 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01