我希望获得智能契约函数,返回由指定智能契约在块范围内发送的值。我找到了一种手册工作方法来实现这一点:
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‘方法:
web3.eth.call({
to: "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", // contract address
data: "0xc6888fa10000000000000000000000000000000000000000000000000000000000000003"
})
.then(console.log);
> "0x000000000000000000000000000000000000000000000000000000000000000a"通过使用此方法,我可以直接搜索指定的智能契约发送的数据,而无需任何筛选。但是API说:
执行消息调用事务,该事务在节点的VM中直接执行,但从未挖掘到块链中。
这意味着我们只能获取从未被挖掘到区块链中的事务的数据。然而,在我的例子中,事务已经被挖掘到区块链。
我会将我的问题改写为:是否有任何直接方法来获得智能契约(特定智能契约)函数的返回值?或者是否可以使用调用方法来实现这一点?谢谢
发布于 2019-05-28 09:33:35
请参阅本节与合同的交互
https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#
以及关于
执行消息调用事务,该事务在节点的VM中直接执行,但从未挖掘到块链中。
您理解错了,请参阅此问题的答案(特别建议先调用,然后调用sendTransaction) 交易和呼叫之间有什么区别?
https://ethereum.stackexchange.com/questions/67830
复制相似问题