我正在使用运行版本1.8.8-稳定的Geth节点连接到testnet,还使用了web3j库3.4.0版本。
我部署了一个智能契约,并使用web3j包装工具与契约进行交互,一切看起来都正常。
我想要做的是从新开采的区块中解码信息。也就是说,我订阅并可以从新挖掘的块中检索所有事务。
我知道交易与我的智能合同有关,因为智能合同中的"to“地址是相同的。但是,我如何才能识别被调用的函数呢?
对不起我的英语,我希望有人能帮我。这里是我从事务散列中检索的事务收据的一个示例。有什么方法可以理解所谓的智能合同的功能吗?
TransactionReceipt{
transactionHash='0x6583a913786bc0010937806c4a97e8fcac673b1cd9e25c79074df76ae235f4f5',
transactionIndex='0x0',
blockHash='0x624ed9afc8a45c0b79a1c471fe732d00b813cc476f264e9ada0d3a15a7cf6198'
blockNumber='0x5e4cf'
cumulativeGasUsed='0x9495',
gasUsed='0x9495',
contractAddress='null',
root='0x3a175640d6654236151ffc9f9afbd9087a656b2b46ead9df5587725a77d3bd7a',
status='null',
from='0x145107ef476743eaabf8df07cefd47b17d87506c',
to='0x70104c2d70145d745ee9308e0ee428e1d96e6142',
logs=[Log{removed=false, logIndex='0x0', transactionIndex='0x0', transactionHash='0x6583a913786bc0010937806c4a97e8fcac673b1cd9e25c79074df76ae235f4f5', blockHash='0x624ed9afc8a45c0b79a1c471fe732d00b813cc476f264e9ada0d3a15a7cf6198', blockNumber='0x5e4cf', address='0x70104c2d70145d745ee9308e0ee428e1d96e6142', data='0x0000000000000000000000000000000000000000000000000000000000000064', type='null', topics=[0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x000000000000000000000000145107ef476743eaabf8df07cefd47b17d87506c, 0x00000000000000000000000061259ec0cfc824e41b5ca2cc64f6453476b165b4]}],
logsBloom='0x00000000000008000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000040000000000080020000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000100000000000000000000000000000800010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000'
}发布于 2018-05-28 15:17:54
事件可以从智能契约函数中发出。事件提供EVM日志记录功能。在您的契约中调用一个函数时,您可以发出这样的事件,在Web3j中,您可以订阅或侦听这些事件,这样您就可以准确地知道调用了哪个函数。
您可能需要更改智能契约代码,以在所需函数中添加事件。
举个例子:
坚固性
event DoThis();
function doSomething() public returns (bool){
emit DoThis();
return true;
}Web3j
contractInstance.DoThisEventObservable(null, DefaultBlockParameterName.LATEST).subscribe(response -> {
// TODO : your task
System.out.println("response.log = " + response.log);
});https://ethereum.stackexchange.com/questions/49737
复制相似问题