首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >web3J与infura的兼容性

web3J与infura的兼容性
EN

Stack Overflow用户
提问于 2019-09-08 00:46:38
回答 1查看 770关注 0票数 0

可以使用web3J监听infura事件吗?我正在尝试获取事件,但获取错误

代码语言:javascript
复制
Caused by: org.web3j.protocol.core.filters.FilterException: Invalid request: The method eth_newFilter does not exist/is not available
    at org.web3j.protocol.core.filters.Filter.throwException(Filter.java:172)
    at org.web3j.protocol.core.filters.Filter.run(Filter.java:53)
    at org.web3j.protocol.rx.JsonRpc2_0Rx.run(JsonRpc2_0Rx.java:73)
    at org.web3j.protocol.rx.JsonRpc2_0Rx.lambda$ethLogFlowable$2(JsonRpc2_0Rx.java:65)
    at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:71)
    ... 9 more```

# This is java wrappeer function generated by web3j maven plugin
代码语言:javascript
复制
public Flowable<PunkOfferedEventResponse>         punkOfferedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(PUNKOFFERED_EVENT));
        return punkOfferedEventFlowable(filter);
    }


  public static class PunkOfferedEventResponse {
        public Log log;

        public BigInteger punkIndex;

        public String toAddress;

        public BigInteger minValue;
    } 
代码语言:javascript
复制
# This is the caller which subscribe to punkOfferedEventFlowable andd it should iddeally return events in stream fashion 

Web3j web3j = Web3j.build(new HttpService(""));
Web3ClientVersion web3ClientVersion = web3j.web3ClientVersion().send();
Credentials credentials = Credentials.create("");
            CryptoPunksMarket contract = CryptoPunksMarket.load("",web3j,credentials,new DefaultGasProvider()); contract.punkOfferedEventFlowable(null)
                 .doOnError(error -> error.printStackTrace())
                 .subscribe(event -> {
                     BigInteger index = event.punkIndex;
                     System.out.println("Index:"+index);
                 }).dispose();   

我在不同的博客上读到,使用web3J不可能获得过滤的事件,那么使用web3J和infura获得过滤的事件有哪些替代方案呢?

EN

回答 1

Stack Overflow用户

发布于 2019-12-28 19:52:31

您必须从日志中读取事件。Web3j提供了一个ethGetLogs方法,该方法将ethFilter对象作为参数,并响应一系列事件日志。

对于您的请求,应该是这样的:

代码语言:javascript
复制
EthFilter ethFilter = new EthFilter(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST, contract.getContractAddress());

ethFilter.addSingleTopic(EventEncoder.encode(CryptoPunksMarket.PUNK_OFFERED_EVENT));

EthLog ethLog = web3j.ethGetLogs(ethFilter).send();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57835680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档