diff --git a/core/src/main/java/bisq/core/trade/TradeModule.java b/core/src/main/java/bisq/core/trade/TradeModule.java index 422ec13a83..779cf6e760 100644 --- a/core/src/main/java/bisq/core/trade/TradeModule.java +++ b/core/src/main/java/bisq/core/trade/TradeModule.java @@ -26,8 +26,6 @@ import bisq.core.trade.failed.FailedTradesManager; import bisq.core.trade.statistics.ReferralIdService; import bisq.core.trade.statistics.TradeStatistics2StorageService; import bisq.core.trade.statistics.TradeStatisticsManager; -import bisq.core.trade.txproof.AssetTxProofHttpClient; -import bisq.core.trade.txproof.xmr.XmrTxProofHttpClient; import bisq.common.app.AppModule; import bisq.common.config.Config; @@ -58,8 +56,6 @@ public class TradeModule extends AppModule { bind(SignedWitnessStorageService.class).in(Singleton.class); bind(ReferralIdService.class).in(Singleton.class); - bind(AssetTxProofHttpClient.class).to(XmrTxProofHttpClient.class); - bindConstant().annotatedWith(named(DUMP_STATISTICS)).to(config.dumpStatistics); bindConstant().annotatedWith(named(DUMP_DELAYED_PAYOUT_TXS)).to(config.dumpDelayedPayoutTxs); bindConstant().annotatedWith(named(ALLOW_FAULTY_DELAYED_TXS)).to(config.allowFaultyDelayedTxs); diff --git a/core/src/main/java/bisq/core/trade/txproof/xmr/DevTestXmrTxProofHttpClient.java b/core/src/main/java/bisq/core/trade/txproof/xmr/DevTestXmrTxProofHttpClient.java deleted file mode 100644 index b415d354c4..0000000000 --- a/core/src/main/java/bisq/core/trade/txproof/xmr/DevTestXmrTxProofHttpClient.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.core.trade.txproof.xmr; - -import bisq.core.trade.txproof.AssetTxProofHttpClient; - -import bisq.network.Socks5ProxyProvider; -import bisq.network.http.HttpClientImpl; - -import bisq.common.app.DevEnv; - -import javax.inject.Inject; - -import java.util.Date; - -import lombok.extern.slf4j.Slf4j; - -import javax.annotation.Nullable; - -import static bisq.core.trade.txproof.xmr.XmrTxProofParser.MAX_DATE_TOLERANCE; - -/** - * This should help to test error scenarios in dev testing the app. This is additional to unit test which test the - * correct data but do not test the context of the results and how it behaves in the UI. - * - * You have to change the binding in TradeModule to - * bind(AssetTxProofHttpClient.class).to(DevTestXmrTxProofHttpClient.class); to use that class. - * - * This class can be removed once done testing, but as multiple devs are testing its useful to share it for now. - */ -@Slf4j -public class DevTestXmrTxProofHttpClient extends HttpClientImpl implements AssetTxProofHttpClient { - enum ApiInvalidDetails { - EMPTY_JSON, - MISSING_DATA, - MISSING_STATUS, - UNHANDLED_STATUS, - MISSING_ADDRESS, - MISSING_TX_ID, - MISSING_VIEW_KEY, - MISSING_TS, - MISSING_CONF, - EXCEPTION - } - - @Inject - public DevTestXmrTxProofHttpClient(@Nullable Socks5ProxyProvider socks5ProxyProvider) { - super(socks5ProxyProvider); - } - - private static int counter; - - @Override - public String requestWithGET(String param, - @Nullable String headerKey, - @Nullable String headerValue) { - - XmrTxProofRequest.Result result = XmrTxProofRequest.Result.PENDING; - XmrTxProofRequest.Detail detail = XmrTxProofRequest.Detail.TX_NOT_FOUND; - ApiInvalidDetails apiInvalidDetails = ApiInvalidDetails.EXCEPTION; - - int delay = counter == 0 ? 2000 : 100; - try { - Thread.sleep(delay); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - if (counter >= 2) { - detail = XmrTxProofRequest.Detail.PENDING_CONFIRMATIONS.numConfirmations(counter - 2); - } - counter++; - switch (result) { - case PENDING: - switch (detail) { - case TX_NOT_FOUND: - return validJson().replace("success", - "fail"); - case PENDING_CONFIRMATIONS: - return validJson().replace("201287", - String.valueOf(detail.getNumConfirmations())); - default: - return null; - } - case SUCCESS: - return validJson(); - case FAILED: - switch (detail) { - case TX_HASH_INVALID: - return validJson().replace("5e665addf6d7c6300670e8a89564ed12b5c1a21c336408e2835668f9a6a0d802", - "-"); - case TX_KEY_INVALID: - return validJson().replace("f3ce66c9d395e5e460c8802b2c3c1fff04e508434f9738ee35558aac4678c906", - "-"); - case ADDRESS_INVALID: - return validJson().replace("590f7263428051068bb45cdfcf93407c15b6e291d20c92d0251fcfbf53cc745cdf53319f7d6d7a8e21ea39041aabf31d220a32a875e3ca2087a777f1201c0571", - "-"); - case NO_MATCH_FOUND: - return validJson().replace("match\": true", - "match\": false"); - case AMOUNT_NOT_MATCHING: - return validJson().replace("8902597360000", - "18902597360000"); - case TRADE_DATE_NOT_MATCHING: - DevEnv.setDevMode(false); - long date = (new Date(1574922644 * 1000L).getTime() - (MAX_DATE_TOLERANCE * 1000L + 1)) / 1000; - return validJson().replace("1574922644", - String.valueOf(date)); - default: - return null; - } - case ERROR: - switch (detail) { - case CONNECTION_FAILURE: - // Not part of parser level testing - return null; - case API_INVALID: - switch (apiInvalidDetails) { - case EMPTY_JSON: - return null; - case MISSING_DATA: - return validJson().replace("data", - "missing"); - case MISSING_STATUS: - return validJson().replace("status", - "missing"); - case UNHANDLED_STATUS: - return validJson().replace("success", - "missing"); - case MISSING_ADDRESS: - return validJson().replace("address", - "missing"); - case MISSING_TX_ID: - return validJson().replace("tx_hash", - "missing"); - case MISSING_VIEW_KEY: - return validJson().replace("viewkey", - "missing"); - case MISSING_TS: - return validJson().replace("tx_timestamp", - "missing"); - case MISSING_CONF: - return validJson().replace("tx_confirmations", - "missing"); - case EXCEPTION: - return validJson().replace("} ", - ""); - default: - return null; - } - - case NO_RESULTS_TIMEOUT: - // Not part of parser level testing - return null; - default: - return null; - } - default: - return null; - } - } - - private String validJson() { - return "{\n" + - " \"data\": {\n" + - " \"address\": \"590f7263428051068bb45cdfcf93407c15b6e291d20c92d0251fcfbf53cc745cdf53319f7d6d7a8e21ea39041aabf31d220a32a875e3ca2087a777f1201c0571\",\n" + - " \"outputs\": [\n" + - " {\n" + - " \"amount\": 8902597360000,\n" + - " \"match\": true,\n" + - " \"output_idx\": 0,\n" + - " \"output_pubkey\": \"2b6d2296f2591c198cd1aa47de9a5d74270963412ed30bbcc63b8eff29f0d43e\"\n" + - " },\n" + - " {\n" + - " \"amount\": 0,\n" + - " \"match\": false,\n" + - " \"output_idx\": 1,\n" + - " \"output_pubkey\": \"f53271624847507d80b746e91e689e88bc41678d55246275f5ad3c0f7e8a9ced\"\n" + - " }\n" + - " ],\n" + - " \"tx_confirmations\": 201287,\n" + - " \"tx_hash\": \"5e665addf6d7c6300670e8a89564ed12b5c1a21c336408e2835668f9a6a0d802\",\n" + - " \"tx_prove\": true,\n" + - " \"tx_timestamp\": 1574922644,\n" + - " \"viewkey\": \"f3ce66c9d395e5e460c8802b2c3c1fff04e508434f9738ee35558aac4678c906\"\n" + - " },\n" + - " \"status\": \"success\"\n" + - "} "; - } - -} diff --git a/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofHttpClient.java b/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofHttpClient.java index dce8747383..ac0a4148de 100644 --- a/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofHttpClient.java +++ b/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofHttpClient.java @@ -22,14 +22,11 @@ import bisq.core.trade.txproof.AssetTxProofHttpClient; import bisq.network.Socks5ProxyProvider; import bisq.network.http.HttpClientImpl; -import javax.inject.Inject; - import lombok.extern.slf4j.Slf4j; @Slf4j -public class XmrTxProofHttpClient extends HttpClientImpl implements AssetTxProofHttpClient { - @Inject - public XmrTxProofHttpClient(Socks5ProxyProvider socks5ProxyProvider) { +class XmrTxProofHttpClient extends HttpClientImpl implements AssetTxProofHttpClient { + XmrTxProofHttpClient(Socks5ProxyProvider socks5ProxyProvider) { super(socks5ProxyProvider); } } diff --git a/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofRequest.java b/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofRequest.java index 9381897e9a..325538acb6 100644 --- a/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofRequest.java +++ b/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofRequest.java @@ -21,6 +21,8 @@ import bisq.core.trade.txproof.AssetTxProofHttpClient; import bisq.core.trade.txproof.AssetTxProofParser; import bisq.core.trade.txproof.AssetTxProofRequest; +import bisq.network.Socks5ProxyProvider; + import bisq.common.UserThread; import bisq.common.app.Version; import bisq.common.handlers.FaultHandler; @@ -140,9 +142,9 @@ class XmrTxProofRequest implements AssetTxProofRequest private final ListeningExecutorService executorService = Utilities.getListeningExecutorService( "XmrTransferProofRequester", 3, 5, 10 * 60); - private final AssetTxProofHttpClient httpClient; private final AssetTxProofParser parser; private final XmrTxProofModel model; + private final AssetTxProofHttpClient httpClient; private final long firstRequest; private boolean terminated; @@ -155,12 +157,12 @@ class XmrTxProofRequest implements AssetTxProofRequest // Constructor /////////////////////////////////////////////////////////////////////////////////////////// - XmrTxProofRequest(AssetTxProofHttpClient httpClient, + XmrTxProofRequest(Socks5ProxyProvider socks5ProxyProvider, XmrTxProofModel model) { - this.httpClient = httpClient; this.parser = new XmrTxProofParser(); this.model = model; + httpClient = new XmrTxProofHttpClient(socks5ProxyProvider); httpClient.setBaseUrl("http://" + model.getServiceAddress()); if (model.getServiceAddress().matches("^192.*|^localhost.*")) { log.info("Ignoring Socks5 proxy for local net address: {}", model.getServiceAddress()); diff --git a/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofRequestsPerTrade.java b/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofRequestsPerTrade.java index 634f6b8ae7..73690c6bd5 100644 --- a/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofRequestsPerTrade.java +++ b/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofRequestsPerTrade.java @@ -22,11 +22,12 @@ import bisq.core.support.dispute.Dispute; import bisq.core.support.dispute.mediation.MediationManager; import bisq.core.support.dispute.refund.RefundManager; import bisq.core.trade.Trade; -import bisq.core.trade.txproof.AssetTxProofHttpClient; import bisq.core.trade.txproof.AssetTxProofRequestsPerTrade; import bisq.core.trade.txproof.AssetTxProofResult; import bisq.core.user.AutoConfirmSettings; +import bisq.network.Socks5ProxyProvider; + import bisq.common.handlers.FaultHandler; import org.bitcoinj.core.Coin; @@ -54,7 +55,7 @@ class XmrTxProofRequestsPerTrade implements AssetTxProofRequestsPerTrade { private final AutoConfirmSettings autoConfirmSettings; private final MediationManager mediationManager; private final RefundManager refundManager; - private final AssetTxProofHttpClient httpClient; + private final Socks5ProxyProvider socks5ProxyProvider; private int numRequiredSuccessResults; private final Set requests = new HashSet<>(); @@ -69,12 +70,12 @@ class XmrTxProofRequestsPerTrade implements AssetTxProofRequestsPerTrade { // Constructor /////////////////////////////////////////////////////////////////////////////////////////// - XmrTxProofRequestsPerTrade(AssetTxProofHttpClient httpClient, + XmrTxProofRequestsPerTrade(Socks5ProxyProvider socks5ProxyProvider, Trade trade, AutoConfirmSettings autoConfirmSettings, MediationManager mediationManager, RefundManager refundManager) { - this.httpClient = httpClient; + this.socks5ProxyProvider = socks5ProxyProvider; this.trade = trade; this.autoConfirmSettings = autoConfirmSettings; this.mediationManager = mediationManager; @@ -140,7 +141,7 @@ class XmrTxProofRequestsPerTrade implements AssetTxProofRequestsPerTrade { for (String serviceAddress : serviceAddresses) { XmrTxProofModel model = new XmrTxProofModel(trade, serviceAddress, autoConfirmSettings); - XmrTxProofRequest request = new XmrTxProofRequest(httpClient, model); + XmrTxProofRequest request = new XmrTxProofRequest(socks5ProxyProvider, model); log.info("{} created", request); requests.add(request); diff --git a/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofService.java b/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofService.java index 4c939f3972..c3ec7de284 100644 --- a/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofService.java +++ b/core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofService.java @@ -27,12 +27,12 @@ import bisq.core.trade.Trade; import bisq.core.trade.TradeManager; import bisq.core.trade.closed.ClosedTradableManager; import bisq.core.trade.failed.FailedTradesManager; -import bisq.core.trade.txproof.AssetTxProofHttpClient; import bisq.core.trade.txproof.AssetTxProofResult; import bisq.core.trade.txproof.AssetTxProofService; import bisq.core.user.AutoConfirmSettings; import bisq.core.user.Preferences; +import bisq.network.Socks5ProxyProvider; import bisq.network.p2p.BootstrapListener; import bisq.network.p2p.P2PService; @@ -76,7 +76,7 @@ public class XmrTxProofService implements AssetTxProofService { private final RefundManager refundManager; private final P2PService p2PService; private final WalletsSetup walletsSetup; - private final AssetTxProofHttpClient httpClient; + private final Socks5ProxyProvider socks5ProxyProvider; private final Map servicesByTradeId = new HashMap<>(); private AutoConfirmSettings autoConfirmSettings; private Map> tradeStateListenerMap = new HashMap<>(); @@ -101,7 +101,7 @@ public class XmrTxProofService implements AssetTxProofService { RefundManager refundManager, P2PService p2PService, WalletsSetup walletsSetup, - AssetTxProofHttpClient httpClient) { + Socks5ProxyProvider socks5ProxyProvider) { this.filterManager = filterManager; this.preferences = preferences; this.tradeManager = tradeManager; @@ -111,7 +111,7 @@ public class XmrTxProofService implements AssetTxProofService { this.refundManager = refundManager; this.p2PService = p2PService; this.walletsSetup = walletsSetup; - this.httpClient = httpClient; + this.socks5ProxyProvider = socks5ProxyProvider; } @@ -247,7 +247,7 @@ public class XmrTxProofService implements AssetTxProofService { } private void startRequests(SellerTrade trade) { - XmrTxProofRequestsPerTrade service = new XmrTxProofRequestsPerTrade(httpClient, + XmrTxProofRequestsPerTrade service = new XmrTxProofRequestsPerTrade(socks5ProxyProvider, trade, autoConfirmSettings, mediationManager,