package io.goodforgod.api.etherscan; import io.goodforgod.api.etherscan.error.EtherScanException; import io.goodforgod.api.etherscan.http.EthHttpClient; import io.goodforgod.api.etherscan.manager.RequestQueueManager; import io.goodforgod.api.etherscan.model.Status; import io.goodforgod.api.etherscan.model.response.ReceiptStatusResponseTO; import io.goodforgod.api.etherscan.model.response.StatusResponseTO; import io.goodforgod.api.etherscan.util.BasicUtils; import java.util.Optional; import org.jetbrains.annotations.NotNull; /** * Transaction API Implementation * * @author GoodforGod * @see TransactionAPI * @since 28.10.2018 */ final class TransactionAPIProvider extends BasicProvider implements TransactionAPI { private static final String ACT_EXEC_STATUS_PARAM = ACT_PREFIX + "getstatus"; private static final String ACT_RECEIPT_STATUS_PARAM = ACT_PREFIX + "gettxreceiptstatus"; private static final String TXHASH_PARAM = "&txhash="; TransactionAPIProvider(RequestQueueManager queue, String baseUrl, EthHttpClient executor, Converter converter, int retryCount) { super(queue, "transaction", baseUrl, executor, converter, retryCount); } @NotNull @Override public Optional<Status> statusExec(@NotNull String txhash) throws EtherScanException { BasicUtils.validateTxHash(txhash); final String urlParams = ACT_EXEC_STATUS_PARAM + TXHASH_PARAM + txhash; final StatusResponseTO response = getRequest(urlParams, StatusResponseTO.class); BasicUtils.validateTxResponse(response); return Optional.ofNullable(response.getResult()); } @NotNull @Override public Optional<Boolean> statusReceipt(@NotNull String txhash) throws EtherScanException { BasicUtils.validateTxHash(txhash); final String urlParams = ACT_RECEIPT_STATUS_PARAM + TXHASH_PARAM + txhash; final ReceiptStatusResponseTO response = getRequest(urlParams, ReceiptStatusResponseTO.class); BasicUtils.validateTxResponse(response); return (response.getResult() == null || BasicUtils.isEmpty(response.getResult().getStatus())) ? Optional.empty() : Optional.of(response.getResult().getStatus().contains("1")); } }