mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-24 23:18:17 +01:00
Cleanup state handling in domain
This commit is contained in:
parent
77bf67e465
commit
9936dca851
30 changed files with 314 additions and 228 deletions
|
@ -211,8 +211,8 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> 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<TakeOfferDataModel> im
|
|||
break;
|
||||
case PAYOUT_PUBLISHED:
|
||||
break;
|
||||
case UNSPECIFIC_FAULT:
|
||||
case EXCEPTION:
|
||||
errorMessage.set(msg);
|
||||
takeOfferRequested = false;
|
||||
break;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<Coin> tradeAmountProperty = new SimpleObjectProperty<>(tradeAmount);
|
||||
transient protected ObjectProperty<Fiat> 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<? extends ProcessState> processStateProperty();
|
||||
|
||||
abstract public ReadOnlyObjectProperty<? extends LifeCycleState> lifeCycleStateProperty();
|
||||
|
|
|
@ -57,8 +57,9 @@ public class CreateAndSignPayoutTx extends Task<OffererAsBuyerModel> {
|
|||
model.taker.payoutAmount = takerPayoutAmount;
|
||||
|
||||
complete();
|
||||
} catch (Exception e) {
|
||||
failed(e);
|
||||
} catch (Throwable t) {
|
||||
model.trade.setThrowable(t);
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,8 +46,9 @@ public class CreateOffererDepositTxInputs extends Task<OffererAsBuyerModel> {
|
|||
model.offerer.outputs = result.getOutputs();
|
||||
|
||||
complete();
|
||||
} catch (Throwable e) {
|
||||
failed(e);
|
||||
} catch (Throwable t) {
|
||||
model.trade.setThrowable(t);
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ public class ProcessPayoutTxPublishedMessage extends Task<OffererAsBuyerModel> {
|
|||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
||||
model.trade.setThrowable(t);
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,6 +49,7 @@ public class ProcessRequestDepositTxInputsMessage extends Task<OffererAsBuyerMod
|
|||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
||||
model.trade.setThrowable(t);
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@ public class ProcessRequestOffererPublishDepositTxMessage extends Task<OffererAs
|
|||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
||||
model.trade.setThrowable(t);
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.RequestTakerDepositPaymentMessage;
|
||||
import io.bitsquare.trade.protocol.trade.offerer.models.OffererAsBuyerModel;
|
||||
|
||||
|
@ -35,27 +36,35 @@ public class RequestTakerDepositPayment extends Task<OffererAsBuyerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ public class SendBankTransferStartedMessage extends Task<OffererAsBuyerModel> {
|
|||
}
|
||||
|
||||
@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<OffererAsBuyerModel> {
|
|||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<OffererAsBuyerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -66,11 +66,13 @@ public class SignAndPublishDepositTx extends Task<OffererAsBuyerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,26 +36,31 @@ public class VerifyAndSignContract extends Task<OffererAsBuyerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,12 +33,17 @@ public class VerifyTakeOfferFeePayment extends Task<OffererAsBuyerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,18 +33,24 @@ public class VerifyTakerAccount extends Task<OffererAsBuyerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -54,18 +54,16 @@ public class BroadcastTakeOfferFeeTx extends Task<TakerAsSellerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,24 +36,29 @@ public class CreateAndSignContract extends Task<TakerAsSellerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,12 +43,9 @@ public class CreateTakeOfferFeeTx extends Task<TakerAsSellerModel> {
|
|||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ public class ProcessDepositTxPublishedMessage extends Task<TakerAsSellerModel> {
|
|||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
||||
model.trade.setThrowable(t);
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ public class ProcessFiatTransferStartedMessage extends Task<TakerAsSellerModel>
|
|||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
||||
model.trade.setProcessState(TakerTrade.TakerProcessState.UNSPECIFIC_FAULT);
|
||||
model.trade.setThrowable(t);
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ public class ProcessRequestTakerDepositPaymentMessage extends Task<TakerAsSeller
|
|||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
||||
model.trade.setThrowable(t);
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.PayoutTxPublishedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.taker.models.TakerAsSellerModel;
|
||||
|
||||
|
@ -35,22 +36,30 @@ public class SendPayoutTxToOfferer extends Task<TakerAsSellerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,38 +40,44 @@ public class SendRequestDepositTxInputsMessage extends Task<TakerAsSellerModel>
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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<TakerAsSellerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,11 +62,13 @@ public class SignAndPublishPayoutTx extends Task<TakerAsSellerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<TakerAsSellerModel> {
|
|||
model.trade.setDepositTx(depositTx);
|
||||
|
||||
complete();
|
||||
} catch (VerificationException t) {
|
||||
} catch (Throwable t) {
|
||||
model.trade.setThrowable(t);
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<TakerAsSellerModel> {
|
|||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,11 +33,16 @@ public class VerifyOfferFeePayment extends Task<TakerAsSellerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,16 +33,21 @@ public class VerifyOffererAccount extends Task<TakerAsSellerModel> {
|
|||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue