首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取Ethers.js响应数据

如何获取Ethers.js响应数据
EN

Stack Overflow用户
提问于 2021-04-24 11:15:13
回答 2查看 2.8K关注 0票数 4

坚固性:

代码语言:javascript
复制
function ping() public view returns ( uint ) {
    return 999999999;
}
function ping2() public returns ( uint ) {
    return 999999999;
}

Javascript Ethers.js:

代码语言:javascript
复制
(await contract.ping()).toString();  //-> 999999999  ( correct ) 
(await contract.ping2()).toString(); //-> [object Object] ( ?? )

为什么ping2会返回Object Object?如何从ping2获取数据?

另外:

代码语言:javascript
复制
(await contract.sendTransaction(txObj)).toString(); //-> [object Object] ( ?? )

为什么使用sendTransaction也会返回object Object?

EN

回答 2

Stack Overflow用户

发布于 2021-04-24 16:55:42

(等待contract.ping()).toString();//-> 999999999 (正确)

ping()是一个view函数-您可以直接调用它,而无需创建事务。所以ethers.js不会创建事务,而只是返回调用的结果。

(await contract.ping2()).toString();//-> object Object

为什么使用sendTransaction也会返回object Object?

ping2()是一个常规的public函数。这意味着您需要创建一个事务来执行它(即使是,在本例中是,它也不会进行任何状态更改,因此它也可以是一个视图函数)。

当您创建事务时,Ethers.js返回事务数据,而不是协定函数返回值。

使用Ethers.js读取事务生成的值的方法很少。

  • 在这种情况下,ping2()不会进行任何状态更改,甚至不会读取任何区块链数据,因此它可能是一个pure函数。如果它正在读取区块链数据,它将是一个view函数...在这两种情况下,ethers.js都会返回函数调用(而不是tx)的结果。

到设置器和calling a getter

  • 事务。

合同返回值{ uint256 value;function setValue(uint256 _value) public { value = _value;} function getValue()公共视图返回(uint256) {uint256 value;}}

首先创建一个执行setValue()函数的事务,然后调用getValue() (没有事务,所以它返回JS中的值)。

  • 读取事务生成的事件日志

事件传递( address from,address to,uint256 amount);函数传递(address _to,uint256 _amount) public { emit Transfer(msg.sender,_to,_amount);}

您可以获取还包含事件日志(在本例中为Transfer事件及其值)的transaction receipt

票数 3
EN

Stack Overflow用户

发布于 2022-01-25 02:14:24

这是来自Force Hero的一个使用事件的很好的解决方案。

简而言之:

代码语言:javascript
复制
const tx = await contract.transfer(...args); // 100ms
const rc = await tx.wait(); // 0ms, as tx is already confirmed
const event = rc.events.find(event => event.event === 'Transfer');
const [from, to, value] = event.args;
console.log(from, to, value);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67239017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档