diff --git a/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferViewModel.java b/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferViewModel.java index c8614b3b79..87c74ead24 100644 --- a/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferViewModel.java +++ b/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferViewModel.java @@ -211,8 +211,8 @@ class TakeOfferViewModel extends ActivatableWithDataModel im takerTrade.processStateProperty().addListener((ov, oldValue, newValue) -> { log.debug("takerTrade state = " + newValue); String msg = ""; - if (newValue.getErrorMessage() != null) - msg = "\nError message: " + newValue.getErrorMessage(); + if (takerTrade.getErrorMessage() != null) + msg = "\nError message: " + takerTrade.getErrorMessage(); switch (newValue) { case TAKE_OFFER_FEE_TX_CREATED: @@ -235,7 +235,7 @@ class TakeOfferViewModel extends ActivatableWithDataModel im break; case PAYOUT_PUBLISHED: break; - case UNSPECIFIC_FAULT: + case EXCEPTION: errorMessage.set(msg); takeOfferRequested = false; break; diff --git a/core/src/main/java/io/bitsquare/trade/OffererTrade.java b/core/src/main/java/io/bitsquare/trade/OffererTrade.java index 65a1e92169..b0bc486849 100644 --- a/core/src/main/java/io/bitsquare/trade/OffererTrade.java +++ b/core/src/main/java/io/bitsquare/trade/OffererTrade.java @@ -58,20 +58,13 @@ public class OffererTrade extends Trade implements Serializable { public enum OffererProcessState implements ProcessState { DEPOSIT_PUBLISHED, DEPOSIT_CONFIRMED, + FIAT_PAYMENT_STARTED, + PAYOUT_PUBLISHED, + MESSAGE_SENDING_FAILED, - UNSPECIFIC_FAULT; - - protected String errorMessage; - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public String getErrorMessage() { - return errorMessage; - } + UNSPECIFIC_FAULT } protected OffererProcessState processState; diff --git a/core/src/main/java/io/bitsquare/trade/TakerTrade.java b/core/src/main/java/io/bitsquare/trade/TakerTrade.java index 150cdec774..66b571eec5 100644 --- a/core/src/main/java/io/bitsquare/trade/TakerTrade.java +++ b/core/src/main/java/io/bitsquare/trade/TakerTrade.java @@ -58,25 +58,17 @@ public class TakerTrade extends Trade implements Serializable { TAKE_OFFER_FEE_TX_CREATED, TAKE_OFFER_FEE_PUBLISHED, TAKE_OFFER_FEE_PUBLISH_FAILED, + DEPOSIT_PUBLISHED, DEPOSIT_CONFIRMED, + FIAT_PAYMENT_STARTED, + FIAT_PAYMENT_RECEIVED, PAYOUT_PUBLISHED, + MESSAGE_SENDING_FAILED, - UNSPECIFIC_FAULT; - - protected String errorMessage; - - @Override - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - @Override - public String getErrorMessage() { - return errorMessage; - } + EXCEPTION } protected TakerProcessState processState; @@ -111,26 +103,32 @@ public class TakerTrade extends Trade implements Serializable { // Setters /////////////////////////////////////////////////////////////////////////////////////////// + public void setLifeCycleState(TakerLifeCycleState lifeCycleState) { + this.lifeCycleState = lifeCycleState; + lifeCycleStateProperty.set(lifeCycleState); + } + public void setProcessState(TakerProcessState processState) { this.processState = processState; processStateProperty.set(processState); - if (processState == TakerProcessState.UNSPECIFIC_FAULT) { + if (processState == TakerProcessState.EXCEPTION) { setLifeCycleState(TakerLifeCycleState.FAILED); disposeProtocol(); } } - public void setLifeCycleState(TakerLifeCycleState lifeCycleState) { - this.lifeCycleState = lifeCycleState; - lifeCycleStateProperty.set(lifeCycleState); - } - public void setDepositTx(Transaction tx) { this.depositTx = tx; setConfidenceListener(); } + @Override + public void setThrowable(Throwable throwable) { + super.setThrowable(throwable); + setProcessState(TakerTrade.TakerProcessState.EXCEPTION); + } + /////////////////////////////////////////////////////////////////////////////////////////// // Getters diff --git a/core/src/main/java/io/bitsquare/trade/Trade.java b/core/src/main/java/io/bitsquare/trade/Trade.java index b53df0933e..1c359fd472 100644 --- a/core/src/main/java/io/bitsquare/trade/Trade.java +++ b/core/src/main/java/io/bitsquare/trade/Trade.java @@ -44,9 +44,8 @@ abstract public class Trade implements Serializable { transient protected static final Logger log = LoggerFactory.getLogger(Trade.class); + public interface ProcessState { - void setErrorMessage(String errorMessage); - String getErrorMessage(); } public interface LifeCycleState { @@ -68,6 +67,8 @@ abstract public class Trade implements Serializable { protected Peer tradingPeer; protected int depthInBlocks = 0; + transient protected String errorMessage; + transient protected Throwable throwable; transient protected ObjectProperty tradeAmountProperty = new SimpleObjectProperty<>(tradeAmount); transient protected ObjectProperty tradeVolumeProperty = new SimpleObjectProperty<>(getTradeVolume()); @@ -159,6 +160,14 @@ abstract public class Trade implements Serializable { this.payoutTx = tx; } + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + public void setThrowable(Throwable throwable) { + this.throwable = throwable; + } + /////////////////////////////////////////////////////////////////////////////////////////// // Getters @@ -216,6 +225,14 @@ abstract public class Trade implements Serializable { return tradeVolumeProperty; } + public String getErrorMessage() { + return errorMessage; + } + + public Throwable getThrowable() { + return throwable; + } + abstract public ReadOnlyObjectProperty processStateProperty(); abstract public ReadOnlyObjectProperty lifeCycleStateProperty(); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateAndSignPayoutTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateAndSignPayoutTx.java index cae6260e96..5738ba8437 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateAndSignPayoutTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateAndSignPayoutTx.java @@ -57,8 +57,9 @@ public class CreateAndSignPayoutTx extends Task { model.taker.payoutAmount = takerPayoutAmount; complete(); - } catch (Exception e) { - failed(e); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateOffererDepositTxInputs.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateOffererDepositTxInputs.java index 8da26110db..8f5fd993fb 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateOffererDepositTxInputs.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateOffererDepositTxInputs.java @@ -46,8 +46,9 @@ public class CreateOffererDepositTxInputs extends Task { model.offerer.outputs = result.getOutputs(); complete(); - } catch (Throwable e) { - failed(e); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java index 5000367df7..9e131f0350 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java @@ -47,6 +47,7 @@ public class ProcessPayoutTxPublishedMessage extends Task { complete(); } catch (Throwable t) { + model.trade.setThrowable(t); failed(t); } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestDepositTxInputsMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestDepositTxInputsMessage.java index 3b9872e7ce..6acd83d548 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestDepositTxInputsMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestDepositTxInputsMessage.java @@ -49,6 +49,7 @@ public class ProcessRequestDepositTxInputsMessage extends Task { @Override protected void doRun() { - RequestTakerDepositPaymentMessage tradeMessage = new RequestTakerDepositPaymentMessage( - model.id, - model.offerer.connectedOutputsForAllInputs, - model.offerer.outputs, - model.offerer.tradeWalletPubKey, - model.offerer.p2pSigPubKey, - model.offerer.p2pEncryptPubKey, - model.offerer.fiatAccount, - model.offerer.accountId); + try { + RequestTakerDepositPaymentMessage tradeMessage = new RequestTakerDepositPaymentMessage( + model.id, + model.offerer.connectedOutputsForAllInputs, + model.offerer.outputs, + model.offerer.tradeWalletPubKey, + model.offerer.p2pSigPubKey, + model.offerer.p2pEncryptPubKey, + model.offerer.fiatAccount, + model.offerer.accountId); - model.messageService.sendMessage(model.trade.getTradingPeer(), tradeMessage, new SendMessageListener() { - @Override - public void handleResult() { - log.trace("RequestTakerDepositPaymentMessage successfully arrived at peer"); - complete(); - } + model.messageService.sendMessage(model.trade.getTradingPeer(), tradeMessage, new SendMessageListener() { + @Override + public void handleResult() { + log.trace("RequestTakerDepositPaymentMessage successfully arrived at peer"); + complete(); + } - @Override - public void handleFault() { - failed(); - } - }); + @Override + public void handleFault() { + appendToErrorMessage("Sending RequestTakerDepositPaymentMessage failed"); + model.trade.setErrorMessage(errorMessage); + model.trade.setProcessState(OffererTrade.OffererProcessState.MESSAGE_SENDING_FAILED); + failed(); + } + }); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); + } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferStartedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferStartedMessage.java index b22e9f8c83..dd17e1aa86 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferStartedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferStartedMessage.java @@ -35,7 +35,7 @@ public class SendBankTransferStartedMessage extends Task { } @Override - protected void doRun() { + protected void doRun() { try { FiatTransferStartedMessage tradeMessage = new FiatTransferStartedMessage(model.id, model.offerer.payoutTxSignature, @@ -49,20 +49,22 @@ public class SendBankTransferStartedMessage extends Task { new SendMessageListener() { @Override public void handleResult() { - log.trace("Sending BankTransferInitedMessage succeeded."); + log.trace("Sending FiatTransferStartedMessage succeeded."); model.trade.setProcessState(OffererTrade.OffererProcessState.FIAT_PAYMENT_STARTED); complete(); } @Override public void handleFault() { - failed("Sending BankTransferInitedMessage failed."); - model.trade.setProcessState(OffererTrade.OffererProcessState.UNSPECIFIC_FAULT); + appendToErrorMessage("Sending FiatTransferStartedMessage failed"); + model.trade.setErrorMessage(errorMessage); + model.trade.setProcessState(OffererTrade.OffererProcessState.MESSAGE_SENDING_FAILED); + failed(); } }); } catch (Throwable t) { - failed("Sending BankTransferInitedMessage failed."); - model.trade.setProcessState(OffererTrade.OffererProcessState.UNSPECIFIC_FAULT); + model.trade.setThrowable(t); + failed(t); } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxToTaker.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxToTaker.java index 017747e2d7..dc38906d0f 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxToTaker.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxToTaker.java @@ -20,6 +20,7 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.common.taskrunner.Task; import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.p2p.listener.SendMessageListener; +import io.bitsquare.trade.OffererTrade; import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage; import io.bitsquare.trade.protocol.trade.offerer.models.OffererAsBuyerModel; @@ -35,19 +36,27 @@ public class SendDepositTxToTaker extends Task { @Override protected void doRun() { - DepositTxPublishedMessage tradeMessage = new DepositTxPublishedMessage(model.id, model.trade.getDepositTx()); + try { + DepositTxPublishedMessage tradeMessage = new DepositTxPublishedMessage(model.id, model.trade.getDepositTx()); - model.messageService.sendMessage(model.trade.getTradingPeer(), tradeMessage, new SendMessageListener() { - @Override - public void handleResult() { - log.trace("DepositTxPublishedMessage successfully arrived at peer"); - complete(); - } + model.messageService.sendMessage(model.trade.getTradingPeer(), tradeMessage, new SendMessageListener() { + @Override + public void handleResult() { + log.trace("DepositTxPublishedMessage successfully arrived at peer"); + complete(); + } - @Override - public void handleFault() { - failed("Sending DepositTxPublishedMessage failed."); - } - }); + @Override + public void handleFault() { + appendToErrorMessage("Sending DepositTxPublishedMessage failed"); + model.trade.setErrorMessage(errorMessage); + model.trade.setProcessState(OffererTrade.OffererProcessState.MESSAGE_SENDING_FAILED); + failed(); + } + }); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); + } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java index 009497d911..35e968a602 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java @@ -66,11 +66,13 @@ public class SignAndPublishDepositTx extends Task { @Override public void onFailure(@NotNull Throwable t) { + model.trade.setThrowable(t); failed(t); } }); - } catch (Exception e) { - failed(e); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java index 38f19f8ae9..287ad23bab 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java @@ -36,26 +36,31 @@ public class VerifyAndSignContract extends Task { @Override protected void doRun() { - Trade trade = model.trade; + try { + Trade trade = model.trade; - Contract contract = new Contract( - model.offer, - trade.getTradeAmount(), - model.getTakeOfferFeeTxId(), - model.offerer.accountId, - model.taker.accountId, - model.offerer.fiatAccount, - model.taker.fiatAccount, - model.offerer.p2pSigPubKey, - model.taker.p2pSigPublicKey); - String contractAsJson = Utilities.objectToJson(contract); - String signature = model.signatureService.signMessage(model.offerer.registrationKeyPair, contractAsJson); + Contract contract = new Contract( + model.offer, + trade.getTradeAmount(), + model.getTakeOfferFeeTxId(), + model.offerer.accountId, + model.taker.accountId, + model.offerer.fiatAccount, + model.taker.fiatAccount, + model.offerer.p2pSigPubKey, + model.taker.p2pSigPublicKey); + String contractAsJson = Utilities.objectToJson(contract); + String signature = model.signatureService.signMessage(model.offerer.registrationKeyPair, contractAsJson); - trade.setContract(contract); - trade.setContractAsJson(contractAsJson); - trade.setOffererContractSignature(signature); - trade.setTakerContractSignature(model.taker.contractSignature); + trade.setContract(contract); + trade.setContractAsJson(contractAsJson); + trade.setOffererContractSignature(signature); + trade.setTakerContractSignature(model.taker.contractSignature); - complete(); + complete(); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); + } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java index 30d2d50b72..6353b1dcab 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java @@ -33,12 +33,17 @@ public class VerifyTakeOfferFeePayment extends Task { @Override protected void doRun() { - //TODO mocked yet, need a confidence listeners - int numOfPeersSeenTx = model.walletService.getNumOfPeersSeenTx(model.getTakeOfferFeeTxId()); + try { + //TODO mocked yet, need a confidence listeners + int numOfPeersSeenTx = model.walletService.getNumOfPeersSeenTx(model.getTakeOfferFeeTxId()); /* if (numOfPeersSeenTx > 2) { resultHandler.handleResult(); }*/ - complete(); + complete(); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); + } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java index 02cc20e7fe..92afa133bd 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java @@ -33,18 +33,24 @@ public class VerifyTakerAccount extends Task { @Override protected void doRun() { - //TODO mocked yet - if (model.blockChainService.verifyAccountRegistration()) { - if (model.blockChainService.isAccountBlackListed(model.taker.accountId, model.taker.fiatAccount)) { - log.error("Taker is blacklisted"); - failed("Taker is blacklisted"); + try { + //TODO mocked yet + if (model.blockChainService.verifyAccountRegistration()) { + if (model.blockChainService.isAccountBlackListed(model.taker.accountId, model.taker.fiatAccount)) { + log.error("Taker is blacklisted"); + failed("Taker is blacklisted"); + } + else { + complete(); + } } else { - complete(); + failed("Account registration validation for peer failed."); } - } - else { - failed("Account registration validation for peer failed."); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); } } } + diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/BroadcastTakeOfferFeeTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/BroadcastTakeOfferFeeTx.java index 1a4970057b..9d30f720bf 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/BroadcastTakeOfferFeeTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/BroadcastTakeOfferFeeTx.java @@ -54,18 +54,16 @@ public class BroadcastTakeOfferFeeTx extends Task { @Override public void onFailure(@NotNull Throwable t) { + appendToErrorMessage("Take offer fee payment failed. Maybe your network connection was lost. Please try again."); + model.trade.setErrorMessage(errorMessage); model.trade.setProcessState(TakerTrade.TakerProcessState.TAKE_OFFER_FEE_PUBLISH_FAILED); failed(t); } }); - } catch (Exception e) { - appendToErrorMessage("Take offer fee payment failed. Maybe your network connection was lost. Please try again."); - appendToErrorMessage(e.getMessage()); - - model.trade.setProcessState(TakerTrade.TakerProcessState.UNSPECIFIC_FAULT); - - failed(e); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java index 85ef55b95f..3f89b6f98e 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java @@ -36,24 +36,29 @@ public class CreateAndSignContract extends Task { @Override protected void doRun() { - Trade trade = model.trade; - Contract contract = new Contract( - model.offer, - trade.getTradeAmount(), - model.getTakeOfferFeeTx().getHashAsString(), - model.offerer.accountId, - model.taker.accountId, - model.offerer.fiatAccount, - model.taker.fiatAccount, - model.offer.getP2PSigPubKey(), - model.taker.p2pSigPubKey); - String contractAsJson = Utilities.objectToJson(contract); - String signature = model.signatureService.signMessage(model.taker.registrationKeyPair, contractAsJson); + try { + Trade trade = model.trade; + Contract contract = new Contract( + model.offer, + trade.getTradeAmount(), + model.getTakeOfferFeeTx().getHashAsString(), + model.offerer.accountId, + model.taker.accountId, + model.offerer.fiatAccount, + model.taker.fiatAccount, + model.offer.getP2PSigPubKey(), + model.taker.p2pSigPubKey); + String contractAsJson = Utilities.objectToJson(contract); + String signature = model.signatureService.signMessage(model.taker.registrationKeyPair, contractAsJson); - trade.setContract(contract); - trade.setContractAsJson(contractAsJson); - trade.setTakerContractSignature(signature); + trade.setContract(contract); + trade.setContractAsJson(contractAsJson); + trade.setTakerContractSignature(signature); - complete(); + complete(); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); + } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateTakeOfferFeeTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateTakeOfferFeeTx.java index 0b5ad100e2..10ac299ac2 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateTakeOfferFeeTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateTakeOfferFeeTx.java @@ -43,12 +43,9 @@ public class CreateTakeOfferFeeTx extends Task { model.trade.setProcessState(TakerTrade.TakerProcessState.TAKE_OFFER_FEE_TX_CREATED); complete(); - } catch (Exception e) { - appendToErrorMessage(e.getMessage()); - - model.trade.setProcessState(TakerTrade.TakerProcessState.UNSPECIFIC_FAULT); - - failed(e); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java index c243aa9876..93935ee308 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java @@ -47,6 +47,7 @@ public class ProcessDepositTxPublishedMessage extends Task { complete(); } catch (Throwable t) { + model.trade.setThrowable(t); failed(t); } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessFiatTransferStartedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessFiatTransferStartedMessage.java index 3dd47b6b0e..2a2642d7ad 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessFiatTransferStartedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessFiatTransferStartedMessage.java @@ -50,7 +50,7 @@ public class ProcessFiatTransferStartedMessage extends Task complete(); } catch (Throwable t) { - model.trade.setProcessState(TakerTrade.TakerProcessState.UNSPECIFIC_FAULT); + model.trade.setThrowable(t); failed(t); } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRequestTakerDepositPaymentMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRequestTakerDepositPaymentMessage.java index e23df32950..9634ee3b9a 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRequestTakerDepositPaymentMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRequestTakerDepositPaymentMessage.java @@ -52,6 +52,7 @@ public class ProcessRequestTakerDepositPaymentMessage extends Task { @Override protected void doRun() { - PayoutTxPublishedMessage tradeMessage = new PayoutTxPublishedMessage(model.id, model.getPayoutTx()); - model.messageService.sendMessage(model.trade.getTradingPeer(), - tradeMessage, - model.offerer.p2pSigPublicKey, - model.offerer.p2pEncryptPubKey, - new SendMessageListener() { - @Override - public void handleResult() { - log.trace("PayoutTxPublishedMessage successfully arrived at peer"); - complete(); - } + try { + PayoutTxPublishedMessage tradeMessage = new PayoutTxPublishedMessage(model.id, model.getPayoutTx()); + model.messageService.sendMessage(model.trade.getTradingPeer(), + tradeMessage, + model.offerer.p2pSigPublicKey, + model.offerer.p2pEncryptPubKey, + new SendMessageListener() { + @Override + public void handleResult() { + log.trace("PayoutTxPublishedMessage successfully arrived at peer"); + complete(); + } - @Override - public void handleFault() { - failed("Sending PayoutTxPublishedMessage failed."); - } - }); + @Override + public void handleFault() { + appendToErrorMessage("Sending PayoutTxPublishedMessage failed"); + model.trade.setErrorMessage(errorMessage); + model.trade.setProcessState(TakerTrade.TakerProcessState.MESSAGE_SENDING_FAILED); + failed(); + } + }); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); + } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendRequestDepositTxInputsMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendRequestDepositTxInputsMessage.java index 52951d2d95..ab2aafec01 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendRequestDepositTxInputsMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendRequestDepositTxInputsMessage.java @@ -40,38 +40,44 @@ public class SendRequestDepositTxInputsMessage extends Task @Override protected void doRun() { - RequestDepositTxInputsMessage msg = new RequestDepositTxInputsMessage( - model.id, - model.getTakeOfferFeeTx().getHashAsString(), - model.trade.getTradeAmount(), - model.taker.tradeWalletPubKey - ); + try { + RequestDepositTxInputsMessage msg = new RequestDepositTxInputsMessage( + model.id, + model.getTakeOfferFeeTx().getHashAsString(), + model.trade.getTradeAmount(), + model.taker.tradeWalletPubKey); - model.messageService.sendMessage(model.trade.getTradingPeer(), msg, new SendMessageListener() { - @Override - public void handleResult() { - log.trace("Sending TakeOfferFeePayedMessage succeeded."); - complete(); - } - - @Override - public void handleFault() { - // Take offer fee is already paid, so we need to try to get that trade to succeed. - // We try to repeat once and if that fails as well we persist the state for a later retry. - if (retryCounter == 0) { - retryCounter++; - Platform.runLater(SendRequestDepositTxInputsMessage.this::doRun); + model.messageService.sendMessage(model.trade.getTradingPeer(), msg, new SendMessageListener() { + @Override + public void handleResult() { + log.trace("Sending TakeOfferFeePayedMessage succeeded."); + complete(); } - else { - appendToErrorMessage("Sending TakeOfferFeePayedMessage to offerer failed. Maybe the network connection was lost or the offerer lost his " + - "connection. " + - "We persisted the state of the trade, please try again later or cancel that trade."); - model.trade.setProcessState(TakerTrade.TakerProcessState.MESSAGE_SENDING_FAILED); + @Override + public void handleFault() { + log.warn("Sending TakeOfferFeePayedMessage failed. We try a second time."); + // Take offer fee is already paid, so we need to try to get that trade to succeed. + // We try to repeat once and if that fails as well we persist the state for a later retry. + if (retryCounter == 0) { + retryCounter++; + Platform.runLater(SendRequestDepositTxInputsMessage.this::doRun); + } + else { + appendToErrorMessage("Sending TakeOfferFeePayedMessage to offerer failed. Maybe the network connection was " + + "lost or the offerer lost his connection. We persisted the state of the trade, please try again later " + + "or cancel that trade."); - failed(); + model.trade.setErrorMessage(errorMessage); + model.trade.setProcessState(TakerTrade.TakerProcessState.MESSAGE_SENDING_FAILED); + + failed(); + } } - } - }); + }); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); + } } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTx.java index d54e489894..2f3b64acf5 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTx.java @@ -20,6 +20,7 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.common.taskrunner.Task; import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.p2p.listener.SendMessageListener; +import io.bitsquare.trade.TakerTrade; import io.bitsquare.trade.protocol.trade.messages.RequestOffererPublishDepositTxMessage; import io.bitsquare.trade.protocol.trade.taker.models.TakerAsSellerModel; @@ -35,30 +36,39 @@ public class SendSignedTakerDepositTx extends Task { @Override protected void doRun() { - RequestOffererPublishDepositTxMessage tradeMessage = new RequestOffererPublishDepositTxMessage( - model.id, - model.taker.fiatAccount, - model.taker.accountId, - model.taker.p2pSigPubKey, - model.taker.p2pEncryptPublicKey, - model.trade.getContractAsJson(), - model.trade.getTakerContractSignature(), - model.taker.addressEntry.getAddressString(), - model.taker.preparedDepositTx, - model.taker.connectedOutputsForAllInputs, - model.taker.outputs - ); + try { + RequestOffererPublishDepositTxMessage tradeMessage = new RequestOffererPublishDepositTxMessage( + model.id, + model.taker.fiatAccount, + model.taker.accountId, + model.taker.p2pSigPubKey, + model.taker.p2pEncryptPublicKey, + model.trade.getContractAsJson(), + model.trade.getTakerContractSignature(), + model.taker.addressEntry.getAddressString(), + model.taker.preparedDepositTx, + model.taker.connectedOutputsForAllInputs, + model.taker.outputs + ); - model.messageService.sendMessage(model.trade.getTradingPeer(), tradeMessage, new SendMessageListener() { - @Override - public void handleResult() { - complete(); - } + model.messageService.sendMessage(model.trade.getTradingPeer(), tradeMessage, new SendMessageListener() { + @Override + public void handleResult() { + complete(); + } - @Override - public void handleFault() { - failed("Sending RequestOffererDepositPublicationMessage failed"); - } - }); + @Override + public void handleFault() { + appendToErrorMessage("Sending RequestOffererDepositPublicationMessage failed"); + model.trade.setErrorMessage(errorMessage); + model.trade.setProcessState(TakerTrade.TakerProcessState.MESSAGE_SENDING_FAILED); + + failed(); + } + }); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); + } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java index c68306a583..3ac6803595 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java @@ -62,11 +62,13 @@ public class SignAndPublishPayoutTx extends Task { @Override public void onFailure(@NotNull Throwable t) { + model.trade.setThrowable(t); failed(t); } }); - } catch (Throwable e) { - failed(e); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java index 3984110ca1..8f521c05c1 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java @@ -22,7 +22,6 @@ import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.trade.protocol.trade.taker.models.TakerAsSellerModel; import org.bitcoinj.core.Transaction; -import org.bitcoinj.core.VerificationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,7 +42,8 @@ public class TakerCommitDepositTx extends Task { model.trade.setDepositTx(depositTx); complete(); - } catch (VerificationException t) { + } catch (Throwable t) { + model.trade.setThrowable(t); failed(t); } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCreatesAndSignsDepositTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCreatesAndSignsDepositTx.java index bb02ea23fa..8b0a127ab2 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCreatesAndSignsDepositTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCreatesAndSignsDepositTx.java @@ -21,7 +21,6 @@ import io.bitsquare.btc.FeePolicy; import io.bitsquare.btc.TradeWalletService; import io.bitsquare.common.taskrunner.Task; import io.bitsquare.common.taskrunner.TaskRunner; -import io.bitsquare.trade.TakerTrade; import io.bitsquare.trade.protocol.trade.taker.models.TakerAsSellerModel; import org.bitcoinj.core.Coin; @@ -58,12 +57,9 @@ public class TakerCreatesAndSignsDepositTx extends Task { model.taker.preparedDepositTx = result.getDepositTx(); complete(); - } catch (Exception e) { - TakerTrade.TakerProcessState processState = TakerTrade.TakerProcessState.UNSPECIFIC_FAULT; - processState.setErrorMessage(errorMessage); - model.trade.setProcessState(processState); - - failed(e); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java index cb5b9b60de..fa73006718 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java @@ -33,11 +33,16 @@ public class VerifyOfferFeePayment extends Task { @Override protected void doRun() { - //TODO impl. missing - int numOfPeersSeenTx = model.walletService.getNumOfPeersSeenTx(model.getTakeOfferFeeTx().getHashAsString()); + try { + //TODO impl. missing + int numOfPeersSeenTx = model.walletService.getNumOfPeersSeenTx(model.getTakeOfferFeeTx().getHashAsString()); /* if (numOfPeersSeenTx > 2) { resultHandler.handleResult(); }*/ - complete(); + complete(); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); + } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java index 72fa80f4fd..e5149640e7 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java @@ -33,16 +33,21 @@ public class VerifyOffererAccount extends Task { @Override protected void doRun() { - if (model.blockChainService.verifyAccountRegistration()) { - if (model.blockChainService.isAccountBlackListed(model.offerer.accountId, model.offerer.fiatAccount)) { - failed("Taker is blacklisted."); + try { + if (model.blockChainService.verifyAccountRegistration()) { + if (model.blockChainService.isAccountBlackListed(model.offerer.accountId, model.offerer.fiatAccount)) { + failed("Taker is blacklisted."); + } + else { + complete(); + } } else { - complete(); + failed("Account registration validation for peer faultHandler.onFault."); } - } - else { - failed("Account registration validation for peer faultHandler.onFault."); + } catch (Throwable t) { + model.trade.setThrowable(t); + failed(t); } } }