From 31c2d62255a96654c488ebcfe869ae5834084f03 Mon Sep 17 00:00:00 2001 From: chimp1984 Date: Tue, 23 Nov 2021 15:13:55 +0100 Subject: [PATCH] Enforce inclusion of TradeLimits for headless apps PaymentMethod use an instance of TradeLimits and expect that it has been injected, which is the case for desktop but not for headless apps, so we enforce injection in the app base classes used for headless apps. The validation of trade statistics use a method in PaymentMethod where that dependency is required. Tha hack how the PaymentMethod use TradeLimits is not nice, but would require more effort for refactoring. --- core/src/main/java/bisq/core/app/BisqHeadlessAppMain.java | 6 ++++++ .../java/bisq/core/app/misc/ExecutableForAppWithP2p.java | 8 ++++++++ daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java | 2 ++ seednode/src/main/java/bisq/seednode/SeedNodeMain.java | 2 ++ .../src/main/java/bisq/statistics/StatisticsMain.java | 2 ++ 5 files changed, 20 insertions(+) diff --git a/core/src/main/java/bisq/core/app/BisqHeadlessAppMain.java b/core/src/main/java/bisq/core/app/BisqHeadlessAppMain.java index 6a867d875b9..4a1de618326 100644 --- a/core/src/main/java/bisq/core/app/BisqHeadlessAppMain.java +++ b/core/src/main/java/bisq/core/app/BisqHeadlessAppMain.java @@ -17,6 +17,8 @@ package bisq.core.app; +import bisq.core.payment.TradeLimits; + import bisq.common.UserThread; import bisq.common.app.AppModule; import bisq.common.app.Version; @@ -31,6 +33,7 @@ @Slf4j public class BisqHeadlessAppMain extends BisqExecutable { protected HeadlessApp headlessApp; + private TradeLimits tradeLimits; public BisqHeadlessAppMain() { super("Bisq Daemon", "bisqd", "Bisq", Version.VERSION); @@ -108,6 +111,9 @@ protected void applyInjector() { @Override protected void startApplication() { + // Pin that as it is used in PaymentMethods and verification in TradeStatistics + tradeLimits = injector.getInstance(TradeLimits.class); + // We need to be in user thread! We mapped at launchApplication already... headlessApp.startApplication(); diff --git a/core/src/main/java/bisq/core/app/misc/ExecutableForAppWithP2p.java b/core/src/main/java/bisq/core/app/misc/ExecutableForAppWithP2p.java index ec9bfd65b27..3552a465340 100644 --- a/core/src/main/java/bisq/core/app/misc/ExecutableForAppWithP2p.java +++ b/core/src/main/java/bisq/core/app/misc/ExecutableForAppWithP2p.java @@ -25,6 +25,7 @@ import bisq.core.dao.node.full.RpcService; import bisq.core.offer.OpenOfferManager; import bisq.core.offer.bsq_swap.OpenBsqSwapOfferService; +import bisq.core.payment.TradeLimits; import bisq.core.support.dispute.arbitration.arbitrator.ArbitratorManager; import bisq.network.p2p.NodeAddress; @@ -62,6 +63,7 @@ public abstract class ExecutableForAppWithP2p extends BisqExecutable { private static final long SHUTDOWN_INTERVAL = TimeUnit.HOURS.toMillis(24); private volatile boolean stopped; private final long startTime = System.currentTimeMillis(); + private TradeLimits tradeLimits; public ExecutableForAppWithP2p(String fullName, String scriptName, String appName, String version) { super(fullName, scriptName, appName, version); @@ -76,6 +78,12 @@ protected void configUserThread() { UserThread.setExecutor(Executors.newSingleThreadExecutor(threadFactory)); } + @Override + protected void startApplication() { + // Pin that as it is used in PaymentMethods and verification in TradeStatistics + tradeLimits = injector.getInstance(TradeLimits.class); + } + @Override public void onSetupComplete() { log.info("onSetupComplete"); diff --git a/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java b/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java index a3bd88e1a03..d60a5ea4bae 100644 --- a/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java +++ b/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java @@ -90,6 +90,8 @@ protected void applyInjector() { @Override protected void startApplication() { + super.startApplication(); + // We need to be in user thread! We mapped at launchApplication already... headlessApp.startApplication(); diff --git a/seednode/src/main/java/bisq/seednode/SeedNodeMain.java b/seednode/src/main/java/bisq/seednode/SeedNodeMain.java index 9841b88ca63..a469350be26 100644 --- a/seednode/src/main/java/bisq/seednode/SeedNodeMain.java +++ b/seednode/src/main/java/bisq/seednode/SeedNodeMain.java @@ -137,6 +137,8 @@ private int getMyIndex() { @Override protected void startApplication() { + super.startApplication(); + Cookie cookie = injector.getInstance(User.class).getCookie(); cookie.getAsOptionalBoolean(CookieKey.CLEAN_TOR_DIR_AT_RESTART).ifPresent(wasCleanTorDirSet -> { if (wasCleanTorDirSet) { diff --git a/statsnode/src/main/java/bisq/statistics/StatisticsMain.java b/statsnode/src/main/java/bisq/statistics/StatisticsMain.java index a57ff64afb8..f271b076c4b 100644 --- a/statsnode/src/main/java/bisq/statistics/StatisticsMain.java +++ b/statsnode/src/main/java/bisq/statistics/StatisticsMain.java @@ -88,6 +88,8 @@ protected void applyInjector() { @Override protected void startApplication() { + super.startApplication(); + statistics.startApplication(); } }