Solidity

為什麼 Web3j 每 15 秒監聽一次事件?

  • June 26, 2022

我在我的 Java 應用程序中使用 web3j。在智能合約中,定義了一個事件。

event sendEvent(string name);

我在我的應用程序中訂閱了該事件。

contract.sendEventEventFlowable(filter)
       .subscribe(doc -> {           
           System.out.println(doc.name);
       }, throwable -> {
           throwable.printStackTrace();
       }, () -> {
           System.out.println("End of research");
       });

它有效,但我注意到 Web3j 每 15 秒監聽一次區塊鏈。

這不適合我的應用程序,我需要一直傾聽區塊鏈內部發生的事情。

如何更改預設值(15 秒)?

這是我的程式碼

WebSocketService ws = new WebSocketService("ws://localhost:8545", true);
       ws.connect();
       web3 = Web3j.build(ws);

在乙太坊主網上,每 15 秒生成一個區塊。這就是為什麼 15 是事件的預設值。但是您可以使用此建構方法來更改它:

   /**
    * Construct a new Web3j instance.
    *
    * @param web3jService web3j service instance - i.e. HTTP or IPC
    * @param pollingInterval polling interval for responses from network nodes
    * @param scheduledExecutorService executor service to use for scheduled tasks. <strong>You are
    *     responsible for terminating this thread pool</strong>
    * @return new Web3j instance
    */
   static Web3j build(
           Web3jService web3jService,
           long pollingInterval,
           ScheduledExecutorService scheduledExecutorService) {
       return new JsonRpc2_0Web3j(web3jService, pollingInterval, scheduledExecutorService);
   }

我在這個關於慢事件 的問題中發現了這一點https://github.com/web3j/web3j/issues/233以及引用此方法的答案和連結 https://github.com/web3j/web3j/blob/master/core /src/main/java/org/web3j/protocol/Web3j.java#L17

引用自:https://ethereum.stackexchange.com/questions/130774