I am using web3j library with an Infura Websocket connection. I set up a subscribe method where I listen to transfer events of my custom ERC20 Token. When a transfer event occurs on the blockchain I get the information in the subscribe body and send it to my eventListener. In my eventListener I try to fetch the details of the Token from the Blockchain (over the same Infura websocket connection)
Publisher.java
web3j.logsNotifications(List.of(customToken.getContractAddress()), List.of(EventEncoder.encode(CustomToken.TRANSFER_EVENT)))
.subscribe(logNotification -> {
Log transferEventLog = logNotification.getParams().getResult();
publisher.publishEvent(transferEventLog);
}, throwable -> {
logger.error("Error in subscription", throwable);
}, () -> {
logger.info("Complete transfer event subscription");
});
Listener.java
public void transferEventListener(Log transferEvent) {
// code to parse log -> to get id of token
Tuple2<String, BigInteger> response= customToken._tokens(id).send();
// Further code to handle response
}
The call in my listener always fails with Exception: Request with id # timed out
and then my Websocket connection gets closed.
If I make the same request to tokens which are minted in the past, everything works as expected!
Is it generally possible to fetch a custom token from Infura directly after they are mined? What I am doing wrong here?