cc.youchain.tx.response.PollingTransactionReceiptProcessor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of core Show documentation
Show all versions of core Show documentation
YOUChain Common library in JAVA.
package cc.youchain.tx.response;
import java.io.IOException;
import java.util.Optional;
import cc.youchain.protocol.YOUChain;
import cc.youchain.protocol.core.methods.response.TransactionReceipt;
import cc.youchain.protocol.exceptions.TransactionException;
/**
* With each provided transaction hash, poll until we obtain a transaction receipt.
*/
public class PollingTransactionReceiptProcessor extends TransactionReceiptProcessor {
private final long sleepDuration;
private final int attempts;
public PollingTransactionReceiptProcessor(YOUChain youChain, long sleepDuration, int attempts) {
super(youChain);
this.sleepDuration = sleepDuration;
this.attempts = attempts;
}
@Override
public TransactionReceipt waitForTransactionReceipt(
String transactionHash)
throws IOException, TransactionException {
return getTransactionReceipt(transactionHash, sleepDuration, attempts);
}
private TransactionReceipt getTransactionReceipt(
String transactionHash, long sleepDuration, int attempts)
throws IOException, TransactionException {
Optional receiptOptional =
sendTransactionReceiptRequest(transactionHash);
for (int i = 0; i < attempts; i++) {
if (!receiptOptional.isPresent()) {
try {
Thread.sleep(sleepDuration);
} catch (InterruptedException e) {
throw new TransactionException(e);
}
receiptOptional = sendTransactionReceiptRequest(transactionHash);
} else {
return receiptOptional.get();
}
}
throw new TransactionException("Transaction receipt was not generated after "
+ ((sleepDuration * attempts) / 1000
+ " seconds for transaction: " + transactionHash), transactionHash);
}
}