【问题标题】:Subscribe for ERC20 transfer events订阅 ERC20 转账活动
【发布时间】:2020-09-23 20:04:31
【问题描述】:

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

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

  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();
           }
        });

任何帮助将不胜感激。

【问题讨论】:

    标签: java ethereum erc20 web3-java


    【解决方案1】:

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

    {
      "jsonrpc": "2.0",
      "id": 1,
      "error": {
        "code": -32005,
        "message": "query returned more than 10000 results"
      }
    }
    

    【讨论】:

    • 您的问题和回答让我走上了正轨。我想知道为什么我的连接超时,原来是这样。如果您想首先监听流经的事件,那么使用 DefaultBlockParameterName.EARLIEST 并不是一个好主意。非常感谢。如果我可能会问,您在哪里找到有关如何将下载的 JSON 编译成 ABI 的信息?
    猜你喜欢
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2023-01-09
    相关资源
    最近更新 更多