2

我一直在尝试观察主网上发生的特定合约的交易,特别是 Tether (USDT)。我能够下载合同并使用 Web3 (Java) 编译可靠代码。但是我无法订阅传输事件。它只是超时..有什么我想念的吗?我正在使用下面的代码,但超时。

我看不出这不起作用的原因,我通过 wss://mainnet.infura.io/ws/v3/<my_identifier_here> 通过 Infura 连接

  TetherToken tetherToken = TetherToken.load(
     "0xdac17f958d2ee523a2206206994597c13d831ec7",
     session.getWeb3(),
     session.getCredentials(),
     session.getGasProvider());

  String symbol = tetherToken.symbol().send();
  String name = tetherToken.name().send();
  BigInteger decimal = tetherToken.decimals().send();

  System.out.println("symbol: " + symbol); // success = USDT
  System.out.println("name: " + name); // success = Tether USD
  System.out.println("decimal: " + decimal.intValueExact()); // success = 6

  // java.io.IOException: Request with id 5 timed out
  tetherToken.transferEventFlowable(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST)
     .subscribe(event -> {
           try {
              System.err.printf("hash=%s from=%s to=%s amount=%s%n",
                 event.log.getTransactionHash(),
                 event.from,
                 event.to,
                 event.value);
           }catch(Throwable e) {
              e.printStackTrace();
           }
        });

任何帮助将不胜感激。

4

1 回答 1

2

原来 Web3j 框架隐藏了 Infura 响应的问题。如果 eth 日志过滤器的结果 > 10000 个结果,则 Infura 会响应:

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32005,
    "message": "query returned more than 10000 results"
  }
}
于 2020-06-04T21:11:00.617 回答