From fa0c28adf6933a86adabf0f8db52e5e2632276a8 Mon Sep 17 00:00:00 2001 From: chimp1984 Date: Tue, 17 Nov 2020 22:35:51 -0500 Subject: [PATCH] Add requestPersistence calls We relied on the shutdwon routine to be called reliably but it seems that is not the case as some bug reports show. So we call requestPersistence at every write access of the trade object --- core/src/main/java/bisq/core/app/WalletAppSetup.java | 1 + .../java/bisq/core/support/dispute/DisputeManager.java | 1 + .../support/dispute/mediation/MediationManager.java | 3 +++ .../core/support/dispute/refund/RefundManager.java | 1 + .../core/support/traderchat/TraderChatManager.java | 2 ++ core/src/main/java/bisq/core/trade/Trade.java | 7 +++---- core/src/main/java/bisq/core/trade/TradeManager.java | 9 +++++++-- .../java/bisq/core/trade/protocol/BuyerProtocol.java | 5 ++++- .../java/bisq/core/trade/protocol/SellerProtocol.java | 5 ++++- .../java/bisq/core/trade/protocol/TradeProtocol.java | 2 ++ .../ProcessPeerPublishedDelayedPayoutTxMessage.java | 2 ++ .../trade/protocol/tasks/SetupPayoutTxListener.java | 1 + .../java/bisq/core/trade/protocol/tasks/TradeTask.java | 6 ++++++ .../BuyerProcessDelayedPayoutTxSignatureRequest.java | 2 ++ ...BuyerProcessDepositTxAndDelayedPayoutTxMessage.java | 2 ++ .../buyer/BuyerProcessPayoutTxPublishedMessage.java | 2 ++ ...BuyerSendCounterCurrencyTransferStartedMessage.java | 9 +++++++++ .../tasks/buyer/BuyerSetupDepositTxListener.java | 2 ++ .../tasks/buyer/BuyerSetupPayoutTxListener.java | 2 ++ .../buyer_as_taker/BuyerAsTakerSignsDepositTx.java | 2 ++ .../tasks/maker/MakerCreateAndSignContract.java | 2 ++ .../maker/MakerSendsInputsForDepositTxResponse.java | 4 +++- .../trade/protocol/tasks/maker/MakerSetsLockTime.java | 2 ++ .../tasks/mediation/BroadcastMediatedPayoutTx.java | 1 + .../tasks/mediation/FinalizeMediatedPayoutTx.java | 2 ++ .../ProcessMediatedPayoutSignatureMessage.java | 2 ++ .../ProcessMediatedPayoutTxPublishedMessage.java | 3 +++ .../mediation/SendMediatedPayoutSignatureMessage.java | 4 ++++ .../SendMediatedPayoutTxPublishedMessage.java | 4 ++++ .../tasks/mediation/SetupMediatedPayoutTxListener.java | 1 + .../protocol/tasks/seller/SellerBroadcastPayoutTx.java | 1 + .../tasks/seller/SellerFinalizesDelayedPayoutTx.java | 2 ++ ...erProcessCounterCurrencyTransferStartedMessage.java | 2 ++ .../SellerProcessDelayedPayoutTxSignatureResponse.java | 2 ++ .../tasks/seller/SellerPublishesDepositTx.java | 2 ++ .../seller/SellerSendPayoutTxPublishedMessage.java | 4 ++++ .../SellerSendsDepositTxAndDelayedPayoutTxMessage.java | 10 ++++++++++ .../tasks/seller/SellerSignAndFinalizePayoutTx.java | 2 ++ .../SellerAsMakerCreatesUnsignedDepositTx.java | 2 ++ .../SellerAsMakerProcessDepositTxMessage.java | 2 ++ .../TakerProcessesInputsForDepositTxResponse.java | 2 ++ .../trade/protocol/tasks/taker/TakerPublishFeeTx.java | 3 +++ .../tasks/taker/TakerVerifyAndSignContract.java | 2 ++ .../pendingtrades/PendingTradesDataModel.java | 2 +- .../portfolio/pendingtrades/PendingTradesView.java | 1 + .../pendingtrades/steps/buyer/BuyerStep2View.java | 3 +++ 46 files changed, 123 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/bisq/core/app/WalletAppSetup.java b/core/src/main/java/bisq/core/app/WalletAppSetup.java index 61433278e1..5f0b452256 100644 --- a/core/src/main/java/bisq/core/app/WalletAppSetup.java +++ b/core/src/main/java/bisq/core/app/WalletAppSetup.java @@ -247,6 +247,7 @@ public class WalletAppSetup { String finalDetails = details; UserThread.runAfter(() -> { trade.setErrorMessage(newValue.getMessage()); + tradeManager.requestPersistence(); if (rejectedTxErrorMessageHandler != null) { rejectedTxErrorMessageHandler.accept(Res.get("popup.warning.trade.txRejected", finalDetails, trade.getShortId(), txId)); diff --git a/core/src/main/java/bisq/core/support/dispute/DisputeManager.java b/core/src/main/java/bisq/core/support/dispute/DisputeManager.java index 45fc43f35e..46a5c464b9 100644 --- a/core/src/main/java/bisq/core/support/dispute/DisputeManager.java +++ b/core/src/main/java/bisq/core/support/dispute/DisputeManager.java @@ -395,6 +395,7 @@ public abstract class DisputeManager> extends Sup if (!storedDisputeOptional.isPresent()) { disputeList.add(dispute); trade.setDisputeState(getDisputeStateStartedByPeer()); + tradeManager.requestPersistence(); errorMessage = null; } else { // valid case if both have opened a dispute and agent was not online. diff --git a/core/src/main/java/bisq/core/support/dispute/mediation/MediationManager.java b/core/src/main/java/bisq/core/support/dispute/mediation/MediationManager.java index e0a20e08da..67042717e6 100644 --- a/core/src/main/java/bisq/core/support/dispute/mediation/MediationManager.java +++ b/core/src/main/java/bisq/core/support/dispute/mediation/MediationManager.java @@ -207,6 +207,7 @@ public final class MediationManager extends DisputeManager tradeManager.requestPersistence(); trade.setDisputeState(Trade.DisputeState.MEDIATION_CLOSED); + tradeManager.requestPersistence(); } } else { Optional openOfferOptional = openOfferManager.getOpenOfferById(tradeId); @@ -243,6 +244,7 @@ public final class MediationManager extends DisputeManager DisputeProtocol tradeProtocol = (DisputeProtocol) tradeManager.getTradeProtocol(trade); trade.setMediationResultState(MediationResultState.MEDIATION_RESULT_ACCEPTED); + tradeManager.requestPersistence(); // If we have not got yet the peers signature we sign and send to the peer our signature. // Otherwise we sign and complete with the peers signature the payout tx. @@ -265,5 +267,6 @@ public final class MediationManager extends DisputeManager public void rejectMediationResult(Trade trade) { trade.setMediationResultState(MediationResultState.MEDIATION_RESULT_REJECTED); + tradeManager.requestPersistence(); } } diff --git a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java index e7919346f3..1cff45dbdc 100644 --- a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java +++ b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java @@ -205,6 +205,7 @@ public final class RefundManager extends DisputeManager { if (trade.getDisputeState() == Trade.DisputeState.REFUND_REQUESTED || trade.getDisputeState() == Trade.DisputeState.REFUND_REQUEST_STARTED_BY_PEER) { trade.setDisputeState(Trade.DisputeState.REFUND_REQUEST_CLOSED); + tradeManager.requestPersistence(); } } else { Optional openOfferOptional = openOfferManager.getOpenOfferById(tradeId); diff --git a/core/src/main/java/bisq/core/support/traderchat/TraderChatManager.java b/core/src/main/java/bisq/core/support/traderchat/TraderChatManager.java index ef4a0157e0..bf7f353200 100644 --- a/core/src/main/java/bisq/core/support/traderchat/TraderChatManager.java +++ b/core/src/main/java/bisq/core/support/traderchat/TraderChatManager.java @@ -164,5 +164,7 @@ public class TraderChatManager extends SupportManager { trade.getDate().getTime()); chatMessage.setSystemMessage(true); trade.getChatMessages().add(chatMessage); + + requestPersistence(); } } diff --git a/core/src/main/java/bisq/core/trade/Trade.java b/core/src/main/java/bisq/core/trade/Trade.java index a6f2d56ab9..ba50362262 100644 --- a/core/src/main/java/bisq/core/trade/Trade.java +++ b/core/src/main/java/bisq/core/trade/Trade.java @@ -700,10 +700,6 @@ public abstract class Trade implements Tradable, Model { } } - public void appendErrorMessage(String msg) { - errorMessage = errorMessage == null ? msg : errorMessage + "\n" + msg; - } - public boolean mediationResultAppliedPenaltyToSeller() { // If mediated payout is same or more then normal payout we enable otherwise a penalty was applied // by mediators and we keep the confirm disabled to avoid that the seller can complete the trade @@ -1099,6 +1095,9 @@ public abstract class Trade implements Tradable, Model { private void setConfirmedState() { // we only apply the state if we are not already further in the process if (!isDepositConfirmed()) { + // As setState is called here from the trade itself we cannot trigger a requestPersistence call. + // But as we get setupConfidenceListener called at startup anyway there is no issue if it would not be + // persisted in case the shutdown routine did not persist the trade. setState(State.DEPOSIT_CONFIRMED_IN_BLOCK_CHAIN); } } diff --git a/core/src/main/java/bisq/core/trade/TradeManager.java b/core/src/main/java/bisq/core/trade/TradeManager.java index fa1af34b55..ed6cac4ea1 100644 --- a/core/src/main/java/bisq/core/trade/TradeManager.java +++ b/core/src/main/java/bisq/core/trade/TradeManager.java @@ -342,11 +342,13 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi private void initPersistedTrade(Trade trade) { initTradeAndProtocol(trade, getTradeProtocol(trade)); trade.updateDepositTxFromWallet(); + requestPersistence(); } private void initTradeAndProtocol(Trade trade, TradeProtocol tradeProtocol) { tradeProtocol.initialize(processModelServiceProvider, this, trade.getOffer()); trade.initialize(processModelServiceProvider); + requestPersistence(); } public void requestPersistence() { @@ -544,10 +546,13 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi Date halfTradePeriodDate = trade.getHalfTradePeriodDate(); if (maxTradePeriodDate != null && halfTradePeriodDate != null) { Date now = new Date(); - if (now.after(maxTradePeriodDate)) + if (now.after(maxTradePeriodDate)) { trade.setTradePeriodState(Trade.TradePeriodState.TRADE_PERIOD_OVER); - else if (now.after(halfTradePeriodDate)) + requestPersistence(); + } else if (now.after(halfTradePeriodDate)) { trade.setTradePeriodState(Trade.TradePeriodState.SECOND_HALF); + requestPersistence(); + } } } }); diff --git a/core/src/main/java/bisq/core/trade/protocol/BuyerProtocol.java b/core/src/main/java/bisq/core/trade/protocol/BuyerProtocol.java index ffff35a79b..1fee12e22b 100644 --- a/core/src/main/java/bisq/core/trade/protocol/BuyerProtocol.java +++ b/core/src/main/java/bisq/core/trade/protocol/BuyerProtocol.java @@ -147,7 +147,10 @@ public abstract class BuyerProtocol extends DisputeProtocol { errorMessageHandler.handleErrorMessage(errorMessage); handleTaskRunnerFault(event, errorMessage); }))) - .run(() -> trade.setState(Trade.State.BUYER_CONFIRMED_IN_UI_FIAT_PAYMENT_INITIATED)) + .run(() -> { + trade.setState(Trade.State.BUYER_CONFIRMED_IN_UI_FIAT_PAYMENT_INITIATED); + processModel.getTradeManager().requestPersistence(); + }) .executeTasks(); } diff --git a/core/src/main/java/bisq/core/trade/protocol/SellerProtocol.java b/core/src/main/java/bisq/core/trade/protocol/SellerProtocol.java index dd138fc0f9..c36b6c0417 100644 --- a/core/src/main/java/bisq/core/trade/protocol/SellerProtocol.java +++ b/core/src/main/java/bisq/core/trade/protocol/SellerProtocol.java @@ -141,7 +141,10 @@ public abstract class SellerProtocol extends DisputeProtocol { errorMessageHandler.handleErrorMessage(errorMessage); handleTaskRunnerFault(event, errorMessage); }))) - .run(() -> trade.setState(Trade.State.SELLER_CONFIRMED_IN_UI_FIAT_PAYMENT_RECEIPT)) + .run(() -> { + trade.setState(Trade.State.SELLER_CONFIRMED_IN_UI_FIAT_PAYMENT_RECEIPT); + processModel.getTradeManager().requestPersistence(); + }) .executeTasks(); } diff --git a/core/src/main/java/bisq/core/trade/protocol/TradeProtocol.java b/core/src/main/java/bisq/core/trade/protocol/TradeProtocol.java index 505eca1efd..d72ac1c377 100644 --- a/core/src/main/java/bisq/core/trade/protocol/TradeProtocol.java +++ b/core/src/main/java/bisq/core/trade/protocol/TradeProtocol.java @@ -297,6 +297,8 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D log.error("Timeout reached. TradeID={}, state={}, timeoutSec={}", trade.getId(), trade.stateProperty().get(), timeoutSec); trade.setErrorMessage("Timeout reached. Protocol did not complete in " + timeoutSec + " sec."); + + processModel.getTradeManager().requestPersistence(); cleanup(); }, timeoutSec); } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessPeerPublishedDelayedPayoutTxMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessPeerPublishedDelayedPayoutTxMessage.java index a104b433b8..aab0bb5a3b 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessPeerPublishedDelayedPayoutTxMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessPeerPublishedDelayedPayoutTxMessage.java @@ -52,6 +52,8 @@ public class ProcessPeerPublishedDelayedPayoutTxMessage extends TradeTask { Transaction delayedPayoutTx = checkNotNull(trade.getDelayedPayoutTx()); WalletService.maybeAddSelfTxToWallet(delayedPayoutTx, processModel.getBtcWalletService().getWallet()); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/SetupPayoutTxListener.java b/core/src/main/java/bisq/core/trade/protocol/tasks/SetupPayoutTxListener.java index bc6502a4c8..3c26433553 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/SetupPayoutTxListener.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/SetupPayoutTxListener.java @@ -91,6 +91,7 @@ public abstract class SetupPayoutTxListener extends TradeTask { if (trade.getPayoutTx() == null) { Transaction walletTx = processModel.getTradeWalletService().getWalletTx(confidence.getTransactionHash()); trade.setPayoutTx(walletTx); + processModel.getTradeManager().requestPersistence(); BtcWalletService.printTx("payoutTx received from network", walletTx); setState(); } else { diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/TradeTask.java b/core/src/main/java/bisq/core/trade/protocol/tasks/TradeTask.java index f7aeeaeaa9..2f50603eff 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/TradeTask.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/TradeTask.java @@ -40,6 +40,8 @@ public abstract class TradeTask extends Task { @Override protected void failed() { trade.setErrorMessage(errorMessage); + processModel.getTradeManager().requestPersistence(); + super.failed(); } @@ -47,6 +49,8 @@ public abstract class TradeTask extends Task { protected void failed(String message) { appendToErrorMessage(message); trade.setErrorMessage(errorMessage); + processModel.getTradeManager().requestPersistence(); + super.failed(); } @@ -55,6 +59,8 @@ public abstract class TradeTask extends Task { t.printStackTrace(); appendExceptionToErrorMessage(t); trade.setErrorMessage(errorMessage); + processModel.getTradeManager().requestPersistence(); + super.failed(); } } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessDelayedPayoutTxSignatureRequest.java b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessDelayedPayoutTxSignatureRequest.java index 806b90b05e..5bfc915704 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessDelayedPayoutTxSignatureRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessDelayedPayoutTxSignatureRequest.java @@ -54,6 +54,8 @@ public class BuyerProcessDelayedPayoutTxSignatureRequest extends TradeTask { trade.setTradingPeerNodeAddress(processModel.getTempTradingPeerNodeAddress()); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessDepositTxAndDelayedPayoutTxMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessDepositTxAndDelayedPayoutTxMessage.java index dfecf3abde..413000c1a2 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessDepositTxAndDelayedPayoutTxMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessDepositTxAndDelayedPayoutTxMessage.java @@ -73,6 +73,8 @@ public class BuyerProcessDepositTxAndDelayedPayoutTxMessage extends TradeTask { processModel.getBtcWalletService().swapTradeEntryToAvailableEntry(trade.getId(), AddressEntry.Context.RESERVED_FOR_TRADE); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessPayoutTxPublishedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessPayoutTxPublishedMessage.java index 45cd777a21..71c250b7b9 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessPayoutTxPublishedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessPayoutTxPublishedMessage.java @@ -73,6 +73,8 @@ public class BuyerProcessPayoutTxPublishedMessage extends TradeTask { processModel.getAccountAgeWitnessService().publishOwnSignedWitness(signedWitness); } + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSendCounterCurrencyTransferStartedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSendCounterCurrencyTransferStartedMessage.java index 5fd3032212..54a334c6d4 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSendCounterCurrencyTransferStartedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSendCounterCurrencyTransferStartedMessage.java @@ -83,11 +83,15 @@ public class BuyerSendCounterCurrencyTransferStartedMessage extends SendMailboxM @Override protected void setStateSent() { trade.setStateIfValidTransitionTo(Trade.State.BUYER_SENT_FIAT_PAYMENT_INITIATED_MSG); + + processModel.getTradeManager().requestPersistence(); } @Override protected void setStateArrived() { trade.setStateIfValidTransitionTo(Trade.State.BUYER_SAW_ARRIVED_FIAT_PAYMENT_INITIATED_MSG); + + processModel.getTradeManager().requestPersistence(); cleanup(); // Complete is called in base class } @@ -104,6 +108,7 @@ public class BuyerSendCounterCurrencyTransferStartedMessage extends SendMailboxM if (!trade.isPayoutPublished()) { tryToSendAgainLater(); } + processModel.getTradeManager().requestPersistence(); } // We override the default behaviour for onFault and do not call appendToErrorMessage and failed @@ -118,6 +123,7 @@ public class BuyerSendCounterCurrencyTransferStartedMessage extends SendMailboxM if (!trade.isPayoutPublished()) { tryToSendAgainLater(); } + processModel.getTradeManager().requestPersistence(); } @Override @@ -173,6 +179,9 @@ public class BuyerSendCounterCurrencyTransferStartedMessage extends SendMailboxM if (newValue == MessageState.ACKNOWLEDGED) { // We treat a ACK like BUYER_SAW_ARRIVED_FIAT_PAYMENT_INITIATED_MSG trade.setStateIfValidTransitionTo(Trade.State.BUYER_SAW_ARRIVED_FIAT_PAYMENT_INITIATED_MSG); + + processModel.getTradeManager().requestPersistence(); + cleanup(); complete(); } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSetupDepositTxListener.java b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSetupDepositTxListener.java index 32a4506efa..f78156ef5e 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSetupDepositTxListener.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSetupDepositTxListener.java @@ -100,6 +100,8 @@ public class BuyerSetupDepositTxListener extends TradeTask { // We don't want to trigger the tradeStateSubscription when setting the state, so we unsubscribe before unSubscribeAndRemoveListener(); trade.setState(Trade.State.BUYER_SAW_DEPOSIT_TX_IN_NETWORK); + + processModel.getTradeManager().requestPersistence(); } else { unSubscribeAndRemoveListener(); } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSetupPayoutTxListener.java b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSetupPayoutTxListener.java index 8f06c187ba..c58ce41ef1 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSetupPayoutTxListener.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSetupPayoutTxListener.java @@ -45,5 +45,7 @@ public class BuyerSetupPayoutTxListener extends SetupPayoutTxListener { @Override protected void setState() { trade.setStateIfValidTransitionTo(Trade.State.BUYER_SAW_PAYOUT_TX_IN_NETWORK); + + processModel.getTradeManager().requestPersistence(); } } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer_as_taker/BuyerAsTakerSignsDepositTx.java b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer_as_taker/BuyerAsTakerSignsDepositTx.java index 1ad8d8da53..24f988120d 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/buyer_as_taker/BuyerAsTakerSignsDepositTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/buyer_as_taker/BuyerAsTakerSignsDepositTx.java @@ -88,6 +88,8 @@ public class BuyerAsTakerSignsDepositTx extends TradeTask { sellerMultiSigPubKey); processModel.setDepositTx(depositTx); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerCreateAndSignContract.java b/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerCreateAndSignContract.java index ebc2ee2d9a..4c9d05c4c3 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerCreateAndSignContract.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerCreateAndSignContract.java @@ -95,6 +95,8 @@ public class MakerCreateAndSignContract extends TradeTask { processModel.setMyMultiSigPubKey(makerMultiSigPubKey); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerSendsInputsForDepositTxResponse.java b/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerSendsInputsForDepositTxResponse.java index 8831d8eab0..34380f5bcf 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerSendsInputsForDepositTxResponse.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerSendsInputsForDepositTxResponse.java @@ -89,7 +89,7 @@ public abstract class MakerSendsInputsForDepositTxResponse extends TradeTask { trade.getLockTime()); trade.setState(Trade.State.MAKER_SENT_PUBLISH_DEPOSIT_TX_REQUEST); - + processModel.getTradeManager().requestPersistence(); NodeAddress peersNodeAddress = trade.getTradingPeerNodeAddress(); log.info("Send {} to peer {}. tradeId={}, uid={}", message.getClass().getSimpleName(), peersNodeAddress, message.getTradeId(), message.getUid()); @@ -103,6 +103,7 @@ public abstract class MakerSendsInputsForDepositTxResponse extends TradeTask { log.info("{} arrived at peer {}. tradeId={}, uid={}", message.getClass().getSimpleName(), peersNodeAddress, message.getTradeId(), message.getUid()); trade.setState(Trade.State.MAKER_SAW_ARRIVED_PUBLISH_DEPOSIT_TX_REQUEST); + processModel.getTradeManager().requestPersistence(); complete(); } @@ -112,6 +113,7 @@ public abstract class MakerSendsInputsForDepositTxResponse extends TradeTask { message.getClass().getSimpleName(), peersNodeAddress, message.getTradeId(), message.getUid(), errorMessage); trade.setState(Trade.State.MAKER_SEND_FAILED_PUBLISH_DEPOSIT_TX_REQUEST); appendToErrorMessage("Sending message failed: message=" + message + "\nerrorMessage=" + errorMessage); + processModel.getTradeManager().requestPersistence(); failed(errorMessage); } } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerSetsLockTime.java b/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerSetsLockTime.java index 3e55cee481..fde4359bec 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerSetsLockTime.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerSetsLockTime.java @@ -47,6 +47,8 @@ public class MakerSetsLockTime extends TradeTask { log.info("lockTime={}, delay={}", lockTime, delay); trade.setLockTime(lockTime); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/BroadcastMediatedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/BroadcastMediatedPayoutTx.java index 7d67edc7d5..7ebfa20ce5 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/BroadcastMediatedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/BroadcastMediatedPayoutTx.java @@ -45,5 +45,6 @@ public class BroadcastMediatedPayoutTx extends BroadcastPayoutTx { @Override protected void setState() { trade.setMediationResultState(MediationResultState.PAYOUT_TX_PUBLISHED); + processModel.getTradeManager().requestPersistence(); } } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/FinalizeMediatedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/FinalizeMediatedPayoutTx.java index b9e43a8427..87a8bdf32e 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/FinalizeMediatedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/FinalizeMediatedPayoutTx.java @@ -108,6 +108,8 @@ public class FinalizeMediatedPayoutTx extends TradeTask { trade.setPayoutTx(transaction); + processModel.getTradeManager().requestPersistence(); + walletService.swapTradeEntryToAvailableEntry(tradeId, AddressEntry.Context.MULTI_SIG); complete(); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutSignatureMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutSignatureMessage.java index ea1a02a02a..ba0aad7204 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutSignatureMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutSignatureMessage.java @@ -51,6 +51,8 @@ public class ProcessMediatedPayoutSignatureMessage extends TradeTask { trade.setMediationResultState(MediationResultState.RECEIVED_SIG_MSG); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutTxPublishedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutTxPublishedMessage.java index 226fefbb5a..8e5b08a068 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutTxPublishedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutTxPublishedMessage.java @@ -74,6 +74,9 @@ public class ProcessMediatedPayoutTxPublishedMessage extends TradeTask { } else { log.info("We got the payout tx already set from BuyerSetupPayoutTxListener and do nothing here. trade ID={}", trade.getId()); } + + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SendMediatedPayoutSignatureMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SendMediatedPayoutSignatureMessage.java index e897027119..22bc9f93b1 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SendMediatedPayoutSignatureMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SendMediatedPayoutSignatureMessage.java @@ -60,6 +60,7 @@ public class SendMediatedPayoutSignatureMessage extends TradeTask { message.getClass().getSimpleName(), peersNodeAddress, message.getTradeId(), message.getUid()); trade.setMediationResultState(MediationResultState.SIG_MSG_SENT); + processModel.getTradeManager().requestPersistence(); p2PService.sendEncryptedMailboxMessage(peersNodeAddress, peersPubKeyRing, message, @@ -70,6 +71,7 @@ public class SendMediatedPayoutSignatureMessage extends TradeTask { message.getClass().getSimpleName(), peersNodeAddress, message.getTradeId(), message.getUid()); trade.setMediationResultState(MediationResultState.SIG_MSG_ARRIVED); + processModel.getTradeManager().requestPersistence(); complete(); } @@ -79,6 +81,7 @@ public class SendMediatedPayoutSignatureMessage extends TradeTask { message.getClass().getSimpleName(), peersNodeAddress, message.getTradeId(), message.getUid()); trade.setMediationResultState(MediationResultState.SIG_MSG_IN_MAILBOX); + processModel.getTradeManager().requestPersistence(); complete(); } @@ -88,6 +91,7 @@ public class SendMediatedPayoutSignatureMessage extends TradeTask { message.getClass().getSimpleName(), peersNodeAddress, message.getTradeId(), message.getUid(), errorMessage); trade.setMediationResultState(MediationResultState.SIG_MSG_SEND_FAILED); appendToErrorMessage("Sending message failed: message=" + message + "\nerrorMessage=" + errorMessage); + processModel.getTradeManager().requestPersistence(); failed(errorMessage); } } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SendMediatedPayoutTxPublishedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SendMediatedPayoutTxPublishedMessage.java index 8cadcbeaec..c4c4287920 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SendMediatedPayoutTxPublishedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SendMediatedPayoutTxPublishedMessage.java @@ -54,21 +54,25 @@ public class SendMediatedPayoutTxPublishedMessage extends SendMailboxMessageTask @Override protected void setStateSent() { trade.setMediationResultState(MediationResultState.PAYOUT_TX_PUBLISHED_MSG_SENT); + processModel.getTradeManager().requestPersistence(); } @Override protected void setStateArrived() { trade.setMediationResultState(MediationResultState.PAYOUT_TX_PUBLISHED_MSG_ARRIVED); + processModel.getTradeManager().requestPersistence(); } @Override protected void setStateStoredInMailbox() { trade.setMediationResultState(MediationResultState.PAYOUT_TX_PUBLISHED_MSG_IN_MAILBOX); + processModel.getTradeManager().requestPersistence(); } @Override protected void setStateFault() { trade.setMediationResultState(MediationResultState.PAYOUT_TX_PUBLISHED_MSG_SEND_FAILED); + processModel.getTradeManager().requestPersistence(); } @Override diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SetupMediatedPayoutTxListener.java b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SetupMediatedPayoutTxListener.java index 8f0ee2b106..dc0b60b314 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SetupMediatedPayoutTxListener.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SetupMediatedPayoutTxListener.java @@ -49,5 +49,6 @@ public class SetupMediatedPayoutTxListener extends SetupPayoutTxListener { if (trade.getPayoutTx() != null) { processModel.getTradeManager().closeDisputedTrade(trade.getId(), Trade.DisputeState.MEDIATION_CLOSED); } + processModel.getTradeManager().requestPersistence(); } } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerBroadcastPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerBroadcastPayoutTx.java index 2ab775d80c..d0a0f6c20d 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerBroadcastPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerBroadcastPayoutTx.java @@ -44,5 +44,6 @@ public class SellerBroadcastPayoutTx extends BroadcastPayoutTx { @Override protected void setState() { trade.setState(Trade.State.SELLER_PUBLISHED_PAYOUT_TX); + processModel.getTradeManager().requestPersistence(); } } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerFinalizesDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerFinalizesDelayedPayoutTx.java index 720c1a9f04..2683e52602 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerFinalizesDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerFinalizesDelayedPayoutTx.java @@ -68,6 +68,8 @@ public class SellerFinalizesDelayedPayoutTx extends TradeTask { trade.applyDelayedPayoutTx(signedDelayedPayoutTx); log.info("DelayedPayoutTxBytes = {}", Utilities.bytesAsHexString(trade.getDelayedPayoutTxBytes())); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerProcessCounterCurrencyTransferStartedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerProcessCounterCurrencyTransferStartedMessage.java index 5f8d6bc50e..9cbba9b670 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerProcessCounterCurrencyTransferStartedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerProcessCounterCurrencyTransferStartedMessage.java @@ -61,6 +61,8 @@ public class SellerProcessCounterCurrencyTransferStartedMessage extends TradeTas trade.setState(Trade.State.SELLER_RECEIVED_FIAT_PAYMENT_INITIATED_MSG); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerProcessDelayedPayoutTxSignatureResponse.java b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerProcessDelayedPayoutTxSignatureResponse.java index c47fd0be06..7d32c98761 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerProcessDelayedPayoutTxSignatureResponse.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerProcessDelayedPayoutTxSignatureResponse.java @@ -47,6 +47,8 @@ public class SellerProcessDelayedPayoutTxSignatureResponse extends TradeTask { // update to the latest peer address of our peer if the message is correct trade.setTradingPeerNodeAddress(processModel.getTempTradingPeerNodeAddress()); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerPublishesDepositTx.java b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerPublishesDepositTx.java index 1cdc2e4358..1afae6dad3 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerPublishesDepositTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerPublishesDepositTx.java @@ -54,6 +54,8 @@ public class SellerPublishesDepositTx extends TradeTask { processModel.getBtcWalletService().swapTradeEntryToAvailableEntry(processModel.getOffer().getId(), AddressEntry.Context.RESERVED_FOR_TRADE); + processModel.getTradeManager().requestPersistence(); + complete(); } else { log.warn("We got the onSuccess callback called after the timeout has been triggered a complete()."); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSendPayoutTxPublishedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSendPayoutTxPublishedMessage.java index db73f1910a..a7da42bece 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSendPayoutTxPublishedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSendPayoutTxPublishedMessage.java @@ -65,6 +65,7 @@ public class SellerSendPayoutTxPublishedMessage extends SendMailboxMessageTask { trade.setState(Trade.State.SELLER_SENT_PAYOUT_TX_PUBLISHED_MSG); log.info("Sent PayoutTxPublishedMessage: tradeId={} at peer {} SignedWitness {}", trade.getId(), trade.getTradingPeerNodeAddress(), signedWitness); + processModel.getTradeManager().requestPersistence(); } @Override @@ -72,6 +73,7 @@ public class SellerSendPayoutTxPublishedMessage extends SendMailboxMessageTask { trade.setState(Trade.State.SELLER_SAW_ARRIVED_PAYOUT_TX_PUBLISHED_MSG); log.info("PayoutTxPublishedMessage arrived: tradeId={} at peer {} SignedWitness {}", trade.getId(), trade.getTradingPeerNodeAddress(), signedWitness); + processModel.getTradeManager().requestPersistence(); } @Override @@ -79,6 +81,7 @@ public class SellerSendPayoutTxPublishedMessage extends SendMailboxMessageTask { trade.setState(Trade.State.SELLER_STORED_IN_MAILBOX_PAYOUT_TX_PUBLISHED_MSG); log.info("PayoutTxPublishedMessage storedInMailbox: tradeId={} at peer {} SignedWitness {}", trade.getId(), trade.getTradingPeerNodeAddress(), signedWitness); + processModel.getTradeManager().requestPersistence(); } @Override @@ -86,6 +89,7 @@ public class SellerSendPayoutTxPublishedMessage extends SendMailboxMessageTask { trade.setState(Trade.State.SELLER_SEND_FAILED_PAYOUT_TX_PUBLISHED_MSG); log.error("PayoutTxPublishedMessage failed: tradeId={} at peer {} SignedWitness {}", trade.getId(), trade.getTradingPeerNodeAddress(), signedWitness); + processModel.getTradeManager().requestPersistence(); } @Override diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSendsDepositTxAndDelayedPayoutTxMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSendsDepositTxAndDelayedPayoutTxMessage.java index e46a88fcdc..18768093f7 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSendsDepositTxAndDelayedPayoutTxMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSendsDepositTxAndDelayedPayoutTxMessage.java @@ -76,11 +76,15 @@ public class SellerSendsDepositTxAndDelayedPayoutTxMessage extends SendMailboxMe @Override protected void setStateSent() { trade.setStateIfValidTransitionTo(Trade.State.SELLER_SENT_DEPOSIT_TX_PUBLISHED_MSG); + + processModel.getTradeManager().requestPersistence(); } @Override protected void setStateArrived() { trade.setStateIfValidTransitionTo(Trade.State.SELLER_SAW_ARRIVED_DEPOSIT_TX_PUBLISHED_MSG); + + processModel.getTradeManager().requestPersistence(); cleanup(); // Complete is called in base class } @@ -94,6 +98,8 @@ public class SellerSendsDepositTxAndDelayedPayoutTxMessage extends SendMailboxMe @Override protected void setStateStoredInMailbox() { trade.setStateIfValidTransitionTo(Trade.State.SELLER_STORED_IN_MAILBOX_DEPOSIT_TX_PUBLISHED_MSG); + + processModel.getTradeManager().requestPersistence(); // The DepositTxAndDelayedPayoutTxMessage is a mailbox message as earlier we use only the deposit tx which can // be also received from the network once published. // Now we send the delayed payout tx as well and with that this message is mandatory for continuing the protocol. @@ -119,6 +125,8 @@ public class SellerSendsDepositTxAndDelayedPayoutTxMessage extends SendMailboxMe if (!trade.isDepositConfirmed()) { tryToSendAgainLater(); } + + processModel.getTradeManager().requestPersistence(); } @Override @@ -173,6 +181,8 @@ public class SellerSendsDepositTxAndDelayedPayoutTxMessage extends SendMailboxMe if (newValue == MessageState.ACKNOWLEDGED) { // We treat a ACK like SELLER_SAW_ARRIVED_DEPOSIT_TX_PUBLISHED_MSG trade.setStateIfValidTransitionTo(Trade.State.SELLER_SAW_ARRIVED_DEPOSIT_TX_PUBLISHED_MSG); + + processModel.getTradeManager().requestPersistence(); cleanup(); complete(); } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSignAndFinalizePayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSignAndFinalizePayoutTx.java index eb5bd3aa99..34f645896b 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSignAndFinalizePayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSignAndFinalizePayoutTx.java @@ -100,6 +100,8 @@ public class SellerSignAndFinalizePayoutTx extends TradeTask { trade.setPayoutTx(transaction); + processModel.getTradeManager().requestPersistence(); + walletService.swapTradeEntryToAvailableEntry(id, AddressEntry.Context.MULTI_SIG); complete(); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerCreatesUnsignedDepositTx.java b/core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerCreatesUnsignedDepositTx.java index 5caf031bfe..121e75e922 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerCreatesUnsignedDepositTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerCreatesUnsignedDepositTx.java @@ -103,6 +103,8 @@ public class SellerAsMakerCreatesUnsignedDepositTx extends TradeTask { processModel.setPreparedDepositTx(result.depositTransaction); processModel.setRawTransactionInputs(result.rawMakerInputs); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerProcessDepositTxMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerProcessDepositTxMessage.java index ea61b2fa50..1622758862 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerProcessDepositTxMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerProcessDepositTxMessage.java @@ -51,6 +51,8 @@ public class SellerAsMakerProcessDepositTxMessage extends TradeTask { // but that cannot be changed due backward compatibility issues. It is a left over from the old trade protocol. trade.setTakerFeeTxId(processModel.getTakeOfferFeeTxId()); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerProcessesInputsForDepositTxResponse.java b/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerProcessesInputsForDepositTxResponse.java index 1a84e311c4..11218d6fef 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerProcessesInputsForDepositTxResponse.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerProcessesInputsForDepositTxResponse.java @@ -83,6 +83,8 @@ public class TakerProcessesInputsForDepositTxResponse extends TradeTask { // update to the latest peer address of our peer if the message is correct trade.setTradingPeerNodeAddress(processModel.getTempTradingPeerNodeAddress()); + processModel.getTradeManager().requestPersistence(); + complete(); } catch (Throwable t) { failed(t); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerPublishFeeTx.java b/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerPublishFeeTx.java index a1c4914a49..6324f74e00 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerPublishFeeTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerPublishFeeTx.java @@ -110,6 +110,9 @@ public class TakerPublishFeeTx extends TradeTask { if (transaction != null) { trade.setTakerFeeTxId(transaction.getTxId().toString()); trade.setState(Trade.State.TAKER_PUBLISHED_TAKER_FEE_TX); + + processModel.getTradeManager().requestPersistence(); + complete(); } } else { diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerVerifyAndSignContract.java b/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerVerifyAndSignContract.java index 15fef9aa32..afe14cba20 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerVerifyAndSignContract.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerVerifyAndSignContract.java @@ -114,6 +114,8 @@ public class TakerVerifyAndSignContract extends TradeTask { trade.setContractHash(contractHash); trade.setTakerContractSignature(signature); + + processModel.getTradeManager().requestPersistence(); try { checkNotNull(maker.getPubKeyRing(), "maker.getPubKeyRing() must nto be null"); Sig.verify(maker.getPubKeyRing().getSignaturePubKey(), diff --git a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java index bce37344b8..59f33ef27c 100644 --- a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java +++ b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java @@ -555,6 +555,7 @@ public class PendingTradesDataModel extends ActivatableDataModel { trade.setDisputeState(Trade.DisputeState.MEDIATION_REQUESTED); sendOpenDisputeMessage(disputeManager, resultHandler, dispute); + tradeManager.requestPersistence(); } else if (useRefundAgent) { resultHandler = () -> navigation.navigateTo(MainView.class, SupportView.class, RefundClientView.class); @@ -630,7 +631,6 @@ public class PendingTradesDataModel extends ActivatableDataModel { sendOpenDisputeMessage(disputeManager, resultHandler, dispute); }, errorMessage -> new Popup().error(errorMessage).show()); - } else { log.warn("Invalid dispute state {}", disputeState.name()); } diff --git a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java index a72ab7ab77..0e5fc23a07 100644 --- a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java +++ b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java @@ -471,6 +471,7 @@ public class PendingTradesView extends ActivatableViewAndModel {