微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Web3j:从智能合约中获取过去的事件

如何解决Web3j:从智能合约中获取过去的事件

我正在使用 org.web3j (4.8.4)Java 11。我在 Kovan 网络上部署了一个智能合约。我想订阅调用 subscribe(...) 后发出的所有新事件。我对之前发出的事件不感兴趣。这是我当前的代码

public void subscribetoEvents() throws Exception {
    String wssUrl = "wss://kovan.infura.io/ws/v3/TOKEN";
    String contractAddress = "0x123...";
    
    // initialize web socket service
    WebSocketService wss = new WebSocketService(wssUrl,false);
    try {
        wss.connect();
    } catch (Exception e) {
        System.out.println("Error while connecting to WSS service: " + e);
        throw e;
    }

    // build web3j client
    Web3j web3j = Web3j.build(wss);

    // create filter for contract events
    EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST,DefaultBlockParameterName.LATEST,contractAddress);

    // subscribe to events
    web3j.ethLogFlowable(filter).subscribe(event -> {
        System.out.println("Event received");
        System.out.println(event);
    },error -> {
        System.out.println("Error: " + error);
    });
}

但是,当我运行此代码时,它还会打印几天前发生的旧事件。如何更改代码,使其仅打印在调用 subscribe(...) 后智能合约发出的 new 事件?

解决方法

更换

EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST,DefaultBlockParameterName.LATEST,contractAddress);

EthFilter filter = new EthFilter(DefaultBlockParameterName.LATEST,contractAddress);

为我做了这项工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?