From cf5c03f43ddd6ec2fe896ef31c94caa24952ea9c Mon Sep 17 00:00:00 2001 From: sqrrm Date: Sun, 23 Jun 2019 17:32:46 +0200 Subject: [PATCH 1/2] Wait for initialized wallet before processing dispute msgs, fix #2914 --- .../main/java/bisq/core/arbitration/DisputeManager.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/src/main/java/bisq/core/arbitration/DisputeManager.java b/core/src/main/java/bisq/core/arbitration/DisputeManager.java index 91e59c4deaf..c908e9c7e21 100644 --- a/core/src/main/java/bisq/core/arbitration/DisputeManager.java +++ b/core/src/main/java/bisq/core/arbitration/DisputeManager.java @@ -120,6 +120,7 @@ public class DisputeManager implements PersistedDataHost { private final Map disputeIsClosedSubscriptionsMap = new HashMap<>(); @Getter private final IntegerProperty numOpenDisputes = new SimpleIntegerProperty(); + private boolean servicesInitialized; /////////////////////////////////////////////////////////////////////////////////////////// @@ -177,6 +178,7 @@ public void readPersisted() { } public void onAllServicesInitialized() { + servicesInitialized = true; p2PService.addP2PServiceListener(new BootstrapListener() { @Override public void onUpdatedDataReceived() { @@ -266,6 +268,13 @@ private boolean isReadyForTxBroadcast() { } private void applyMessages() { + // Some messages can't be handled until all the services are properly initialized. + // In particular it's not possible to complete the signing of a dispute payout + // by an encrypted wallet until after it's been decrypted. + if (!servicesInitialized) { + return; + } + decryptedDirectMessageWithPubKeys.forEach(decryptedMessageWithPubKey -> { NetworkEnvelope networkEnvelope = decryptedMessageWithPubKey.getNetworkEnvelope(); if (networkEnvelope instanceof DisputeMessage) { From f62261719a805dccf98c735ac1eb006e8464e1b0 Mon Sep 17 00:00:00 2001 From: sqrrm Date: Mon, 24 Jun 2019 21:42:42 +0200 Subject: [PATCH 2/2] Include check for services in readyForTxBroadcast --- .../java/bisq/core/arbitration/DisputeManager.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/bisq/core/arbitration/DisputeManager.java b/core/src/main/java/bisq/core/arbitration/DisputeManager.java index c908e9c7e21..ed1a665bd5d 100644 --- a/core/src/main/java/bisq/core/arbitration/DisputeManager.java +++ b/core/src/main/java/bisq/core/arbitration/DisputeManager.java @@ -262,19 +262,16 @@ private void tryApplyMessages() { } private boolean isReadyForTxBroadcast() { + // Some messages can't be handled until all the services are properly initialized. + // In particular it's not possible to complete the signing of a dispute payout + // by an encrypted wallet until after it's been decrypted. return p2PService.isBootstrapped() && walletsSetup.isDownloadComplete() && - walletsSetup.hasSufficientPeersForBroadcast(); + walletsSetup.hasSufficientPeersForBroadcast() && + servicesInitialized; } private void applyMessages() { - // Some messages can't be handled until all the services are properly initialized. - // In particular it's not possible to complete the signing of a dispute payout - // by an encrypted wallet until after it's been decrypted. - if (!servicesInitialized) { - return; - } - decryptedDirectMessageWithPubKeys.forEach(decryptedMessageWithPubKey -> { NetworkEnvelope networkEnvelope = decryptedMessageWithPubKey.getNetworkEnvelope(); if (networkEnvelope instanceof DisputeMessage) {