javaethereumweb3-java

web3j replaying all contracts events



Question regarding Web3j library. How can I replay all the logs from the blockchain using web3j ? I know there is a method to replay all the logs from a particular contract:

EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST,
        DefaultBlockParameterName.LATEST, "0xafc785653c...")

web3j.ethLogObservable(filter).subscribe(
    event => {
      println(event.toString)
    }
  )

And it works fine, however when filter is created without parameters -new EthFilter(), it doesn't capture any logs at all.
What if I have 1000 contracts to listen to events from ? What is the best way to go about this ?


Solution

  • public EthFilter(DefaultBlockParameter fromBlock, DefaultBlockParameter toBlock,
                     List<String> address) {
        super();
        this.fromBlock = fromBlock;
        this.toBlock = toBlock;
        this.address = address;
    }
    

    As of Web3J version 3.6.0, you can pass a list of contract addresses to hear events from.

    Although creating a list of 1000 contracts addresses manually is troublesome, you can maintain a file or db table from which you can fetch the contract addresses. I hope this answer helps.