交易收据处理器

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

交易收据处理器

默认情况下,当web3j向以太坊客户端提交新的交易时,web3j将继续轮询客户端直到收据到TransactionReceipt,指示交易已被添加提交到区块链上。如果你用web3j异步发送多个交易,则这会导致多个线程同时轮询客户端。

为了减少这种轮询开销,web3j提供可配置的交易收据处理器TransactionReceiptProcessors

在web3j中提供了多个处理器:

  • PollingTransactionReceiptProcessor轮询交易收据处理器是web3j中使用的默认处理器,它定期为每个未决交易的交易收据进行轮询。
  • QueuingTransactionReceiptProcessor排队交易收据处理器具有所有挂起的交易的内部队列。它包含一个定期运行以查询交易收据是否可用的worker。如果找到了收据,则调用客户端的回调。
  • NoOpProcessor向客户端只提供交易hash,提供了一个EmptyTransactionReceipt。这是为不希望web3j对交易收据进行任何轮询的客户端使用的。

注意:在排队交易收据处理器的初始响应中也提供了EmptyTransactionReceipt。这允许调用方对提交到网络的交易拥有交易哈希。

如果你不希望使用默认处理器PollingTransactionReceiptProcessor,则可以指定交易收据处理器代码如下:

TransactionReceiptProcessor transactionReceiptProcessor =
        new QueuingTransactionReceiptProcessor(web3j, new Callback() {
                 @Override
                 public void accept(TransactionReceipt transactionReceipt) {
                     // process transactionReceipt
                 }

                 @Override
                 public void exception(Exception exception) {
                     // handle exception
                 }
TransactionManager transactionManager = new RawTransactionManager(
        web3j, credentials, ChainId.MAIN_NET, transactionReceiptProcessor);

如果你需要进一步的信息,FastRawTransactionManagerIT演示轮询和排队方法。