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 99d5f670d36..4c939f3972d 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 @@ -82,6 +82,8 @@ public class XmrTxProofService implements AssetTxProofService { private Map> tradeStateListenerMap = new HashMap<>(); private ChangeListener btcPeersListener, btcBlockListener; private BootstrapListener bootstrapListener; + private MonadicBinding p2pNetworkAndWalletReady; + private ChangeListener p2pNetworkAndWalletReadyListener; /////////////////////////////////////////////////////////////////////////////////////////// @@ -122,18 +124,26 @@ public void onAllServicesInitialized() { // As we might trigger the payout tx we want to be sure that we are well connected to the Bitcoin network. // onAllServicesInitialized is called once we have received the initial data but we want to have our // hidden service published and upDatedDataResponse received before we start. - MonadicBinding p2pNetworkAndWalletReady = EasyBind.combine(isP2pBootstrapped(), hasSufficientBtcPeers(), isBtcBlockDownloadComplete(), - (isP2pBootstrapped, hasSufficientBtcPeers, isBtcBlockDownloadComplete) -> { - log.info("isP2pBootstrapped={}, hasSufficientBtcPeers={} isBtcBlockDownloadComplete={}", - isP2pBootstrapped, hasSufficientBtcPeers, isBtcBlockDownloadComplete); - return isP2pBootstrapped && hasSufficientBtcPeers && isBtcBlockDownloadComplete; - }); - - p2pNetworkAndWalletReady.subscribe((observable, oldValue, newValue) -> { - if (newValue) { - onP2pNetworkAndWalletReady(); - } - }); + BooleanProperty isP2pBootstrapped = isP2pBootstrapped(); + BooleanProperty hasSufficientBtcPeers = hasSufficientBtcPeers(); + BooleanProperty isBtcBlockDownloadComplete = isBtcBlockDownloadComplete(); + if (isP2pBootstrapped.get() && hasSufficientBtcPeers.get() && isBtcBlockDownloadComplete.get()) { + onP2pNetworkAndWalletReady(); + } else { + p2pNetworkAndWalletReady = EasyBind.combine(isP2pBootstrapped, hasSufficientBtcPeers, isBtcBlockDownloadComplete, + (bootstrapped, sufficientPeers, downloadComplete) -> { + log.info("isP2pBootstrapped={}, hasSufficientBtcPeers={} isBtcBlockDownloadComplete={}", + bootstrapped, sufficientPeers, downloadComplete); + return bootstrapped && sufficientPeers && downloadComplete; + }); + + p2pNetworkAndWalletReadyListener = (observable, oldValue, newValue) -> { + if (newValue) { + onP2pNetworkAndWalletReady(); + } + }; + p2pNetworkAndWalletReady.subscribe(p2pNetworkAndWalletReadyListener); + } } @Override @@ -148,6 +158,12 @@ public void shutDown() { /////////////////////////////////////////////////////////////////////////////////////////// private void onP2pNetworkAndWalletReady() { + if (p2pNetworkAndWalletReady != null) { + p2pNetworkAndWalletReady.removeListener(p2pNetworkAndWalletReadyListener); + p2pNetworkAndWalletReady = null; + p2pNetworkAndWalletReadyListener = null; + } + if (!preferences.findAutoConfirmSettings("XMR").isPresent()) { log.error("AutoConfirmSettings is not present"); }