首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询指定智能契约的函数返回值

查询指定智能契约的函数返回值
EN

Ethereum用户
提问于 2019-03-02 13:35:18
回答 1查看 608关注 0票数 0

我希望获得智能契约函数,返回由指定智能契约在块范围内发送的值。我找到了一种手册工作方法来实现这一点:

代码语言:javascript
复制
async function getTxsByAccount(contractAddress) {
  // get current block number
  let blockNumber = await web3.eth.getBlockNumber();
  // get block data
  let block = await web3.eth.getBlock(blockNumber, true);
  // loop through each transaction
  block.transactions.forEach(tx => {
    // filter out transactions for a specific smart contract
    console.log((tx.to));
    if (contractAddress == tx.to) {
      console.log(tx);
    }
  });
}

getTxsByAccount('contractAddress');

但是,如果第一次获取块数据并过滤指定智能契约的事务,则此方法将进行筛选。它可能会变得乏味,与大块范围。此外,它需要额外的处理才能获得函数的返回值,因为它只提供事务输入。我还从web3 API中找到了另一个方法'call‘方法:

代码语言:javascript
复制
web3.eth.call({
    to: "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", // contract address
    data: "0xc6888fa10000000000000000000000000000000000000000000000000000000000000003"
})
.then(console.log);

> "0x000000000000000000000000000000000000000000000000000000000000000a"

通过使用此方法,我可以直接搜索指定的智能契约发送的数据,而无需任何筛选。但是API说:

执行消息调用事务,该事务在节点的VM中直接执行,但从未挖掘到块链中。

这意味着我们只能获取从未被挖掘到区块链中的事务的数据。然而,在我的例子中,事务已经被挖掘到区块链。

我会将我的问题改写为:是否有任何直接方法来获得智能契约(特定智能契约)函数的返回值?或者是否可以使用调用方法来实现这一点?谢谢

EN

回答 1

Ethereum用户

发布于 2019-05-28 09:33:35

请参阅本节与合同的交互

https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#

以及关于

执行消息调用事务,该事务在节点的VM中直接执行,但从未挖掘到块链中。

您理解错了,请参阅此问题的答案(特别建议先调用,然后调用sendTransaction) 交易和呼叫之间有什么区别?

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/67830

复制
相关文章

相似问题

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