调用交易和事件

优质
小牛编辑
115浏览
2023-12-01

调用交易和事件

所有交易的智能合约方法以相同的参数值命名为它们的solidity方法。交易调用不返回任何值,同样不需要考虑方法指定的返回类型。因此,对于所有交易的方法,只是返回与交易关联的交易收据。

TransactionReceipt transactionReceipt = contract.someMethod(
             <param1>,
             ...).send();

交易收据是十分有用的有两个主要原因:

  • 它提供了交易驻留的挖掘块的详细信息。
  • 被调用的solidity事件将被记录为交易的一部分,然后可以被提取。

在智能合约中定义的任何事件都将用一个名为process<Event Name>Event方法在智能合约封装包中进行表示,该事件采用交易收据,并从中提取索引和非索引事件参数,这些参数在EventValues实例中被解码返回:

EventValues eventValues = contract.processSomeEvent(transactionReceipt);

或者,你可以使用可观察的过滤器Observable filter,而不是监听与智能合约相关联的事件:

contract.someEventObservable(startBlock, endBlock).
        .subscribe(event -> ...);

有关使用可观察过滤器的详细信息,请参阅过滤器和事件

请记住,对于任何索引数组、字节和字符串solidity参数类型,它们的Keccak-256 hash值将被返回,请参阅事件文档以获取更多信息。