gpt4 book ai didi

javascript - 如何获取 Ethers.js 响应数据

转载 作者:行者123 更新时间:2023-12-05 00:34:48 24 4
gpt4 key购买 nike

坚固性:

function ping() public view returns ( uint ) {
return 999999999;
}
function ping2() public returns ( uint ) {
return 999999999;
}
Javascript 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 也会返回 [object Object] ?

最佳答案

(await contract.ping()).toString(); //-> 999999999 ( correct )

ping()view函数 - 您可以在不创建事务的情况下调用它。所以 ethers.js 不创建事务,只返回调用结果。

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

Why does using sendTransaction also return [object Object] ?

ping2()是正规的 public功能。这表明您需要创建一个事务来执行它(即使 在这种情况下为 它没有进行任何状态更改,因此它也可以是一个 View 函数)。
当您创建交易时,Ethers.js 返回交易数据而不是合约函数返回值。
使用 Ethers.js 读取交易产生的值的方法很少。
  • 在这种情况下,ping2()不进行任何状态更改,甚至不读取任何区 block 链数据,因此它可能是 pure功能。如果它正在读取区 block 链数据,它将是 view功能... 在这两种情况下,ethers.js返回函数 的结果调用 (不是 TX)。
  • 与 setter 和 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 事件及其值)。
  • 关于javascript - 如何获取 Ethers.js 响应数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67239017/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com