mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-24 15:10:44 +01:00
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
This commit is contained in:
parent
6fc36d48db
commit
fa0c28adf6
46 changed files with 123 additions and 10 deletions
|
@ -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));
|
||||
|
|
|
@ -395,6 +395,7 @@ public abstract class DisputeManager<T extends DisputeList<Dispute>> 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.
|
||||
|
|
|
@ -207,6 +207,7 @@ public final class MediationManager extends DisputeManager<MediationDisputeList>
|
|||
tradeManager.requestPersistence();
|
||||
|
||||
trade.setDisputeState(Trade.DisputeState.MEDIATION_CLOSED);
|
||||
tradeManager.requestPersistence();
|
||||
}
|
||||
} else {
|
||||
Optional<OpenOffer> openOfferOptional = openOfferManager.getOpenOfferById(tradeId);
|
||||
|
@ -243,6 +244,7 @@ public final class MediationManager extends DisputeManager<MediationDisputeList>
|
|||
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<MediationDisputeList>
|
|||
|
||||
public void rejectMediationResult(Trade trade) {
|
||||
trade.setMediationResultState(MediationResultState.MEDIATION_RESULT_REJECTED);
|
||||
tradeManager.requestPersistence();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -205,6 +205,7 @@ public final class RefundManager extends DisputeManager<RefundDisputeList> {
|
|||
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<OpenOffer> openOfferOptional = openOfferManager.getOpenOfferById(tradeId);
|
||||
|
|
|
@ -164,5 +164,7 @@ public class TraderChatManager extends SupportManager {
|
|||
trade.getDate().getTime());
|
||||
chatMessage.setSystemMessage(true);
|
||||
trade.getChatMessages().add(chatMessage);
|
||||
|
||||
requestPersistence();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -40,6 +40,8 @@ public abstract class TradeTask extends Task<Trade> {
|
|||
@Override
|
||||
protected void failed() {
|
||||
trade.setErrorMessage(errorMessage);
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
|
||||
super.failed();
|
||||
}
|
||||
|
||||
|
@ -47,6 +49,8 @@ public abstract class TradeTask extends Task<Trade> {
|
|||
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<Trade> {
|
|||
t.printStackTrace();
|
||||
appendExceptionToErrorMessage(t);
|
||||
trade.setErrorMessage(errorMessage);
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
|
||||
super.failed();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,6 +54,8 @@ public class BuyerProcessDelayedPayoutTxSignatureRequest extends TradeTask {
|
|||
|
||||
trade.setTradingPeerNodeAddress(processModel.getTempTradingPeerNodeAddress());
|
||||
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
||||
failed(t);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -73,6 +73,8 @@ public class BuyerProcessPayoutTxPublishedMessage extends TradeTask {
|
|||
processModel.getAccountAgeWitnessService().publishOwnSignedWitness(signedWitness);
|
||||
}
|
||||
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
||||
failed(t);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -88,6 +88,8 @@ public class BuyerAsTakerSignsDepositTx extends TradeTask {
|
|||
sellerMultiSigPubKey);
|
||||
processModel.setDepositTx(depositTx);
|
||||
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
||||
failed(t);
|
||||
|
|
|
@ -95,6 +95,8 @@ public class MakerCreateAndSignContract extends TradeTask {
|
|||
|
||||
processModel.setMyMultiSigPubKey(makerMultiSigPubKey);
|
||||
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
||||
failed(t);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -45,5 +45,6 @@ public class BroadcastMediatedPayoutTx extends BroadcastPayoutTx {
|
|||
@Override
|
||||
protected void setState() {
|
||||
trade.setMediationResultState(MediationResultState.PAYOUT_TX_PUBLISHED);
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,6 +108,8 @@ public class FinalizeMediatedPayoutTx extends TradeTask {
|
|||
|
||||
trade.setPayoutTx(transaction);
|
||||
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
|
||||
walletService.swapTradeEntryToAvailableEntry(tradeId, AddressEntry.Context.MULTI_SIG);
|
||||
|
||||
complete();
|
||||
|
|
|
@ -51,6 +51,8 @@ public class ProcessMediatedPayoutSignatureMessage extends TradeTask {
|
|||
|
||||
trade.setMediationResultState(MediationResultState.RECEIVED_SIG_MSG);
|
||||
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
||||
failed(t);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,5 +44,6 @@ public class SellerBroadcastPayoutTx extends BroadcastPayoutTx {
|
|||
@Override
|
||||
protected void setState() {
|
||||
trade.setState(Trade.State.SELLER_PUBLISHED_PAYOUT_TX);
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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().");
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -100,6 +100,8 @@ public class SellerSignAndFinalizePayoutTx extends TradeTask {
|
|||
|
||||
trade.setPayoutTx(transaction);
|
||||
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
|
||||
walletService.swapTradeEntryToAvailableEntry(id, AddressEntry.Context.MULTI_SIG);
|
||||
|
||||
complete();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -471,6 +471,7 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||
trade.stateProperty().removeListener(tradeStateListener);
|
||||
trade.disputeStateProperty().addListener(disputeStateListener);
|
||||
trade.mediationResultStateProperty().addListener(mediationResultStateListener);
|
||||
traderChatManager.requestPersistence();
|
||||
});
|
||||
|
||||
Scene scene = new Scene(pane);
|
||||
|
|
|
@ -472,6 +472,8 @@ public class BuyerStep2View extends TradeStepView {
|
|||
|
||||
trade.setCounterCurrencyExtraData(txKey);
|
||||
trade.setCounterCurrencyTxId(txHash);
|
||||
|
||||
model.dataModel.getTradeManager().requestPersistence();
|
||||
showConfirmPaymentStartedPopup();
|
||||
})
|
||||
.closeButtonText(Res.get("shared.cancel"))
|
||||
|
@ -519,6 +521,7 @@ public class BuyerStep2View extends TradeStepView {
|
|||
//TODO seems this was a hack to enable repeated confirm???
|
||||
if (trade.isFiatSent()) {
|
||||
trade.setState(Trade.State.DEPOSIT_CONFIRMED_IN_BLOCK_CHAIN);
|
||||
model.dataModel.getTradeManager().requestPersistence();
|
||||
}
|
||||
|
||||
model.dataModel.onPaymentStarted(() -> {
|
||||
|
|
Loading…
Add table
Reference in a new issue