mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-08-20 20:28:57 -04:00
Merge ProcessModels
This commit is contained in:
parent
238f36cffd
commit
ef6e72aaaa
57 changed files with 463 additions and 784 deletions
|
@ -21,7 +21,6 @@ import io.bitsquare.offer.Offer;
|
||||||
import io.bitsquare.p2p.Peer;
|
import io.bitsquare.p2p.Peer;
|
||||||
import io.bitsquare.storage.Storage;
|
import io.bitsquare.storage.Storage;
|
||||||
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
||||||
import io.bitsquare.trade.protocol.trade.offerer.models.OffererProcessModel;
|
|
||||||
|
|
||||||
import org.bitcoinj.core.Coin;
|
import org.bitcoinj.core.Coin;
|
||||||
import org.bitcoinj.utils.Fiat;
|
import org.bitcoinj.utils.Fiat;
|
||||||
|
@ -92,7 +91,7 @@ public abstract class OffererTrade extends Trade implements Serializable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProcessModel createProcessModel() {
|
public ProcessModel createProcessModel() {
|
||||||
return new OffererProcessModel();
|
return new ProcessModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -100,8 +99,8 @@ public abstract class OffererTrade extends Trade implements Serializable {
|
||||||
// Getter/Setter for Mutable objects
|
// Getter/Setter for Mutable objects
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
public OffererProcessModel getProcessModel() {
|
public ProcessModel getProcessModel() {
|
||||||
return (OffererProcessModel) processModel;
|
return processModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTradingPeer(Peer tradingPeer) {
|
public void setTradingPeer(Peer tradingPeer) {
|
||||||
|
|
|
@ -21,7 +21,6 @@ import io.bitsquare.offer.Offer;
|
||||||
import io.bitsquare.p2p.Peer;
|
import io.bitsquare.p2p.Peer;
|
||||||
import io.bitsquare.storage.Storage;
|
import io.bitsquare.storage.Storage;
|
||||||
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
||||||
import io.bitsquare.trade.protocol.trade.taker.models.TakerProcessModel;
|
|
||||||
|
|
||||||
import org.bitcoinj.core.Coin;
|
import org.bitcoinj.core.Coin;
|
||||||
import org.bitcoinj.utils.Fiat;
|
import org.bitcoinj.utils.Fiat;
|
||||||
|
@ -92,7 +91,7 @@ public abstract class TakerTrade extends Trade implements Serializable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProcessModel createProcessModel() {
|
public ProcessModel createProcessModel() {
|
||||||
return new TakerProcessModel();
|
return new ProcessModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -121,8 +120,8 @@ public abstract class TakerTrade extends Trade implements Serializable {
|
||||||
return tradingPeer;
|
return tradingPeer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TakerProcessModel getProcessModel() {
|
public ProcessModel getProcessModel() {
|
||||||
return (TakerProcessModel) processModel;
|
return processModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReadOnlyObjectProperty<Coin> tradeAmountProperty() {
|
public ReadOnlyObjectProperty<Coin> tradeAmountProperty() {
|
||||||
|
|
|
@ -18,21 +18,33 @@
|
||||||
package io.bitsquare.trade.protocol.trade;
|
package io.bitsquare.trade.protocol.trade;
|
||||||
|
|
||||||
import io.bitsquare.arbitration.ArbitrationRepository;
|
import io.bitsquare.arbitration.ArbitrationRepository;
|
||||||
|
import io.bitsquare.btc.AddressEntry;
|
||||||
import io.bitsquare.btc.BlockChainService;
|
import io.bitsquare.btc.BlockChainService;
|
||||||
import io.bitsquare.btc.TradeWalletService;
|
import io.bitsquare.btc.TradeWalletService;
|
||||||
import io.bitsquare.btc.WalletService;
|
import io.bitsquare.btc.WalletService;
|
||||||
import io.bitsquare.common.taskrunner.Model;
|
import io.bitsquare.common.taskrunner.Model;
|
||||||
import io.bitsquare.crypto.SignatureService;
|
import io.bitsquare.crypto.SignatureService;
|
||||||
|
import io.bitsquare.fiat.FiatAccount;
|
||||||
import io.bitsquare.offer.Offer;
|
import io.bitsquare.offer.Offer;
|
||||||
import io.bitsquare.p2p.MailboxMessage;
|
import io.bitsquare.p2p.MailboxMessage;
|
||||||
import io.bitsquare.p2p.MessageService;
|
import io.bitsquare.p2p.MessageService;
|
||||||
import io.bitsquare.trade.protocol.trade.messages.TradeMessage;
|
import io.bitsquare.trade.protocol.trade.messages.TradeMessage;
|
||||||
|
import io.bitsquare.trade.protocol.trade.shared.models.TradingPeer;
|
||||||
import io.bitsquare.user.User;
|
import io.bitsquare.user.User;
|
||||||
|
|
||||||
|
import org.bitcoinj.core.Coin;
|
||||||
|
import org.bitcoinj.core.Transaction;
|
||||||
|
import org.bitcoinj.core.TransactionOutput;
|
||||||
|
import org.bitcoinj.crypto.DeterministicKey;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import java.security.PublicKey;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -52,14 +64,25 @@ public class ProcessModel extends Model implements Serializable {
|
||||||
transient private SignatureService signatureService;
|
transient private SignatureService signatureService;
|
||||||
transient private ArbitrationRepository arbitrationRepository;
|
transient private ArbitrationRepository arbitrationRepository;
|
||||||
transient private Offer offer;
|
transient private Offer offer;
|
||||||
|
transient protected User user;
|
||||||
|
|
||||||
// Mutable
|
// Mutable
|
||||||
|
public final TradingPeer tradingPeer;
|
||||||
transient private MailboxMessage mailboxMessage;
|
transient private MailboxMessage mailboxMessage;
|
||||||
transient private TradeMessage tradeMessage;
|
transient private TradeMessage tradeMessage;
|
||||||
|
private String takeOfferFeeTxId;
|
||||||
|
private Transaction payoutTx;
|
||||||
|
private List<TransactionOutput> connectedOutputsForAllInputs;
|
||||||
|
private Coin payoutAmount;
|
||||||
|
private Transaction preparedDepositTx;
|
||||||
|
private List<TransactionOutput> outputs; // used to verify amounts with change outputs
|
||||||
|
private byte[] payoutTxSignature;
|
||||||
|
private Transaction takeOfferFeeTx;
|
||||||
|
|
||||||
|
|
||||||
protected ProcessModel() {
|
public ProcessModel() {
|
||||||
log.trace("Created by constructor");
|
log.trace("Created by constructor");
|
||||||
|
tradingPeer = new TradingPeer();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
|
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
|
||||||
|
@ -82,6 +105,7 @@ public class ProcessModel extends Model implements Serializable {
|
||||||
this.blockChainService = blockChainService;
|
this.blockChainService = blockChainService;
|
||||||
this.signatureService = signatureService;
|
this.signatureService = signatureService;
|
||||||
this.arbitrationRepository = arbitrationRepository;
|
this.arbitrationRepository = arbitrationRepository;
|
||||||
|
this.user = user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -151,4 +175,111 @@ public class ProcessModel extends Model implements Serializable {
|
||||||
"offer=" + offer +
|
"offer=" + offer +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Transaction getPayoutTx() {
|
||||||
|
return payoutTx;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPayoutTx(Transaction payoutTx) {
|
||||||
|
this.payoutTx = payoutTx;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Transaction getTakeOfferFeeTx() {
|
||||||
|
return takeOfferFeeTx;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTakeOfferFeeTx(Transaction takeOfferFeeTx) {
|
||||||
|
this.takeOfferFeeTx = takeOfferFeeTx;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FiatAccount getFiatAccount() {
|
||||||
|
return user.getFiatAccount(offer.getBankAccountId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeterministicKey getRegistrationKeyPair() {
|
||||||
|
return walletService.getRegistrationAddressEntry().getKeyPair();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAccountId() {
|
||||||
|
return user.getAccountId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicKey getP2pSigPubKey() {
|
||||||
|
return user.getP2PSigPubKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicKey getP2pEncryptPublicKey() {
|
||||||
|
return user.getP2PEncryptPubKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getRegistrationPubKey() {
|
||||||
|
return walletService.getRegistrationAddressEntry().getPubKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
public AddressEntry getAddressEntry() {
|
||||||
|
return walletService.getAddressEntry(offer.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getTradeWalletPubKey() {
|
||||||
|
return getAddressEntry().getPubKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicKey getP2pEncryptPubKey() {
|
||||||
|
return user.getP2PEncryptPubKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public List<TransactionOutput> getConnectedOutputsForAllInputs() {
|
||||||
|
return connectedOutputsForAllInputs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConnectedOutputsForAllInputs(List<TransactionOutput> connectedOutputsForAllInputs) {
|
||||||
|
this.connectedOutputsForAllInputs = connectedOutputsForAllInputs;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Coin getPayoutAmount() {
|
||||||
|
return payoutAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPayoutAmount(Coin payoutAmount) {
|
||||||
|
this.payoutAmount = payoutAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Transaction getPreparedDepositTx() {
|
||||||
|
return preparedDepositTx;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPreparedDepositTx(Transaction preparedDepositTx) {
|
||||||
|
this.preparedDepositTx = preparedDepositTx;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public List<TransactionOutput> getOutputs() {
|
||||||
|
return outputs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOutputs(List<TransactionOutput> outputs) {
|
||||||
|
this.outputs = outputs;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public byte[] getPayoutTxSignature() {
|
||||||
|
return payoutTxSignature;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPayoutTxSignature(byte[] payoutTxSignature) {
|
||||||
|
this.payoutTxSignature = payoutTxSignature;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTakeOfferFeeTxId() {
|
||||||
|
return takeOfferFeeTxId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTakeOfferFeeTxId(String takeOfferFeeTxId) {
|
||||||
|
this.takeOfferFeeTxId = takeOfferFeeTxId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import io.bitsquare.trade.OffererAsBuyerTrade;
|
||||||
import io.bitsquare.trade.protocol.Protocol;
|
import io.bitsquare.trade.protocol.Protocol;
|
||||||
import io.bitsquare.trade.protocol.availability.messages.ReportOfferAvailabilityMessage;
|
import io.bitsquare.trade.protocol.availability.messages.ReportOfferAvailabilityMessage;
|
||||||
import io.bitsquare.trade.protocol.availability.messages.RequestIsOfferAvailableMessage;
|
import io.bitsquare.trade.protocol.availability.messages.RequestIsOfferAvailableMessage;
|
||||||
|
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
||||||
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererCommitsPayoutTx;
|
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererCommitsPayoutTx;
|
||||||
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererCreatesAndSignPayoutTx;
|
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererCreatesAndSignPayoutTx;
|
||||||
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererCreatesDepositTxInputs;
|
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererCreatesDepositTxInputs;
|
||||||
|
@ -42,7 +43,6 @@ import io.bitsquare.trade.protocol.trade.messages.PayoutTxPublishedMessage;
|
||||||
import io.bitsquare.trade.protocol.trade.messages.RequestDepositTxInputsMessage;
|
import io.bitsquare.trade.protocol.trade.messages.RequestDepositTxInputsMessage;
|
||||||
import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxMessage;
|
import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxMessage;
|
||||||
import io.bitsquare.trade.protocol.trade.messages.TradeMessage;
|
import io.bitsquare.trade.protocol.trade.messages.TradeMessage;
|
||||||
import io.bitsquare.trade.protocol.trade.offerer.models.OffererProcessModel;
|
|
||||||
import io.bitsquare.trade.protocol.trade.shared.offerer.tasks.VerifyTakeOfferFeePayment;
|
import io.bitsquare.trade.protocol.trade.shared.offerer.tasks.VerifyTakeOfferFeePayment;
|
||||||
import io.bitsquare.trade.protocol.trade.shared.offerer.tasks.VerifyTakerAccount;
|
import io.bitsquare.trade.protocol.trade.shared.offerer.tasks.VerifyTakerAccount;
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ public class BuyerAsOffererProtocol implements Protocol {
|
||||||
|
|
||||||
private MessageHandler messageHandler;
|
private MessageHandler messageHandler;
|
||||||
private final OffererAsBuyerTrade offererAsBuyerTrade;
|
private final OffererAsBuyerTrade offererAsBuyerTrade;
|
||||||
private final OffererProcessModel offererTradeProcessModel;
|
private final ProcessModel processModel;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Constructor
|
// Constructor
|
||||||
|
@ -65,10 +65,10 @@ public class BuyerAsOffererProtocol implements Protocol {
|
||||||
public BuyerAsOffererProtocol(OffererAsBuyerTrade model) {
|
public BuyerAsOffererProtocol(OffererAsBuyerTrade model) {
|
||||||
log.debug("New OffererProtocol " + this);
|
log.debug("New OffererProtocol " + this);
|
||||||
this.offererAsBuyerTrade = model;
|
this.offererAsBuyerTrade = model;
|
||||||
offererTradeProcessModel = offererAsBuyerTrade.getProcessModel();
|
processModel = offererAsBuyerTrade.getProcessModel();
|
||||||
messageHandler = this::handleMessage;
|
messageHandler = this::handleMessage;
|
||||||
|
|
||||||
offererTradeProcessModel.getMessageService().addMessageHandler(messageHandler);
|
processModel.getMessageService().addMessageHandler(messageHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -79,8 +79,8 @@ public class BuyerAsOffererProtocol implements Protocol {
|
||||||
public void setMailboxMessage(MailboxMessage mailboxMessage) {
|
public void setMailboxMessage(MailboxMessage mailboxMessage) {
|
||||||
log.debug("setMailboxMessage " + mailboxMessage);
|
log.debug("setMailboxMessage " + mailboxMessage);
|
||||||
// Might be called twice, so check that its only processed once
|
// Might be called twice, so check that its only processed once
|
||||||
if (offererTradeProcessModel.getMailboxMessage() == null) {
|
if (processModel.getMailboxMessage() == null) {
|
||||||
offererTradeProcessModel.setMailboxMessage(mailboxMessage);
|
processModel.setMailboxMessage(mailboxMessage);
|
||||||
if (mailboxMessage instanceof PayoutTxPublishedMessage) {
|
if (mailboxMessage instanceof PayoutTxPublishedMessage) {
|
||||||
handlePayoutTxPublishedMessage((PayoutTxPublishedMessage) mailboxMessage);
|
handlePayoutTxPublishedMessage((PayoutTxPublishedMessage) mailboxMessage);
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ public class BuyerAsOffererProtocol implements Protocol {
|
||||||
log.debug("cleanup " + this);
|
log.debug("cleanup " + this);
|
||||||
|
|
||||||
if (messageHandler != null) {
|
if (messageHandler != null) {
|
||||||
offererTradeProcessModel.getMessageService().removeMessageHandler(messageHandler);
|
processModel.getMessageService().removeMessageHandler(messageHandler);
|
||||||
messageHandler = null;
|
messageHandler = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,15 +103,15 @@ public class BuyerAsOffererProtocol implements Protocol {
|
||||||
// OpenOffer requests
|
// OpenOffer requests
|
||||||
private void handleRequestIsOfferAvailableMessage(RequestIsOfferAvailableMessage tradeMessage, Peer sender) {
|
private void handleRequestIsOfferAvailableMessage(RequestIsOfferAvailableMessage tradeMessage, Peer sender) {
|
||||||
try {
|
try {
|
||||||
checkTradeId(offererTradeProcessModel.getId(), tradeMessage);
|
checkTradeId(processModel.getId(), tradeMessage);
|
||||||
|
|
||||||
// We don't store anything in the offererTradeProcessModel as we might be in a trade process and receive that request from another peer who wants
|
// We don't store anything in the offererTradeProcessModel as we might be in a trade process and receive that request from another peer who wants
|
||||||
// to take the
|
// to take the
|
||||||
// offer
|
// offer
|
||||||
// at the same time
|
// at the same time
|
||||||
boolean isOfferOpen = offererAsBuyerTrade.lifeCycleStateProperty().get() == OffererAsBuyerTrade.LifeCycleState.OFFER_OPEN;
|
boolean isOfferOpen = offererAsBuyerTrade.lifeCycleStateProperty().get() == OffererAsBuyerTrade.LifeCycleState.OFFER_OPEN;
|
||||||
ReportOfferAvailabilityMessage reportOfferAvailabilityMessage = new ReportOfferAvailabilityMessage(offererTradeProcessModel.getId(), isOfferOpen);
|
ReportOfferAvailabilityMessage reportOfferAvailabilityMessage = new ReportOfferAvailabilityMessage(processModel.getId(), isOfferOpen);
|
||||||
offererTradeProcessModel.getMessageService().sendMessage(sender, reportOfferAvailabilityMessage, new SendMessageListener() {
|
processModel.getMessageService().sendMessage(sender, reportOfferAvailabilityMessage, new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
// Offerer does not do anything at that moment. Peer might only watch the offer and does not start a trade.
|
// Offerer does not do anything at that moment. Peer might only watch the offer and does not start a trade.
|
||||||
|
@ -132,8 +132,8 @@ public class BuyerAsOffererProtocol implements Protocol {
|
||||||
|
|
||||||
// Trade started. We reserve the offer for that taker. If anything goes wrong we reset the offer as open.
|
// Trade started. We reserve the offer for that taker. If anything goes wrong we reset the offer as open.
|
||||||
private void handleRequestDepositTxInputsMessage(RequestDepositTxInputsMessage tradeMessage, Peer taker) {
|
private void handleRequestDepositTxInputsMessage(RequestDepositTxInputsMessage tradeMessage, Peer taker) {
|
||||||
checkTradeId(offererTradeProcessModel.getId(), tradeMessage);
|
checkTradeId(processModel.getId(), tradeMessage);
|
||||||
offererTradeProcessModel.setTradeMessage(tradeMessage);
|
processModel.setTradeMessage(tradeMessage);
|
||||||
offererAsBuyerTrade.setTradingPeer(taker);
|
offererAsBuyerTrade.setTradingPeer(taker);
|
||||||
|
|
||||||
offererAsBuyerTrade.setLifeCycleState(OffererAsBuyerTrade.LifeCycleState.OFFER_RESERVED);
|
offererAsBuyerTrade.setLifeCycleState(OffererAsBuyerTrade.LifeCycleState.OFFER_RESERVED);
|
||||||
|
@ -150,7 +150,7 @@ public class BuyerAsOffererProtocol implements Protocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleRequestPublishDepositTxMessage(RequestPublishDepositTxMessage tradeMessage) {
|
private void handleRequestPublishDepositTxMessage(RequestPublishDepositTxMessage tradeMessage) {
|
||||||
offererTradeProcessModel.setTradeMessage(tradeMessage);
|
processModel.setTradeMessage(tradeMessage);
|
||||||
|
|
||||||
TaskRunner<OffererAsBuyerTrade> taskRunner = new TaskRunner<>(offererAsBuyerTrade,
|
TaskRunner<OffererAsBuyerTrade> taskRunner = new TaskRunner<>(offererAsBuyerTrade,
|
||||||
() -> log.debug("taskRunner at handleRequestPublishDepositTxMessage completed"),
|
() -> log.debug("taskRunner at handleRequestPublishDepositTxMessage completed"),
|
||||||
|
@ -189,13 +189,13 @@ public class BuyerAsOffererProtocol implements Protocol {
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
private void handlePayoutTxPublishedMessage(PayoutTxPublishedMessage tradeMessage) {
|
private void handlePayoutTxPublishedMessage(PayoutTxPublishedMessage tradeMessage) {
|
||||||
offererTradeProcessModel.setTradeMessage(tradeMessage);
|
processModel.setTradeMessage(tradeMessage);
|
||||||
|
|
||||||
TaskRunner<OffererAsBuyerTrade> taskRunner = new TaskRunner<>(offererAsBuyerTrade,
|
TaskRunner<OffererAsBuyerTrade> taskRunner = new TaskRunner<>(offererAsBuyerTrade,
|
||||||
() -> {
|
() -> {
|
||||||
log.debug("taskRunner at handlePayoutTxPublishedMessage completed");
|
log.debug("taskRunner at handlePayoutTxPublishedMessage completed");
|
||||||
// we are done!
|
// we are done!
|
||||||
offererTradeProcessModel.onComplete();
|
processModel.onComplete();
|
||||||
},
|
},
|
||||||
this::handleTaskRunnerFault);
|
this::handleTaskRunnerFault);
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class OffererCommitsPayoutTx extends OffererTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
Transaction transaction = offererTradeProcessModel.getTradeWalletService().commitTx(offererTrade.getPayoutTx());
|
Transaction transaction = processModel.getTradeWalletService().commitTx(offererTrade.getPayoutTx());
|
||||||
|
|
||||||
offererTrade.setPayoutTx(transaction);
|
offererTrade.setPayoutTx(transaction);
|
||||||
|
|
||||||
|
|
|
@ -41,19 +41,19 @@ public class OffererCreatesAndSignPayoutTx extends OffererTradeTask {
|
||||||
Coin offererPayoutAmount = securityDeposit.add(offererTrade.getTradeAmount());
|
Coin offererPayoutAmount = securityDeposit.add(offererTrade.getTradeAmount());
|
||||||
Coin takerPayoutAmount = securityDeposit;
|
Coin takerPayoutAmount = securityDeposit;
|
||||||
|
|
||||||
byte[] offererPayoutTxSignature = offererTradeProcessModel.getTradeWalletService().createAndSignPayoutTx(
|
byte[] offererPayoutTxSignature = processModel.getTradeWalletService().createAndSignPayoutTx(
|
||||||
offererTrade.getDepositTx(),
|
offererTrade.getDepositTx(),
|
||||||
offererPayoutAmount,
|
offererPayoutAmount,
|
||||||
takerPayoutAmount,
|
takerPayoutAmount,
|
||||||
offererTradeProcessModel.getAddressEntry(),
|
processModel.getAddressEntry(),
|
||||||
offererTradeProcessModel.tradingPeer.getPayoutAddressString(),
|
processModel.tradingPeer.getPayoutAddressString(),
|
||||||
offererTradeProcessModel.getTradeWalletPubKey(),
|
processModel.getTradeWalletPubKey(),
|
||||||
offererTradeProcessModel.tradingPeer.getTradeWalletPubKey(),
|
processModel.tradingPeer.getTradeWalletPubKey(),
|
||||||
offererTradeProcessModel.getArbitratorPubKey());
|
processModel.getArbitratorPubKey());
|
||||||
|
|
||||||
offererTradeProcessModel.setPayoutTxSignature(offererPayoutTxSignature);
|
processModel.setPayoutTxSignature(offererPayoutTxSignature);
|
||||||
offererTradeProcessModel.setPayoutAmount(offererPayoutAmount);
|
processModel.setPayoutAmount(offererPayoutAmount);
|
||||||
offererTradeProcessModel.tradingPeer.setPayoutAmount(takerPayoutAmount);
|
processModel.tradingPeer.setPayoutAmount(takerPayoutAmount);
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
|
|
@ -42,11 +42,11 @@ public class OffererCreatesDepositTxInputs extends OffererTradeTask {
|
||||||
try {
|
try {
|
||||||
log.debug("offererTrade.id" + offererTrade.getId());
|
log.debug("offererTrade.id" + offererTrade.getId());
|
||||||
Coin inputAmount = offererTrade.getSecurityDeposit().add(FeePolicy.TX_FEE);
|
Coin inputAmount = offererTrade.getSecurityDeposit().add(FeePolicy.TX_FEE);
|
||||||
TradeWalletService.Result result = offererTradeProcessModel.getTradeWalletService().createDepositTxInputs(inputAmount,
|
TradeWalletService.Result result = processModel.getTradeWalletService().createDepositTxInputs(inputAmount,
|
||||||
offererTradeProcessModel.getAddressEntry());
|
processModel.getAddressEntry());
|
||||||
|
|
||||||
offererTradeProcessModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs());
|
processModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs());
|
||||||
offererTradeProcessModel.setOutputs(result.getOutputs());
|
processModel.setOutputs(result.getOutputs());
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
|
|
@ -40,8 +40,8 @@ public class OffererProcessPayoutTxPublishedMessage extends OffererTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
PayoutTxPublishedMessage message = (PayoutTxPublishedMessage) offererTradeProcessModel.getTradeMessage();
|
PayoutTxPublishedMessage message = (PayoutTxPublishedMessage) processModel.getTradeMessage();
|
||||||
checkTradeId(offererTradeProcessModel.getId(), message);
|
checkTradeId(processModel.getId(), message);
|
||||||
checkNotNull(message);
|
checkNotNull(message);
|
||||||
|
|
||||||
offererTrade.setPayoutTx(checkNotNull(message.payoutTx));
|
offererTrade.setPayoutTx(checkNotNull(message.payoutTx));
|
||||||
|
|
|
@ -40,13 +40,13 @@ public class OffererProcessRequestDepositTxInputsMessage extends OffererTradeTas
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
RequestDepositTxInputsMessage message = (RequestDepositTxInputsMessage) offererTradeProcessModel.getTradeMessage();
|
RequestDepositTxInputsMessage message = (RequestDepositTxInputsMessage) processModel.getTradeMessage();
|
||||||
checkTradeId(offererTradeProcessModel.getId(), message);
|
checkTradeId(processModel.getId(), message);
|
||||||
checkNotNull(message);
|
checkNotNull(message);
|
||||||
|
|
||||||
offererTrade.setTradeAmount(positiveCoinOf(nonZeroCoinOf(message.tradeAmount)));
|
offererTrade.setTradeAmount(positiveCoinOf(nonZeroCoinOf(message.tradeAmount)));
|
||||||
offererTradeProcessModel.setTakeOfferFeeTxId(nonEmptyStringOf(message.takeOfferFeeTxId));
|
processModel.setTakeOfferFeeTxId(nonEmptyStringOf(message.takeOfferFeeTxId));
|
||||||
offererTradeProcessModel.tradingPeer.setTradeWalletPubKey(checkNotNull(message.takerTradeWalletPubKey));
|
processModel.tradingPeer.setTradeWalletPubKey(checkNotNull(message.takerTradeWalletPubKey));
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
|
|
@ -40,19 +40,19 @@ public class OffererProcessRequestPublishDepositTxMessage extends OffererTradeTa
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
RequestPublishDepositTxMessage message = (RequestPublishDepositTxMessage) offererTradeProcessModel.getTradeMessage();
|
RequestPublishDepositTxMessage message = (RequestPublishDepositTxMessage) processModel.getTradeMessage();
|
||||||
checkTradeId(offererTradeProcessModel.getId(), message);
|
checkTradeId(processModel.getId(), message);
|
||||||
checkNotNull(message);
|
checkNotNull(message);
|
||||||
|
|
||||||
offererTradeProcessModel.tradingPeer.setFiatAccount(checkNotNull(message.takerFiatAccount));
|
processModel.tradingPeer.setFiatAccount(checkNotNull(message.takerFiatAccount));
|
||||||
offererTradeProcessModel.tradingPeer.setAccountId(nonEmptyStringOf(message.takerAccountId));
|
processModel.tradingPeer.setAccountId(nonEmptyStringOf(message.takerAccountId));
|
||||||
offererTradeProcessModel.tradingPeer.setP2pSigPubKey(checkNotNull(message.takerP2PSigPublicKey));
|
processModel.tradingPeer.setP2pSigPubKey(checkNotNull(message.takerP2PSigPublicKey));
|
||||||
offererTradeProcessModel.tradingPeer.setP2pEncryptPubKey(checkNotNull(message.takerP2PEncryptPublicKey));
|
processModel.tradingPeer.setP2pEncryptPubKey(checkNotNull(message.takerP2PEncryptPublicKey));
|
||||||
offererTradeProcessModel.tradingPeer.setContractAsJson(nonEmptyStringOf(message.takerContractAsJson));
|
processModel.tradingPeer.setContractAsJson(nonEmptyStringOf(message.takerContractAsJson));
|
||||||
offererTradeProcessModel.tradingPeer.setContractSignature(nonEmptyStringOf(message.takerContractSignature));
|
processModel.tradingPeer.setContractSignature(nonEmptyStringOf(message.takerContractSignature));
|
||||||
offererTradeProcessModel.tradingPeer.setPayoutAddressString(nonEmptyStringOf(message.takerPayoutAddressString));
|
processModel.tradingPeer.setPayoutAddressString(nonEmptyStringOf(message.takerPayoutAddressString));
|
||||||
offererTradeProcessModel.tradingPeer.setPreparedDepositTx(checkNotNull(message.takersPreparedDepositTx));
|
processModel.tradingPeer.setPreparedDepositTx(checkNotNull(message.takersPreparedDepositTx));
|
||||||
offererTradeProcessModel.tradingPeer.setConnectedOutputsForAllInputs(checkNotNull(message.takerConnectedOutputsForAllInputs));
|
processModel.tradingPeer.setConnectedOutputsForAllInputs(checkNotNull(message.takerConnectedOutputsForAllInputs));
|
||||||
checkArgument(message.takerConnectedOutputsForAllInputs.size() > 0);
|
checkArgument(message.takerConnectedOutputsForAllInputs.size() > 0);
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
|
|
|
@ -38,9 +38,9 @@ public class OffererSendsDepositTxPublishedMessage extends OffererTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
DepositTxPublishedMessage tradeMessage = new DepositTxPublishedMessage(offererTradeProcessModel.getId(), offererTrade.getDepositTx());
|
DepositTxPublishedMessage tradeMessage = new DepositTxPublishedMessage(processModel.getId(), offererTrade.getDepositTx());
|
||||||
|
|
||||||
offererTradeProcessModel.getMessageService().sendMessage(offererTrade.getTradingPeer(), tradeMessage, new SendMessageListener() {
|
processModel.getMessageService().sendMessage(offererTrade.getTradingPeer(), tradeMessage, new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
log.trace("DepositTxPublishedMessage successfully arrived at peer");
|
log.trace("DepositTxPublishedMessage successfully arrived at peer");
|
||||||
|
|
|
@ -38,15 +38,15 @@ public class OffererSendsFiatTransferStartedMessage extends OffererTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
FiatTransferStartedMessage tradeMessage = new FiatTransferStartedMessage(offererTradeProcessModel.getId(),
|
FiatTransferStartedMessage tradeMessage = new FiatTransferStartedMessage(processModel.getId(),
|
||||||
offererTradeProcessModel.getPayoutTxSignature(),
|
processModel.getPayoutTxSignature(),
|
||||||
offererTradeProcessModel.getPayoutAmount(),
|
processModel.getPayoutAmount(),
|
||||||
offererTradeProcessModel.tradingPeer.getPayoutAmount(),
|
processModel.tradingPeer.getPayoutAmount(),
|
||||||
offererTradeProcessModel.getAddressEntry().getAddressString());
|
processModel.getAddressEntry().getAddressString());
|
||||||
|
|
||||||
offererTradeProcessModel.getMessageService().sendMessage(offererTrade.getTradingPeer(), tradeMessage,
|
processModel.getMessageService().sendMessage(offererTrade.getTradingPeer(), tradeMessage,
|
||||||
offererTradeProcessModel.tradingPeer.getP2pSigPubKey(),
|
processModel.tradingPeer.getP2pSigPubKey(),
|
||||||
offererTradeProcessModel.tradingPeer.getP2pEncryptPubKey(),
|
processModel.tradingPeer.getP2pEncryptPubKey(),
|
||||||
new SendMessageListener() {
|
new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
|
|
|
@ -39,16 +39,16 @@ public class OffererSendsRequestSellerDepositPaymentMessage extends OffererTrade
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
RequestPayDepositMessage tradeMessage = new RequestPayDepositMessage(
|
RequestPayDepositMessage tradeMessage = new RequestPayDepositMessage(
|
||||||
offererTradeProcessModel.getId(),
|
processModel.getId(),
|
||||||
offererTradeProcessModel.getConnectedOutputsForAllInputs(),
|
processModel.getConnectedOutputsForAllInputs(),
|
||||||
offererTradeProcessModel.getOutputs(),
|
processModel.getOutputs(),
|
||||||
offererTradeProcessModel.getTradeWalletPubKey(),
|
processModel.getTradeWalletPubKey(),
|
||||||
offererTradeProcessModel.getP2pSigPubKey(),
|
processModel.getP2pSigPubKey(),
|
||||||
offererTradeProcessModel.getP2pEncryptPubKey(),
|
processModel.getP2pEncryptPubKey(),
|
||||||
offererTradeProcessModel.getFiatAccount(),
|
processModel.getFiatAccount(),
|
||||||
offererTradeProcessModel.getAccountId());
|
processModel.getAccountId());
|
||||||
|
|
||||||
offererTradeProcessModel.getMessageService().sendMessage(offererTrade.getTradingPeer(), tradeMessage, new SendMessageListener() {
|
processModel.getMessageService().sendMessage(offererTrade.getTradingPeer(), tradeMessage, new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
log.trace("RequestTakerDepositPaymentMessage successfully arrived at peer");
|
log.trace("RequestTakerDepositPaymentMessage successfully arrived at peer");
|
||||||
|
|
|
@ -46,15 +46,15 @@ public class OffererSignsAndPublishDepositTx extends OffererTradeTask {
|
||||||
try {
|
try {
|
||||||
Coin inputAmount = offererTrade.getSecurityDeposit().add(FeePolicy.TX_FEE);
|
Coin inputAmount = offererTrade.getSecurityDeposit().add(FeePolicy.TX_FEE);
|
||||||
|
|
||||||
offererTradeProcessModel.getTradeWalletService().signAndPublishDepositTx(
|
processModel.getTradeWalletService().signAndPublishDepositTx(
|
||||||
offererTradeProcessModel.tradingPeer.getPreparedDepositTx(),
|
processModel.tradingPeer.getPreparedDepositTx(),
|
||||||
offererTradeProcessModel.getConnectedOutputsForAllInputs(),
|
processModel.getConnectedOutputsForAllInputs(),
|
||||||
offererTradeProcessModel.tradingPeer.getConnectedOutputsForAllInputs(),
|
processModel.tradingPeer.getConnectedOutputsForAllInputs(),
|
||||||
offererTradeProcessModel.getOutputs(),
|
processModel.getOutputs(),
|
||||||
inputAmount,
|
inputAmount,
|
||||||
offererTradeProcessModel.getTradeWalletPubKey(),
|
processModel.getTradeWalletPubKey(),
|
||||||
offererTradeProcessModel.tradingPeer.getTradeWalletPubKey(),
|
processModel.tradingPeer.getTradeWalletPubKey(),
|
||||||
offererTradeProcessModel.getArbitratorPubKey(),
|
processModel.getArbitratorPubKey(),
|
||||||
new FutureCallback<Transaction>() {
|
new FutureCallback<Transaction>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Transaction transaction) {
|
public void onSuccess(Transaction transaction) {
|
||||||
|
|
|
@ -39,23 +39,23 @@ public class OffererVerifiesAndSignsContract extends OffererTradeTask {
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
Contract contract = new Contract(
|
Contract contract = new Contract(
|
||||||
offererTradeProcessModel.getOffer(),
|
processModel.getOffer(),
|
||||||
offererTrade.getTradeAmount(),
|
offererTrade.getTradeAmount(),
|
||||||
offererTradeProcessModel.getTakeOfferFeeTxId(),
|
processModel.getTakeOfferFeeTxId(),
|
||||||
offererTradeProcessModel.getAccountId(),
|
processModel.getAccountId(),
|
||||||
offererTradeProcessModel.tradingPeer.getAccountId(),
|
processModel.tradingPeer.getAccountId(),
|
||||||
offererTradeProcessModel.getFiatAccount(),
|
processModel.getFiatAccount(),
|
||||||
offererTradeProcessModel.tradingPeer.getFiatAccount(),
|
processModel.tradingPeer.getFiatAccount(),
|
||||||
offererTradeProcessModel.getP2pSigPubKey(),
|
processModel.getP2pSigPubKey(),
|
||||||
offererTradeProcessModel.tradingPeer.getP2pSigPubKey());
|
processModel.tradingPeer.getP2pSigPubKey());
|
||||||
String contractAsJson = Utilities.objectToJson(contract);
|
String contractAsJson = Utilities.objectToJson(contract);
|
||||||
String signature = offererTradeProcessModel.getSignatureService().signMessage(offererTradeProcessModel.getRegistrationKeyPair(),
|
String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(),
|
||||||
contractAsJson);
|
contractAsJson);
|
||||||
|
|
||||||
offererTrade.setContract(contract);
|
offererTrade.setContract(contract);
|
||||||
offererTrade.setContractAsJson(contractAsJson);
|
offererTrade.setContractAsJson(contractAsJson);
|
||||||
offererTrade.setOffererContractSignature(signature);
|
offererTrade.setOffererContractSignature(signature);
|
||||||
offererTrade.setTakerContractSignature(offererTradeProcessModel.tradingPeer.getContractSignature());
|
offererTrade.setTakerContractSignature(processModel.tradingPeer.getContractSignature());
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
|
|
@ -24,6 +24,7 @@ import io.bitsquare.p2p.MessageHandler;
|
||||||
import io.bitsquare.p2p.Peer;
|
import io.bitsquare.p2p.Peer;
|
||||||
import io.bitsquare.trade.TakerAsBuyerTrade;
|
import io.bitsquare.trade.TakerAsBuyerTrade;
|
||||||
import io.bitsquare.trade.protocol.Protocol;
|
import io.bitsquare.trade.protocol.Protocol;
|
||||||
|
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
||||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerCommitsPayoutTx;
|
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerCommitsPayoutTx;
|
||||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerCreatesAndSignsPayoutTx;
|
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerCreatesAndSignsPayoutTx;
|
||||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerCreatesDepositTxInputs;
|
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerCreatesDepositTxInputs;
|
||||||
|
@ -41,7 +42,6 @@ import io.bitsquare.trade.protocol.trade.shared.taker.tasks.BroadcastTakeOfferFe
|
||||||
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.CreateTakeOfferFeeTx;
|
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.CreateTakeOfferFeeTx;
|
||||||
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.VerifyOfferFeePayment;
|
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.VerifyOfferFeePayment;
|
||||||
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.VerifyOffererAccount;
|
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.VerifyOffererAccount;
|
||||||
import io.bitsquare.trade.protocol.trade.taker.models.TakerProcessModel;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -52,7 +52,7 @@ public class BuyerAsTakerProtocol implements Protocol {
|
||||||
private static final Logger log = LoggerFactory.getLogger(BuyerAsTakerProtocol.class);
|
private static final Logger log = LoggerFactory.getLogger(BuyerAsTakerProtocol.class);
|
||||||
|
|
||||||
private final TakerAsBuyerTrade takerAsBuyerTrade;
|
private final TakerAsBuyerTrade takerAsBuyerTrade;
|
||||||
private final TakerProcessModel takerTradeProcessModel;
|
private final ProcessModel processModel;
|
||||||
private final MessageHandler messageHandler;
|
private final MessageHandler messageHandler;
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,10 +63,10 @@ public class BuyerAsTakerProtocol implements Protocol {
|
||||||
public BuyerAsTakerProtocol(TakerAsBuyerTrade takerTrade) {
|
public BuyerAsTakerProtocol(TakerAsBuyerTrade takerTrade) {
|
||||||
log.debug("New SellerAsTakerProtocol " + this);
|
log.debug("New SellerAsTakerProtocol " + this);
|
||||||
this.takerAsBuyerTrade = takerTrade;
|
this.takerAsBuyerTrade = takerTrade;
|
||||||
takerTradeProcessModel = takerTrade.getProcessModel();
|
processModel = takerTrade.getProcessModel();
|
||||||
|
|
||||||
messageHandler = this::handleMessage;
|
messageHandler = this::handleMessage;
|
||||||
takerTradeProcessModel.getMessageService().addMessageHandler(messageHandler);
|
processModel.getMessageService().addMessageHandler(messageHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ public class BuyerAsTakerProtocol implements Protocol {
|
||||||
|
|
||||||
public void cleanup() {
|
public void cleanup() {
|
||||||
log.debug("cleanup " + this);
|
log.debug("cleanup " + this);
|
||||||
takerTradeProcessModel.getMessageService().removeMessageHandler(messageHandler);
|
processModel.getMessageService().removeMessageHandler(messageHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMailboxMessage(MailboxMessage mailboxMessage) {
|
public void setMailboxMessage(MailboxMessage mailboxMessage) {
|
||||||
|
@ -113,7 +113,7 @@ public class BuyerAsTakerProtocol implements Protocol {
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
private void handle(RequestPublishDepositTxMessage tradeMessage) {
|
private void handle(RequestPublishDepositTxMessage tradeMessage) {
|
||||||
takerTradeProcessModel.setTradeMessage(tradeMessage);
|
processModel.setTradeMessage(tradeMessage);
|
||||||
|
|
||||||
TaskRunner<TakerAsBuyerTrade> taskRunner = new TaskRunner<>(takerAsBuyerTrade,
|
TaskRunner<TakerAsBuyerTrade> taskRunner = new TaskRunner<>(takerAsBuyerTrade,
|
||||||
() -> log.debug("taskRunner at handleRequestPublishDepositTxMessage completed"),
|
() -> log.debug("taskRunner at handleRequestPublishDepositTxMessage completed"),
|
||||||
|
@ -152,13 +152,13 @@ public class BuyerAsTakerProtocol implements Protocol {
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
private void handle(PayoutTxPublishedMessage tradeMessage) {
|
private void handle(PayoutTxPublishedMessage tradeMessage) {
|
||||||
takerTradeProcessModel.setTradeMessage(tradeMessage);
|
processModel.setTradeMessage(tradeMessage);
|
||||||
|
|
||||||
TaskRunner<TakerAsBuyerTrade> taskRunner = new TaskRunner<>(takerAsBuyerTrade,
|
TaskRunner<TakerAsBuyerTrade> taskRunner = new TaskRunner<>(takerAsBuyerTrade,
|
||||||
() -> {
|
() -> {
|
||||||
log.debug("taskRunner at handlePayoutTxPublishedMessage completed");
|
log.debug("taskRunner at handlePayoutTxPublishedMessage completed");
|
||||||
// we are done!
|
// we are done!
|
||||||
takerTradeProcessModel.onComplete();
|
processModel.onComplete();
|
||||||
},
|
},
|
||||||
this::handleTaskRunnerFault);
|
this::handleTaskRunnerFault);
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ public class BuyerAsTakerProtocol implements Protocol {
|
||||||
TradeMessage tradeMessage = (TradeMessage) message;
|
TradeMessage tradeMessage = (TradeMessage) message;
|
||||||
nonEmptyStringOf(tradeMessage.tradeId);
|
nonEmptyStringOf(tradeMessage.tradeId);
|
||||||
|
|
||||||
if (tradeMessage.tradeId.equals(takerTradeProcessModel.getId())) {
|
if (tradeMessage.tradeId.equals(processModel.getId())) {
|
||||||
if (tradeMessage instanceof RequestPublishDepositTxMessage) {
|
if (tradeMessage instanceof RequestPublishDepositTxMessage) {
|
||||||
handle((RequestPublishDepositTxMessage) tradeMessage);
|
handle((RequestPublishDepositTxMessage) tradeMessage);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class TakerCommitsPayoutTx extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
Transaction transaction = takerTradeProcessModel.getTradeWalletService().commitTx(takerTrade.getPayoutTx());
|
Transaction transaction = processModel.getTradeWalletService().commitTx(takerTrade.getPayoutTx());
|
||||||
|
|
||||||
takerTrade.setPayoutTx(transaction);
|
takerTrade.setPayoutTx(transaction);
|
||||||
|
|
||||||
|
|
|
@ -43,19 +43,19 @@ public class TakerCreatesAndSignsPayoutTx extends TakerTradeTask {
|
||||||
Coin takerPayoutAmount = securityDeposit.add(takerTrade.getTradeAmount());
|
Coin takerPayoutAmount = securityDeposit.add(takerTrade.getTradeAmount());
|
||||||
|
|
||||||
|
|
||||||
byte[] takerPayoutTxSignature = takerTradeProcessModel.getTradeWalletService().createAndSignPayoutTx(
|
byte[] takerPayoutTxSignature = processModel.getTradeWalletService().createAndSignPayoutTx(
|
||||||
takerTrade.getDepositTx(),
|
takerTrade.getDepositTx(),
|
||||||
takerPayoutAmount,
|
takerPayoutAmount,
|
||||||
offererPayoutAmount,
|
offererPayoutAmount,
|
||||||
takerTradeProcessModel.getAddressEntry(),
|
processModel.getAddressEntry(),
|
||||||
takerTradeProcessModel.tradingPeer.getPayoutAddressString(),
|
processModel.tradingPeer.getPayoutAddressString(),
|
||||||
takerTradeProcessModel.getTradeWalletPubKey(),
|
processModel.getTradeWalletPubKey(),
|
||||||
takerTradeProcessModel.tradingPeer.getTradeWalletPubKey(),
|
processModel.tradingPeer.getTradeWalletPubKey(),
|
||||||
takerTradeProcessModel.getArbitratorPubKey());
|
processModel.getArbitratorPubKey());
|
||||||
|
|
||||||
takerTradeProcessModel.setPayoutTxSignature(takerPayoutTxSignature);
|
processModel.setPayoutTxSignature(takerPayoutTxSignature);
|
||||||
takerTradeProcessModel.setPayoutAmount(takerPayoutAmount);
|
processModel.setPayoutAmount(takerPayoutAmount);
|
||||||
takerTradeProcessModel.tradingPeer.setPayoutAmount(offererPayoutAmount);
|
processModel.tradingPeer.setPayoutAmount(offererPayoutAmount);
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
|
|
@ -40,11 +40,11 @@ public class TakerCreatesDepositTxInputs extends TakerTradeTask {
|
||||||
try {
|
try {
|
||||||
log.debug("takerTrade.id" + takerTrade.getId());
|
log.debug("takerTrade.id" + takerTrade.getId());
|
||||||
Coin inputAmount = takerTrade.getSecurityDeposit().add(FeePolicy.TX_FEE);
|
Coin inputAmount = takerTrade.getSecurityDeposit().add(FeePolicy.TX_FEE);
|
||||||
TradeWalletService.Result result = takerTradeProcessModel.getTradeWalletService().createDepositTxInputs(inputAmount,
|
TradeWalletService.Result result = processModel.getTradeWalletService().createDepositTxInputs(inputAmount,
|
||||||
takerTradeProcessModel.getAddressEntry());
|
processModel.getAddressEntry());
|
||||||
|
|
||||||
takerTradeProcessModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs());
|
processModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs());
|
||||||
takerTradeProcessModel.setOutputs(result.getOutputs());
|
processModel.setOutputs(result.getOutputs());
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
|
|
@ -40,8 +40,8 @@ public class TakerProcessPayoutTxPublishedMessage extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
PayoutTxPublishedMessage message = (PayoutTxPublishedMessage) takerTradeProcessModel.getTradeMessage();
|
PayoutTxPublishedMessage message = (PayoutTxPublishedMessage) processModel.getTradeMessage();
|
||||||
checkTradeId(takerTradeProcessModel.getId(), message);
|
checkTradeId(processModel.getId(), message);
|
||||||
checkNotNull(message);
|
checkNotNull(message);
|
||||||
|
|
||||||
takerTrade.setPayoutTx(checkNotNull(message.payoutTx));
|
takerTrade.setPayoutTx(checkNotNull(message.payoutTx));
|
||||||
|
|
|
@ -38,21 +38,21 @@ public class TakerProcessRequestPublishDepositTxFromTakerMessage extends TakerTr
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
RequestPublishDepositTxFromTakerMessage message = (RequestPublishDepositTxFromTakerMessage) takerTradeProcessModel.getTradeMessage();
|
RequestPublishDepositTxFromTakerMessage message = (RequestPublishDepositTxFromTakerMessage) processModel.getTradeMessage();
|
||||||
checkTradeId(takerTradeProcessModel.getId(), message);
|
checkTradeId(processModel.getId(), message);
|
||||||
checkNotNull(message);
|
checkNotNull(message);
|
||||||
|
|
||||||
takerTradeProcessModel.tradingPeer.setFiatAccount(checkNotNull(message.takerFiatAccount));
|
processModel.tradingPeer.setFiatAccount(checkNotNull(message.takerFiatAccount));
|
||||||
takerTradeProcessModel.tradingPeer.setAccountId(nonEmptyStringOf(message.takerAccountId));
|
processModel.tradingPeer.setAccountId(nonEmptyStringOf(message.takerAccountId));
|
||||||
takerTradeProcessModel.tradingPeer.setP2pSigPubKey(checkNotNull(message.takerP2PSigPublicKey));
|
processModel.tradingPeer.setP2pSigPubKey(checkNotNull(message.takerP2PSigPublicKey));
|
||||||
takerTradeProcessModel.tradingPeer.setP2pSigPubKey(checkNotNull(message.takerP2PSigPublicKey));
|
processModel.tradingPeer.setP2pSigPubKey(checkNotNull(message.takerP2PSigPublicKey));
|
||||||
takerTradeProcessModel.tradingPeer.setTradeWalletPubKey(checkNotNull(message.sellerTradeWalletPubKey));
|
processModel.tradingPeer.setTradeWalletPubKey(checkNotNull(message.sellerTradeWalletPubKey));
|
||||||
takerTradeProcessModel.tradingPeer.setP2pEncryptPubKey(checkNotNull(message.takerP2PEncryptPublicKey));
|
processModel.tradingPeer.setP2pEncryptPubKey(checkNotNull(message.takerP2PEncryptPublicKey));
|
||||||
takerTradeProcessModel.tradingPeer.setContractAsJson(nonEmptyStringOf(message.takerContractAsJson));
|
processModel.tradingPeer.setContractAsJson(nonEmptyStringOf(message.takerContractAsJson));
|
||||||
takerTradeProcessModel.tradingPeer.setContractSignature(nonEmptyStringOf(message.takerContractSignature));
|
processModel.tradingPeer.setContractSignature(nonEmptyStringOf(message.takerContractSignature));
|
||||||
takerTradeProcessModel.tradingPeer.setPayoutAddressString(nonEmptyStringOf(message.takerPayoutAddressString));
|
processModel.tradingPeer.setPayoutAddressString(nonEmptyStringOf(message.takerPayoutAddressString));
|
||||||
takerTradeProcessModel.tradingPeer.setPreparedDepositTx(checkNotNull(message.takersPreparedDepositTx));
|
processModel.tradingPeer.setPreparedDepositTx(checkNotNull(message.takersPreparedDepositTx));
|
||||||
takerTradeProcessModel.tradingPeer.setConnectedOutputsForAllInputs(checkNotNull(message.takerConnectedOutputsForAllInputs));
|
processModel.tradingPeer.setConnectedOutputsForAllInputs(checkNotNull(message.takerConnectedOutputsForAllInputs));
|
||||||
checkArgument(message.takerConnectedOutputsForAllInputs.size() > 0);
|
checkArgument(message.takerConnectedOutputsForAllInputs.size() > 0);
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
|
|
|
@ -38,9 +38,9 @@ public class TakerSendsDepositTxPublishedMessage extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
DepositTxPublishedMessage tradeMessage = new DepositTxPublishedMessage(takerTradeProcessModel.getId(), takerTrade.getDepositTx());
|
DepositTxPublishedMessage tradeMessage = new DepositTxPublishedMessage(processModel.getId(), takerTrade.getDepositTx());
|
||||||
|
|
||||||
takerTradeProcessModel.getMessageService().sendMessage(takerTrade.getTradingPeer(), tradeMessage, new SendMessageListener() {
|
processModel.getMessageService().sendMessage(takerTrade.getTradingPeer(), tradeMessage, new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
log.trace("DepositTxPublishedMessage successfully arrived at peer");
|
log.trace("DepositTxPublishedMessage successfully arrived at peer");
|
||||||
|
|
|
@ -38,15 +38,15 @@ public class TakerSendsFiatTransferStartedMessage extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
FiatTransferStartedMessage tradeMessage = new FiatTransferStartedMessage(takerTradeProcessModel.getId(),
|
FiatTransferStartedMessage tradeMessage = new FiatTransferStartedMessage(processModel.getId(),
|
||||||
takerTradeProcessModel.getPayoutTxSignature(),
|
processModel.getPayoutTxSignature(),
|
||||||
takerTradeProcessModel.getPayoutAmount(),
|
processModel.getPayoutAmount(),
|
||||||
takerTradeProcessModel.tradingPeer.getPayoutAmount(),
|
processModel.tradingPeer.getPayoutAmount(),
|
||||||
takerTradeProcessModel.getAddressEntry().getAddressString());
|
processModel.getAddressEntry().getAddressString());
|
||||||
|
|
||||||
takerTradeProcessModel.getMessageService().sendMessage(takerTrade.getTradingPeer(), tradeMessage,
|
processModel.getMessageService().sendMessage(takerTrade.getTradingPeer(), tradeMessage,
|
||||||
takerTradeProcessModel.getP2pSigPubKey(),
|
processModel.getP2pSigPubKey(),
|
||||||
takerTradeProcessModel.getP2pEncryptPubKey(),
|
processModel.getP2pEncryptPubKey(),
|
||||||
new SendMessageListener() {
|
new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
|
|
|
@ -42,14 +42,14 @@ public class TakerSendsRequestDepositTxInputsMessage extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
assert takerTradeProcessModel.getTakeOfferFeeTx() != null;
|
assert processModel.getTakeOfferFeeTx() != null;
|
||||||
RequestDepositTxInputsMessage message = new RequestDepositTxInputsMessage(
|
RequestDepositTxInputsMessage message = new RequestDepositTxInputsMessage(
|
||||||
takerTradeProcessModel.getId(),
|
processModel.getId(),
|
||||||
takerTradeProcessModel.getTakeOfferFeeTx().getHashAsString(),
|
processModel.getTakeOfferFeeTx().getHashAsString(),
|
||||||
takerTrade.getTradeAmount(),
|
takerTrade.getTradeAmount(),
|
||||||
takerTradeProcessModel.getTradeWalletPubKey());
|
processModel.getTradeWalletPubKey());
|
||||||
|
|
||||||
takerTradeProcessModel.getMessageService().sendMessage(takerTrade.getTradingPeer(), message, new SendMessageListener() {
|
processModel.getMessageService().sendMessage(takerTrade.getTradingPeer(), message, new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
log.trace("Sending TakeOfferFeePayedMessage succeeded.");
|
log.trace("Sending TakeOfferFeePayedMessage succeeded.");
|
||||||
|
|
|
@ -39,17 +39,17 @@ public class TakerSendsRequestPayDepositMessage extends TakerTradeTask {
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
RequestPayDepositFromOffererMessage message = new RequestPayDepositFromOffererMessage(
|
RequestPayDepositFromOffererMessage message = new RequestPayDepositFromOffererMessage(
|
||||||
takerTradeProcessModel.getId(),
|
processModel.getId(),
|
||||||
model.getTradeAmount(),
|
model.getTradeAmount(),
|
||||||
takerTradeProcessModel.getConnectedOutputsForAllInputs(),
|
processModel.getConnectedOutputsForAllInputs(),
|
||||||
takerTradeProcessModel.getOutputs(),
|
processModel.getOutputs(),
|
||||||
takerTradeProcessModel.getTradeWalletPubKey(),
|
processModel.getTradeWalletPubKey(),
|
||||||
takerTradeProcessModel.getP2pSigPubKey(),
|
processModel.getP2pSigPubKey(),
|
||||||
takerTradeProcessModel.getP2pEncryptPubKey(),
|
processModel.getP2pEncryptPubKey(),
|
||||||
takerTradeProcessModel.getFiatAccount(),
|
processModel.getFiatAccount(),
|
||||||
takerTradeProcessModel.getAccountId());
|
processModel.getAccountId());
|
||||||
|
|
||||||
takerTradeProcessModel.getMessageService().sendMessage(takerTrade.getTradingPeer(), message, new SendMessageListener() {
|
processModel.getMessageService().sendMessage(takerTrade.getTradingPeer(), message, new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
log.trace("RequestTakerDepositPaymentMessage successfully arrived at peer");
|
log.trace("RequestTakerDepositPaymentMessage successfully arrived at peer");
|
||||||
|
|
|
@ -39,19 +39,19 @@ public class TakerSendsRequestPublishDepositTxMessage extends TakerTradeTask {
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
RequestPublishDepositTxMessage tradeMessage = new RequestPublishDepositTxMessage(
|
RequestPublishDepositTxMessage tradeMessage = new RequestPublishDepositTxMessage(
|
||||||
takerTradeProcessModel.getId(),
|
processModel.getId(),
|
||||||
takerTradeProcessModel.getFiatAccount(),
|
processModel.getFiatAccount(),
|
||||||
takerTradeProcessModel.getAccountId(),
|
processModel.getAccountId(),
|
||||||
takerTradeProcessModel.getP2pSigPubKey(),
|
processModel.getP2pSigPubKey(),
|
||||||
takerTradeProcessModel.getP2pEncryptPublicKey(),
|
processModel.getP2pEncryptPublicKey(),
|
||||||
takerTrade.getContractAsJson(),
|
takerTrade.getContractAsJson(),
|
||||||
takerTrade.getTakerContractSignature(),
|
takerTrade.getTakerContractSignature(),
|
||||||
takerTradeProcessModel.getAddressEntry().getAddressString(),
|
processModel.getAddressEntry().getAddressString(),
|
||||||
takerTradeProcessModel.getPreparedDepositTx(),
|
processModel.getPreparedDepositTx(),
|
||||||
takerTradeProcessModel.getConnectedOutputsForAllInputs()
|
processModel.getConnectedOutputsForAllInputs()
|
||||||
);
|
);
|
||||||
|
|
||||||
takerTradeProcessModel.getMessageService().sendMessage(takerTrade.getTradingPeer(), tradeMessage, new SendMessageListener() {
|
processModel.getMessageService().sendMessage(takerTrade.getTradingPeer(), tradeMessage, new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
complete();
|
complete();
|
||||||
|
|
|
@ -46,15 +46,15 @@ public class TakerSignsAndPublishDepositTx extends TakerTradeTask {
|
||||||
try {
|
try {
|
||||||
Coin inputAmount = takerTrade.getSecurityDeposit().add(FeePolicy.TX_FEE);
|
Coin inputAmount = takerTrade.getSecurityDeposit().add(FeePolicy.TX_FEE);
|
||||||
|
|
||||||
takerTradeProcessModel.getTradeWalletService().signAndPublishDepositTx(
|
processModel.getTradeWalletService().signAndPublishDepositTx(
|
||||||
takerTradeProcessModel.tradingPeer.getPreparedDepositTx(),
|
processModel.tradingPeer.getPreparedDepositTx(),
|
||||||
takerTradeProcessModel.getConnectedOutputsForAllInputs(),
|
processModel.getConnectedOutputsForAllInputs(),
|
||||||
takerTradeProcessModel.tradingPeer.getConnectedOutputsForAllInputs(),
|
processModel.tradingPeer.getConnectedOutputsForAllInputs(),
|
||||||
takerTradeProcessModel.getOutputs(),
|
processModel.getOutputs(),
|
||||||
inputAmount,
|
inputAmount,
|
||||||
takerTradeProcessModel.getTradeWalletPubKey(),
|
processModel.getTradeWalletPubKey(),
|
||||||
takerTradeProcessModel.tradingPeer.getTradeWalletPubKey(),
|
processModel.tradingPeer.getTradeWalletPubKey(),
|
||||||
takerTradeProcessModel.getArbitratorPubKey(),
|
processModel.getArbitratorPubKey(),
|
||||||
new FutureCallback<Transaction>() {
|
new FutureCallback<Transaction>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Transaction transaction) {
|
public void onSuccess(Transaction transaction) {
|
||||||
|
|
|
@ -37,23 +37,23 @@ public class TakerVerifiesAndSignsContract extends TakerTradeTask {
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
Contract contract = new Contract(
|
Contract contract = new Contract(
|
||||||
takerTradeProcessModel.getOffer(),
|
processModel.getOffer(),
|
||||||
takerTrade.getTradeAmount(),
|
takerTrade.getTradeAmount(),
|
||||||
takerTradeProcessModel.getTakeOfferFeeTx().getHashAsString(),
|
processModel.getTakeOfferFeeTx().getHashAsString(),
|
||||||
takerTradeProcessModel.tradingPeer.getAccountId(),
|
processModel.tradingPeer.getAccountId(),
|
||||||
takerTradeProcessModel.getAccountId(),
|
processModel.getAccountId(),
|
||||||
takerTradeProcessModel.tradingPeer.getFiatAccount(),
|
processModel.tradingPeer.getFiatAccount(),
|
||||||
takerTradeProcessModel.getFiatAccount(),
|
processModel.getFiatAccount(),
|
||||||
takerTradeProcessModel.tradingPeer.getP2pSigPubKey(),
|
processModel.tradingPeer.getP2pSigPubKey(),
|
||||||
takerTradeProcessModel.getP2pSigPubKey());
|
processModel.getP2pSigPubKey());
|
||||||
String contractAsJson = Utilities.objectToJson(contract);
|
String contractAsJson = Utilities.objectToJson(contract);
|
||||||
String signature = takerTradeProcessModel.getSignatureService().signMessage(takerTradeProcessModel.getRegistrationKeyPair(),
|
String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(),
|
||||||
contractAsJson);
|
contractAsJson);
|
||||||
|
|
||||||
takerTrade.setContract(contract);
|
takerTrade.setContract(contract);
|
||||||
takerTrade.setContractAsJson(contractAsJson);
|
takerTrade.setContractAsJson(contractAsJson);
|
||||||
takerTrade.setOffererContractSignature(signature);
|
takerTrade.setOffererContractSignature(signature);
|
||||||
takerTrade.setOffererContractSignature(takerTradeProcessModel.tradingPeer.getContractSignature());
|
takerTrade.setOffererContractSignature(processModel.tradingPeer.getContractSignature());
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
|
|
@ -1,218 +0,0 @@
|
||||||
/*
|
|
||||||
* This file is part of Bitsquare.
|
|
||||||
*
|
|
||||||
* Bitsquare is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU Affero General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or (at
|
|
||||||
* your option) any later version.
|
|
||||||
*
|
|
||||||
* Bitsquare is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
|
|
||||||
* License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package io.bitsquare.trade.protocol.trade.offerer.models;
|
|
||||||
|
|
||||||
import io.bitsquare.arbitration.ArbitrationRepository;
|
|
||||||
import io.bitsquare.btc.AddressEntry;
|
|
||||||
import io.bitsquare.btc.BlockChainService;
|
|
||||||
import io.bitsquare.btc.TradeWalletService;
|
|
||||||
import io.bitsquare.btc.WalletService;
|
|
||||||
import io.bitsquare.crypto.SignatureService;
|
|
||||||
import io.bitsquare.fiat.FiatAccount;
|
|
||||||
import io.bitsquare.offer.Offer;
|
|
||||||
import io.bitsquare.p2p.MessageService;
|
|
||||||
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
|
||||||
import io.bitsquare.trade.protocol.trade.shared.models.TradingPeer;
|
|
||||||
import io.bitsquare.user.User;
|
|
||||||
|
|
||||||
import org.bitcoinj.core.Coin;
|
|
||||||
import org.bitcoinj.core.Transaction;
|
|
||||||
import org.bitcoinj.core.TransactionOutput;
|
|
||||||
import org.bitcoinj.crypto.DeterministicKey;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import java.security.PublicKey;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
public class OffererProcessModel extends ProcessModel implements Serializable {
|
|
||||||
// That object is saved to disc. We need to take care of changes to not break deserialization.
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
transient private static final Logger log = LoggerFactory.getLogger(OffererProcessModel.class);
|
|
||||||
|
|
||||||
// Immutable
|
|
||||||
public final TradingPeer tradingPeer;
|
|
||||||
|
|
||||||
// Transient/Immutable
|
|
||||||
private transient Offer offer;
|
|
||||||
private transient WalletService walletService;
|
|
||||||
private transient User user;
|
|
||||||
|
|
||||||
// Mutable
|
|
||||||
private String takeOfferFeeTxId;
|
|
||||||
private Transaction payoutTx;
|
|
||||||
private byte[] payoutTxSignature;
|
|
||||||
private Coin payoutAmount;
|
|
||||||
private List<TransactionOutput> connectedOutputsForAllInputs;
|
|
||||||
private List<TransactionOutput> outputs; // used to verify amounts with change outputs
|
|
||||||
private Transaction preparedDepositTx;
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Constructor, initialization
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
public OffererProcessModel() {
|
|
||||||
log.trace("Created by constructor");
|
|
||||||
tradingPeer = new TradingPeer();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
|
|
||||||
in.defaultReadObject();
|
|
||||||
log.trace("Created from serialized form.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onAllServicesInitialized(Offer offer,
|
|
||||||
MessageService messageService,
|
|
||||||
WalletService walletService,
|
|
||||||
TradeWalletService tradeWalletService,
|
|
||||||
BlockChainService blockChainService,
|
|
||||||
SignatureService signatureService,
|
|
||||||
ArbitrationRepository arbitrationRepository,
|
|
||||||
User user) {
|
|
||||||
log.trace("onAllServicesInitialized");
|
|
||||||
super.onAllServicesInitialized(offer,
|
|
||||||
messageService,
|
|
||||||
walletService,
|
|
||||||
tradeWalletService,
|
|
||||||
blockChainService,
|
|
||||||
signatureService,
|
|
||||||
arbitrationRepository,
|
|
||||||
user);
|
|
||||||
this.offer = offer;
|
|
||||||
this.walletService = walletService;
|
|
||||||
this.user = user;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Getter/Setter for Mutable objects
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public String getTakeOfferFeeTxId() {
|
|
||||||
return takeOfferFeeTxId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTakeOfferFeeTxId(String takeOfferFeeTxId) {
|
|
||||||
this.takeOfferFeeTxId = takeOfferFeeTxId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Transaction getPayoutTx() {
|
|
||||||
return payoutTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPayoutTx(Transaction payoutTx) {
|
|
||||||
this.payoutTx = payoutTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Getter only
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
public FiatAccount getFiatAccount() {
|
|
||||||
return user.getFiatAccount(offer.getBankAccountId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAccountId() {
|
|
||||||
return user.getAccountId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public PublicKey getP2pSigPubKey() {
|
|
||||||
return user.getP2PSigPubKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
public PublicKey getP2pEncryptPublicKey() {
|
|
||||||
return user.getP2PEncryptPubKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
public PublicKey getP2pEncryptPubKey() {
|
|
||||||
return user.getP2PEncryptPubKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getRegistrationPubKey() {
|
|
||||||
return walletService.getRegistrationAddressEntry().getPubKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
public DeterministicKey getRegistrationKeyPair() {
|
|
||||||
return walletService.getRegistrationAddressEntry().getKeyPair();
|
|
||||||
}
|
|
||||||
|
|
||||||
public AddressEntry getAddressEntry() {
|
|
||||||
return walletService.getAddressEntry(offer.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getTradeWalletPubKey() {
|
|
||||||
return getAddressEntry().getPubKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Getter/Setter for Mutable objects
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
public List<TransactionOutput> getOutputs() {
|
|
||||||
return outputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOutputs(List<TransactionOutput> outputs) {
|
|
||||||
this.outputs = outputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getPayoutTxSignature() {
|
|
||||||
return payoutTxSignature;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPayoutTxSignature(byte[] payoutTxSignature) {
|
|
||||||
this.payoutTxSignature = payoutTxSignature;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Coin getPayoutAmount() {
|
|
||||||
return payoutAmount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPayoutAmount(Coin payoutAmount) {
|
|
||||||
this.payoutAmount = payoutAmount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<TransactionOutput> getConnectedOutputsForAllInputs() {
|
|
||||||
return connectedOutputsForAllInputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConnectedOutputsForAllInputs(List<TransactionOutput> connectedOutputsForAllInputs) {
|
|
||||||
this.connectedOutputsForAllInputs = connectedOutputsForAllInputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Transaction getPreparedDepositTx() {
|
|
||||||
return preparedDepositTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPreparedDepositTx(Transaction preparedDepositTx) {
|
|
||||||
this.preparedDepositTx = preparedDepositTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -20,21 +20,21 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks;
|
||||||
import io.bitsquare.common.taskrunner.Task;
|
import io.bitsquare.common.taskrunner.Task;
|
||||||
import io.bitsquare.common.taskrunner.TaskRunner;
|
import io.bitsquare.common.taskrunner.TaskRunner;
|
||||||
import io.bitsquare.trade.OffererTrade;
|
import io.bitsquare.trade.OffererTrade;
|
||||||
import io.bitsquare.trade.protocol.trade.offerer.models.OffererProcessModel;
|
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class OffererTradeTask extends Task<OffererTrade> {
|
public class OffererTradeTask extends Task<OffererTrade> {
|
||||||
private static final Logger log = LoggerFactory.getLogger(OffererTradeTask.class);
|
private static final Logger log = LoggerFactory.getLogger(OffererTradeTask.class);
|
||||||
protected final OffererProcessModel offererTradeProcessModel;
|
protected final ProcessModel processModel;
|
||||||
protected final OffererTrade offererTrade;
|
protected final OffererTrade offererTrade;
|
||||||
|
|
||||||
public OffererTradeTask(TaskRunner taskHandler, OffererTrade offererTrade) {
|
public OffererTradeTask(TaskRunner taskHandler, OffererTrade offererTrade) {
|
||||||
super(taskHandler, offererTrade);
|
super(taskHandler, offererTrade);
|
||||||
|
|
||||||
this.offererTrade = offererTrade;
|
this.offererTrade = offererTrade;
|
||||||
offererTradeProcessModel = offererTrade.getProcessModel();
|
processModel = offererTrade.getProcessModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -27,11 +27,11 @@ import io.bitsquare.trade.OffererAsSellerTrade;
|
||||||
import io.bitsquare.trade.protocol.Protocol;
|
import io.bitsquare.trade.protocol.Protocol;
|
||||||
import io.bitsquare.trade.protocol.availability.messages.ReportOfferAvailabilityMessage;
|
import io.bitsquare.trade.protocol.availability.messages.ReportOfferAvailabilityMessage;
|
||||||
import io.bitsquare.trade.protocol.availability.messages.RequestIsOfferAvailableMessage;
|
import io.bitsquare.trade.protocol.availability.messages.RequestIsOfferAvailableMessage;
|
||||||
|
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
||||||
import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage;
|
import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage;
|
||||||
import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage;
|
import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage;
|
||||||
import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositMessage;
|
import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositMessage;
|
||||||
import io.bitsquare.trade.protocol.trade.messages.TradeMessage;
|
import io.bitsquare.trade.protocol.trade.messages.TradeMessage;
|
||||||
import io.bitsquare.trade.protocol.trade.offerer.models.OffererProcessModel;
|
|
||||||
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererCommitDepositTx;
|
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererCommitDepositTx;
|
||||||
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererCreatesAndSignsContract;
|
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererCreatesAndSignsContract;
|
||||||
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererCreatesAndSignsDepositTx;
|
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererCreatesAndSignsDepositTx;
|
||||||
|
@ -54,7 +54,7 @@ public class SellerAsOffererProtocol implements Protocol {
|
||||||
|
|
||||||
private final MessageHandler messageHandler;
|
private final MessageHandler messageHandler;
|
||||||
private final OffererAsSellerTrade offererAsSellerTrade;
|
private final OffererAsSellerTrade offererAsSellerTrade;
|
||||||
private final OffererProcessModel offererTradeProcessModel;
|
private final ProcessModel processModel;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Constructor
|
// Constructor
|
||||||
|
@ -63,10 +63,10 @@ public class SellerAsOffererProtocol implements Protocol {
|
||||||
public SellerAsOffererProtocol(OffererAsSellerTrade model) {
|
public SellerAsOffererProtocol(OffererAsSellerTrade model) {
|
||||||
log.debug("New OffererProtocol " + this);
|
log.debug("New OffererProtocol " + this);
|
||||||
this.offererAsSellerTrade = model;
|
this.offererAsSellerTrade = model;
|
||||||
offererTradeProcessModel = offererAsSellerTrade.getProcessModel();
|
processModel = offererAsSellerTrade.getProcessModel();
|
||||||
messageHandler = this::handleMessage;
|
messageHandler = this::handleMessage;
|
||||||
|
|
||||||
offererTradeProcessModel.getMessageService().addMessageHandler(messageHandler);
|
processModel.getMessageService().addMessageHandler(messageHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ public class SellerAsOffererProtocol implements Protocol {
|
||||||
public void cleanup() {
|
public void cleanup() {
|
||||||
log.debug("cleanup " + this);
|
log.debug("cleanup " + this);
|
||||||
|
|
||||||
offererTradeProcessModel.getMessageService().removeMessageHandler(messageHandler);
|
processModel.getMessageService().removeMessageHandler(messageHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -101,7 +101,7 @@ public class SellerAsOffererProtocol implements Protocol {
|
||||||
|
|
||||||
private void handle(RequestIsOfferAvailableMessage tradeMessage, Peer sender) {
|
private void handle(RequestIsOfferAvailableMessage tradeMessage, Peer sender) {
|
||||||
try {
|
try {
|
||||||
checkTradeId(offererTradeProcessModel.getId(), tradeMessage);
|
checkTradeId(processModel.getId(), tradeMessage);
|
||||||
|
|
||||||
// We don't store anything in the offererTradeProcessModel as we might be in a trade process and receive that request from another peer who wants
|
// We don't store anything in the offererTradeProcessModel as we might be in a trade process and receive that request from another peer who wants
|
||||||
// to take the
|
// to take the
|
||||||
|
@ -109,8 +109,8 @@ public class SellerAsOffererProtocol implements Protocol {
|
||||||
// at the same time
|
// at the same time
|
||||||
boolean isOfferOpen = offererAsSellerTrade.lifeCycleStateProperty().get() == OffererAsSellerTrade.LifeCycleState.OFFER_OPEN;
|
boolean isOfferOpen = offererAsSellerTrade.lifeCycleStateProperty().get() == OffererAsSellerTrade.LifeCycleState.OFFER_OPEN;
|
||||||
|
|
||||||
ReportOfferAvailabilityMessage reportOfferAvailabilityMessage = new ReportOfferAvailabilityMessage(offererTradeProcessModel.getId(), isOfferOpen);
|
ReportOfferAvailabilityMessage reportOfferAvailabilityMessage = new ReportOfferAvailabilityMessage(processModel.getId(), isOfferOpen);
|
||||||
offererTradeProcessModel.getMessageService().sendMessage(sender, reportOfferAvailabilityMessage, new SendMessageListener() {
|
processModel.getMessageService().sendMessage(sender, reportOfferAvailabilityMessage, new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
// Offerer does not do anything at that moment. Peer might only watch the offer and does not start a trade.
|
// Offerer does not do anything at that moment. Peer might only watch the offer and does not start a trade.
|
||||||
|
@ -135,7 +135,7 @@ public class SellerAsOffererProtocol implements Protocol {
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
private void handle(RequestPayDepositMessage tradeMessage, Peer sender) {
|
private void handle(RequestPayDepositMessage tradeMessage, Peer sender) {
|
||||||
offererTradeProcessModel.setTradeMessage(tradeMessage);
|
processModel.setTradeMessage(tradeMessage);
|
||||||
|
|
||||||
offererAsSellerTrade.setTradingPeer(sender);
|
offererAsSellerTrade.setTradingPeer(sender);
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ public class SellerAsOffererProtocol implements Protocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handle(DepositTxPublishedMessage tradeMessage) {
|
private void handle(DepositTxPublishedMessage tradeMessage) {
|
||||||
offererTradeProcessModel.setTradeMessage(tradeMessage);
|
processModel.setTradeMessage(tradeMessage);
|
||||||
|
|
||||||
TaskRunner<OffererAsSellerTrade> taskRunner = new TaskRunner<>(offererAsSellerTrade,
|
TaskRunner<OffererAsSellerTrade> taskRunner = new TaskRunner<>(offererAsSellerTrade,
|
||||||
() -> log.debug("taskRunner at handleDepositTxPublishedMessage completed"),
|
() -> log.debug("taskRunner at handleDepositTxPublishedMessage completed"),
|
||||||
|
@ -168,7 +168,7 @@ public class SellerAsOffererProtocol implements Protocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handle(FiatTransferStartedMessage tradeMessage) {
|
private void handle(FiatTransferStartedMessage tradeMessage) {
|
||||||
offererTradeProcessModel.setTradeMessage(tradeMessage);
|
processModel.setTradeMessage(tradeMessage);
|
||||||
|
|
||||||
TaskRunner<OffererAsSellerTrade> taskRunner = new TaskRunner<>(offererAsSellerTrade,
|
TaskRunner<OffererAsSellerTrade> taskRunner = new TaskRunner<>(offererAsSellerTrade,
|
||||||
() -> log.debug("taskRunner at handleFiatTransferStartedMessage completed"),
|
() -> log.debug("taskRunner at handleFiatTransferStartedMessage completed"),
|
||||||
|
@ -192,7 +192,7 @@ public class SellerAsOffererProtocol implements Protocol {
|
||||||
log.debug("taskRunner at handleFiatReceivedUIEvent completed");
|
log.debug("taskRunner at handleFiatReceivedUIEvent completed");
|
||||||
|
|
||||||
// we are done!
|
// we are done!
|
||||||
offererTradeProcessModel.onComplete();
|
processModel.onComplete();
|
||||||
},
|
},
|
||||||
this::handleTaskRunnerFault);
|
this::handleTaskRunnerFault);
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class OffererCommitDepositTx extends OffererTradeTask {
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
// To access tx confidence we need to add that tx into our wallet.
|
// To access tx confidence we need to add that tx into our wallet.
|
||||||
Transaction depositTx = offererTradeProcessModel.getTradeWalletService().commitTx(offererTrade.getDepositTx());
|
Transaction depositTx = processModel.getTradeWalletService().commitTx(offererTrade.getDepositTx());
|
||||||
|
|
||||||
offererTrade.setDepositTx(depositTx);
|
offererTrade.setDepositTx(depositTx);
|
||||||
|
|
||||||
|
|
|
@ -36,19 +36,19 @@ public class OffererCreatesAndSignsContract extends OffererTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
assert offererTradeProcessModel.getTakeOfferFeeTxId() != null;
|
assert processModel.getTakeOfferFeeTxId() != null;
|
||||||
Contract contract = new Contract(
|
Contract contract = new Contract(
|
||||||
offererTradeProcessModel.getOffer(),
|
processModel.getOffer(),
|
||||||
model.getTradeAmount(),
|
model.getTradeAmount(),
|
||||||
offererTradeProcessModel.getTakeOfferFeeTxId(),
|
processModel.getTakeOfferFeeTxId(),
|
||||||
offererTradeProcessModel.getAccountId(),
|
processModel.getAccountId(),
|
||||||
offererTradeProcessModel.getAccountId(),
|
processModel.getAccountId(),
|
||||||
offererTradeProcessModel.getFiatAccount(),
|
processModel.getFiatAccount(),
|
||||||
offererTradeProcessModel.getFiatAccount(),
|
processModel.getFiatAccount(),
|
||||||
offererTradeProcessModel.getOffer().getP2PSigPubKey(),
|
processModel.getOffer().getP2PSigPubKey(),
|
||||||
offererTradeProcessModel.getP2pSigPubKey());
|
processModel.getP2pSigPubKey());
|
||||||
String contractAsJson = Utilities.objectToJson(contract);
|
String contractAsJson = Utilities.objectToJson(contract);
|
||||||
String signature = offererTradeProcessModel.getSignatureService().signMessage(offererTradeProcessModel.getRegistrationKeyPair(),
|
String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(),
|
||||||
contractAsJson);
|
contractAsJson);
|
||||||
|
|
||||||
model.setContract(contract);
|
model.setContract(contract);
|
||||||
|
|
|
@ -42,19 +42,19 @@ public class OffererCreatesAndSignsDepositTx extends OffererTradeTask {
|
||||||
Coin inputAmount = offererTrade.getSecurityDeposit().add(FeePolicy.TX_FEE).add(offererTrade.getTradeAmount());
|
Coin inputAmount = offererTrade.getSecurityDeposit().add(FeePolicy.TX_FEE).add(offererTrade.getTradeAmount());
|
||||||
Coin msOutputAmount = inputAmount.add(offererTrade.getSecurityDeposit());
|
Coin msOutputAmount = inputAmount.add(offererTrade.getSecurityDeposit());
|
||||||
|
|
||||||
TradeWalletService.Result result = offererTradeProcessModel.getTradeWalletService().createAndSignDepositTx(
|
TradeWalletService.Result result = processModel.getTradeWalletService().createAndSignDepositTx(
|
||||||
inputAmount,
|
inputAmount,
|
||||||
msOutputAmount,
|
msOutputAmount,
|
||||||
offererTradeProcessModel.tradingPeer.getConnectedOutputsForAllInputs(),
|
processModel.tradingPeer.getConnectedOutputsForAllInputs(),
|
||||||
offererTradeProcessModel.tradingPeer.getOutputs(),
|
processModel.tradingPeer.getOutputs(),
|
||||||
offererTradeProcessModel.getAddressEntry(),
|
processModel.getAddressEntry(),
|
||||||
offererTradeProcessModel.tradingPeer.getTradeWalletPubKey(),
|
processModel.tradingPeer.getTradeWalletPubKey(),
|
||||||
offererTradeProcessModel.getTradeWalletPubKey(),
|
processModel.getTradeWalletPubKey(),
|
||||||
offererTradeProcessModel.getArbitratorPubKey());
|
processModel.getArbitratorPubKey());
|
||||||
|
|
||||||
|
|
||||||
offererTradeProcessModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs());
|
processModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs());
|
||||||
offererTradeProcessModel.setPreparedDepositTx(result.getDepositTx());
|
processModel.setPreparedDepositTx(result.getDepositTx());
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
|
|
@ -40,8 +40,8 @@ public class OffererProcessDepositTxPublishedMessage extends OffererTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
DepositTxPublishedMessage message = (DepositTxPublishedMessage) offererTradeProcessModel.getTradeMessage();
|
DepositTxPublishedMessage message = (DepositTxPublishedMessage) processModel.getTradeMessage();
|
||||||
checkTradeId(offererTradeProcessModel.getId(), message);
|
checkTradeId(processModel.getId(), message);
|
||||||
checkNotNull(message);
|
checkNotNull(message);
|
||||||
|
|
||||||
offererTrade.setDepositTx(checkNotNull(message.depositTx));
|
offererTrade.setDepositTx(checkNotNull(message.depositTx));
|
||||||
|
|
|
@ -40,14 +40,14 @@ public class OffererProcessFiatTransferStartedMessage extends OffererTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
FiatTransferStartedMessage message = (FiatTransferStartedMessage) offererTradeProcessModel.getTradeMessage();
|
FiatTransferStartedMessage message = (FiatTransferStartedMessage) processModel.getTradeMessage();
|
||||||
checkTradeId(offererTradeProcessModel.getId(), message);
|
checkTradeId(processModel.getId(), message);
|
||||||
checkNotNull(message);
|
checkNotNull(message);
|
||||||
|
|
||||||
offererTradeProcessModel.tradingPeer.setSignature(checkNotNull(message.buyerSignature));
|
processModel.tradingPeer.setSignature(checkNotNull(message.buyerSignature));
|
||||||
offererTradeProcessModel.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.sellerPayoutAmount)));
|
processModel.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.sellerPayoutAmount)));
|
||||||
offererTradeProcessModel.tradingPeer.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.buyerPayoutAmount)));
|
processModel.tradingPeer.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.buyerPayoutAmount)));
|
||||||
offererTradeProcessModel.tradingPeer.setPayoutAddressString(nonEmptyStringOf(message.buyerPayoutAddress));
|
processModel.tradingPeer.setPayoutAddressString(nonEmptyStringOf(message.buyerPayoutAddress));
|
||||||
|
|
||||||
if (offererTrade instanceof OffererAsBuyerTrade)
|
if (offererTrade instanceof OffererAsBuyerTrade)
|
||||||
offererTrade.setProcessState(OffererAsBuyerTrade.ProcessState.FIAT_PAYMENT_STARTED);
|
offererTrade.setProcessState(OffererAsBuyerTrade.ProcessState.FIAT_PAYMENT_STARTED);
|
||||||
|
|
|
@ -38,18 +38,18 @@ public class OffererProcessRequestPayDepositFromOffererMessage extends OffererTr
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
RequestPayDepositFromOffererMessage message = (RequestPayDepositFromOffererMessage) offererTradeProcessModel.getTradeMessage();
|
RequestPayDepositFromOffererMessage message = (RequestPayDepositFromOffererMessage) processModel.getTradeMessage();
|
||||||
checkTradeId(offererTradeProcessModel.getId(), message);
|
checkTradeId(processModel.getId(), message);
|
||||||
checkNotNull(message);
|
checkNotNull(message);
|
||||||
|
|
||||||
offererTradeProcessModel.tradingPeer.setConnectedOutputsForAllInputs(checkNotNull(message.buyerConnectedOutputsForAllInputs));
|
processModel.tradingPeer.setConnectedOutputsForAllInputs(checkNotNull(message.buyerConnectedOutputsForAllInputs));
|
||||||
checkArgument(message.buyerConnectedOutputsForAllInputs.size() > 0);
|
checkArgument(message.buyerConnectedOutputsForAllInputs.size() > 0);
|
||||||
offererTradeProcessModel.tradingPeer.setOutputs(checkNotNull(message.buyerOutputs));
|
processModel.tradingPeer.setOutputs(checkNotNull(message.buyerOutputs));
|
||||||
offererTradeProcessModel.tradingPeer.setTradeWalletPubKey(checkNotNull(message.buyerTradeWalletPubKey));
|
processModel.tradingPeer.setTradeWalletPubKey(checkNotNull(message.buyerTradeWalletPubKey));
|
||||||
offererTradeProcessModel.tradingPeer.setP2pSigPubKey(checkNotNull(message.buyerP2PSigPublicKey));
|
processModel.tradingPeer.setP2pSigPubKey(checkNotNull(message.buyerP2PSigPublicKey));
|
||||||
offererTradeProcessModel.tradingPeer.setP2pEncryptPubKey(checkNotNull(message.buyerP2PEncryptPublicKey));
|
processModel.tradingPeer.setP2pEncryptPubKey(checkNotNull(message.buyerP2PEncryptPublicKey));
|
||||||
offererTradeProcessModel.tradingPeer.setFiatAccount(checkNotNull(message.buyerFiatAccount));
|
processModel.tradingPeer.setFiatAccount(checkNotNull(message.buyerFiatAccount));
|
||||||
offererTradeProcessModel.tradingPeer.setAccountId(nonEmptyStringOf(message.buyerAccountId));
|
processModel.tradingPeer.setAccountId(nonEmptyStringOf(message.buyerAccountId));
|
||||||
offererTrade.setTradeAmount(positiveCoinOf(nonZeroCoinOf(message.tradeAmount)));
|
offererTrade.setTradeAmount(positiveCoinOf(nonZeroCoinOf(message.tradeAmount)));
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
|
|
|
@ -38,11 +38,11 @@ public class OffererSendsPayoutTxPublishedMessage extends OffererTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
PayoutTxPublishedMessage tradeMessage = new PayoutTxPublishedMessage(offererTradeProcessModel.getId(), offererTradeProcessModel.getPayoutTx());
|
PayoutTxPublishedMessage tradeMessage = new PayoutTxPublishedMessage(processModel.getId(), processModel.getPayoutTx());
|
||||||
offererTradeProcessModel.getMessageService().sendMessage(offererTrade.getTradingPeer(),
|
processModel.getMessageService().sendMessage(offererTrade.getTradingPeer(),
|
||||||
tradeMessage,
|
tradeMessage,
|
||||||
offererTradeProcessModel.getP2pSigPubKey(),
|
processModel.getP2pSigPubKey(),
|
||||||
offererTradeProcessModel.getP2pEncryptPubKey(),
|
processModel.getP2pEncryptPubKey(),
|
||||||
new SendMessageListener() {
|
new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
|
|
|
@ -39,20 +39,20 @@ public class OffererSendsRequestPublishDepositTxFromTakerMessage extends Offerer
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
RequestPublishDepositTxFromTakerMessage tradeMessage = new RequestPublishDepositTxFromTakerMessage(
|
RequestPublishDepositTxFromTakerMessage tradeMessage = new RequestPublishDepositTxFromTakerMessage(
|
||||||
offererTradeProcessModel.getId(),
|
processModel.getId(),
|
||||||
offererTradeProcessModel.getFiatAccount(),
|
processModel.getFiatAccount(),
|
||||||
offererTradeProcessModel.getAccountId(),
|
processModel.getAccountId(),
|
||||||
offererTradeProcessModel.getTradeWalletPubKey(),
|
processModel.getTradeWalletPubKey(),
|
||||||
offererTradeProcessModel.getP2pSigPubKey(),
|
processModel.getP2pSigPubKey(),
|
||||||
offererTradeProcessModel.getP2pEncryptPublicKey(),
|
processModel.getP2pEncryptPublicKey(),
|
||||||
offererTrade.getContractAsJson(),
|
offererTrade.getContractAsJson(),
|
||||||
offererTrade.getOffererContractSignature(),
|
offererTrade.getOffererContractSignature(),
|
||||||
offererTradeProcessModel.getAddressEntry().getAddressString(),
|
processModel.getAddressEntry().getAddressString(),
|
||||||
offererTradeProcessModel.getPreparedDepositTx(),
|
processModel.getPreparedDepositTx(),
|
||||||
offererTradeProcessModel.getConnectedOutputsForAllInputs()
|
processModel.getConnectedOutputsForAllInputs()
|
||||||
);
|
);
|
||||||
|
|
||||||
offererTradeProcessModel.getMessageService().sendMessage(offererTrade.getTradingPeer(), tradeMessage, new SendMessageListener() {
|
processModel.getMessageService().sendMessage(offererTrade.getTradingPeer(), tradeMessage, new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
complete();
|
complete();
|
||||||
|
|
|
@ -42,20 +42,20 @@ public class OffererSignsAndPublishPayoutTx extends OffererTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
offererTradeProcessModel.getTradeWalletService().signAndPublishPayoutTx(
|
processModel.getTradeWalletService().signAndPublishPayoutTx(
|
||||||
offererTrade.getDepositTx(),
|
offererTrade.getDepositTx(),
|
||||||
offererTradeProcessModel.tradingPeer.getSignature(),
|
processModel.tradingPeer.getSignature(),
|
||||||
offererTradeProcessModel.tradingPeer.getPayoutAmount(),
|
processModel.tradingPeer.getPayoutAmount(),
|
||||||
offererTradeProcessModel.getPayoutAmount(),
|
processModel.getPayoutAmount(),
|
||||||
offererTradeProcessModel.tradingPeer.getPayoutAddressString(),
|
processModel.tradingPeer.getPayoutAddressString(),
|
||||||
offererTradeProcessModel.getAddressEntry(),
|
processModel.getAddressEntry(),
|
||||||
offererTradeProcessModel.tradingPeer.getTradeWalletPubKey(),
|
processModel.tradingPeer.getTradeWalletPubKey(),
|
||||||
offererTradeProcessModel.getTradeWalletPubKey(),
|
processModel.getTradeWalletPubKey(),
|
||||||
offererTradeProcessModel.getArbitratorPubKey(),
|
processModel.getArbitratorPubKey(),
|
||||||
new FutureCallback<Transaction>() {
|
new FutureCallback<Transaction>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Transaction transaction) {
|
public void onSuccess(Transaction transaction) {
|
||||||
offererTradeProcessModel.setPayoutTx(transaction);
|
processModel.setPayoutTx(transaction);
|
||||||
|
|
||||||
if (offererTrade instanceof OffererAsBuyerTrade)
|
if (offererTrade instanceof OffererAsBuyerTrade)
|
||||||
offererTrade.setProcessState(OffererAsBuyerTrade.ProcessState.PAYOUT_PUBLISHED);
|
offererTrade.setProcessState(OffererAsBuyerTrade.ProcessState.PAYOUT_PUBLISHED);
|
||||||
|
|
|
@ -25,6 +25,7 @@ import io.bitsquare.p2p.Peer;
|
||||||
import io.bitsquare.trade.TakerAsSellerTrade;
|
import io.bitsquare.trade.TakerAsSellerTrade;
|
||||||
import io.bitsquare.trade.TakerTrade;
|
import io.bitsquare.trade.TakerTrade;
|
||||||
import io.bitsquare.trade.protocol.Protocol;
|
import io.bitsquare.trade.protocol.Protocol;
|
||||||
|
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
||||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSendsRequestDepositTxInputsMessage;
|
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSendsRequestDepositTxInputsMessage;
|
||||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSendsRequestPublishDepositTxMessage;
|
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSendsRequestPublishDepositTxMessage;
|
||||||
import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage;
|
import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage;
|
||||||
|
@ -43,7 +44,6 @@ import io.bitsquare.trade.protocol.trade.shared.taker.tasks.BroadcastTakeOfferFe
|
||||||
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.CreateTakeOfferFeeTx;
|
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.CreateTakeOfferFeeTx;
|
||||||
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.VerifyOfferFeePayment;
|
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.VerifyOfferFeePayment;
|
||||||
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.VerifyOffererAccount;
|
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.VerifyOffererAccount;
|
||||||
import io.bitsquare.trade.protocol.trade.taker.models.TakerProcessModel;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -54,7 +54,7 @@ public class SellerAsTakerProtocol implements Protocol {
|
||||||
private static final Logger log = LoggerFactory.getLogger(SellerAsTakerProtocol.class);
|
private static final Logger log = LoggerFactory.getLogger(SellerAsTakerProtocol.class);
|
||||||
|
|
||||||
private final TakerAsSellerTrade takerAsSellerTrade;
|
private final TakerAsSellerTrade takerAsSellerTrade;
|
||||||
private final TakerProcessModel takerTradeProcessModel;
|
private final ProcessModel processModel;
|
||||||
private final MessageHandler messageHandler;
|
private final MessageHandler messageHandler;
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,10 +65,10 @@ public class SellerAsTakerProtocol implements Protocol {
|
||||||
public SellerAsTakerProtocol(TakerAsSellerTrade takerTrade) {
|
public SellerAsTakerProtocol(TakerAsSellerTrade takerTrade) {
|
||||||
log.debug("New SellerAsTakerProtocol " + this);
|
log.debug("New SellerAsTakerProtocol " + this);
|
||||||
this.takerAsSellerTrade = takerTrade;
|
this.takerAsSellerTrade = takerTrade;
|
||||||
takerTradeProcessModel = takerTrade.getProcessModel();
|
processModel = takerTrade.getProcessModel();
|
||||||
|
|
||||||
messageHandler = this::handleMessage;
|
messageHandler = this::handleMessage;
|
||||||
takerTradeProcessModel.getMessageService().addMessageHandler(messageHandler);
|
processModel.getMessageService().addMessageHandler(messageHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,14 +78,14 @@ public class SellerAsTakerProtocol implements Protocol {
|
||||||
|
|
||||||
public void cleanup() {
|
public void cleanup() {
|
||||||
log.debug("cleanup " + this);
|
log.debug("cleanup " + this);
|
||||||
takerTradeProcessModel.getMessageService().removeMessageHandler(messageHandler);
|
processModel.getMessageService().removeMessageHandler(messageHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMailboxMessage(MailboxMessage mailboxMessage) {
|
public void setMailboxMessage(MailboxMessage mailboxMessage) {
|
||||||
log.debug("setMailboxMessage " + mailboxMessage);
|
log.debug("setMailboxMessage " + mailboxMessage);
|
||||||
// Might be called twice, so check that its only processed once
|
// Might be called twice, so check that its only processed once
|
||||||
if (takerTradeProcessModel.getMailboxMessage() == null) {
|
if (processModel.getMailboxMessage() == null) {
|
||||||
takerTradeProcessModel.setMailboxMessage(mailboxMessage);
|
processModel.setMailboxMessage(mailboxMessage);
|
||||||
if (mailboxMessage instanceof FiatTransferStartedMessage) {
|
if (mailboxMessage instanceof FiatTransferStartedMessage) {
|
||||||
handleFiatTransferStartedMessage((FiatTransferStartedMessage) mailboxMessage);
|
handleFiatTransferStartedMessage((FiatTransferStartedMessage) mailboxMessage);
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,7 @@ public class SellerAsTakerProtocol implements Protocol {
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
private void handleRequestTakerDepositPaymentMessage(RequestPayDepositMessage tradeMessage) {
|
private void handleRequestTakerDepositPaymentMessage(RequestPayDepositMessage tradeMessage) {
|
||||||
takerTradeProcessModel.setTradeMessage(tradeMessage);
|
processModel.setTradeMessage(tradeMessage);
|
||||||
|
|
||||||
TaskRunner<TakerTrade> taskRunner = new TaskRunner<>(takerAsSellerTrade,
|
TaskRunner<TakerTrade> taskRunner = new TaskRunner<>(takerAsSellerTrade,
|
||||||
() -> log.debug("taskRunner at handleTakerDepositPaymentRequestMessage completed"),
|
() -> log.debug("taskRunner at handleTakerDepositPaymentRequestMessage completed"),
|
||||||
|
@ -131,7 +131,7 @@ public class SellerAsTakerProtocol implements Protocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleDepositTxPublishedMessage(DepositTxPublishedMessage tradeMessage) {
|
private void handleDepositTxPublishedMessage(DepositTxPublishedMessage tradeMessage) {
|
||||||
takerTradeProcessModel.setTradeMessage(tradeMessage);
|
processModel.setTradeMessage(tradeMessage);
|
||||||
|
|
||||||
TaskRunner<TakerAsSellerTrade> taskRunner = new TaskRunner<>(takerAsSellerTrade,
|
TaskRunner<TakerAsSellerTrade> taskRunner = new TaskRunner<>(takerAsSellerTrade,
|
||||||
() -> log.debug("taskRunner at handleDepositTxPublishedMessage completed"),
|
() -> log.debug("taskRunner at handleDepositTxPublishedMessage completed"),
|
||||||
|
@ -145,7 +145,7 @@ public class SellerAsTakerProtocol implements Protocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleFiatTransferStartedMessage(FiatTransferStartedMessage tradeMessage) {
|
private void handleFiatTransferStartedMessage(FiatTransferStartedMessage tradeMessage) {
|
||||||
takerTradeProcessModel.setTradeMessage(tradeMessage);
|
processModel.setTradeMessage(tradeMessage);
|
||||||
|
|
||||||
TaskRunner<TakerAsSellerTrade> taskRunner = new TaskRunner<>(takerAsSellerTrade,
|
TaskRunner<TakerAsSellerTrade> taskRunner = new TaskRunner<>(takerAsSellerTrade,
|
||||||
() -> log.debug("taskRunner at handleFiatTransferStartedMessage completed"),
|
() -> log.debug("taskRunner at handleFiatTransferStartedMessage completed"),
|
||||||
|
@ -169,7 +169,7 @@ public class SellerAsTakerProtocol implements Protocol {
|
||||||
log.debug("taskRunner at handleFiatReceivedUIEvent completed");
|
log.debug("taskRunner at handleFiatReceivedUIEvent completed");
|
||||||
|
|
||||||
// we are done!
|
// we are done!
|
||||||
takerTradeProcessModel.onComplete();
|
processModel.onComplete();
|
||||||
},
|
},
|
||||||
this::handleTaskRunnerFault);
|
this::handleTaskRunnerFault);
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ public class SellerAsTakerProtocol implements Protocol {
|
||||||
TradeMessage tradeMessage = (TradeMessage) message;
|
TradeMessage tradeMessage = (TradeMessage) message;
|
||||||
nonEmptyStringOf(tradeMessage.tradeId);
|
nonEmptyStringOf(tradeMessage.tradeId);
|
||||||
|
|
||||||
if (tradeMessage.tradeId.equals(takerTradeProcessModel.getId())) {
|
if (tradeMessage.tradeId.equals(processModel.getId())) {
|
||||||
if (tradeMessage instanceof RequestPayDepositMessage) {
|
if (tradeMessage instanceof RequestPayDepositMessage) {
|
||||||
handleRequestTakerDepositPaymentMessage((RequestPayDepositMessage) tradeMessage);
|
handleRequestTakerDepositPaymentMessage((RequestPayDepositMessage) tradeMessage);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class TakerCommitDepositTx extends TakerTradeTask {
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
// To access tx confidence we need to add that tx into our wallet.
|
// To access tx confidence we need to add that tx into our wallet.
|
||||||
Transaction depositTx = takerTradeProcessModel.getTradeWalletService().commitTx(takerTrade.getDepositTx());
|
Transaction depositTx = processModel.getTradeWalletService().commitTx(takerTrade.getDepositTx());
|
||||||
|
|
||||||
takerTrade.setDepositTx(depositTx);
|
takerTrade.setDepositTx(depositTx);
|
||||||
|
|
||||||
|
|
|
@ -36,19 +36,19 @@ public class TakerCreatesAndSignContract extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
assert takerTradeProcessModel.getTakeOfferFeeTx() != null;
|
assert processModel.getTakeOfferFeeTx() != null;
|
||||||
Contract contract = new Contract(
|
Contract contract = new Contract(
|
||||||
takerTradeProcessModel.getOffer(),
|
processModel.getOffer(),
|
||||||
model.getTradeAmount(),
|
model.getTradeAmount(),
|
||||||
takerTradeProcessModel.getTakeOfferFeeTx().getHashAsString(),
|
processModel.getTakeOfferFeeTx().getHashAsString(),
|
||||||
takerTradeProcessModel.tradingPeer.getAccountId(),
|
processModel.tradingPeer.getAccountId(),
|
||||||
takerTradeProcessModel.getAccountId(),
|
processModel.getAccountId(),
|
||||||
takerTradeProcessModel.tradingPeer.getFiatAccount(),
|
processModel.tradingPeer.getFiatAccount(),
|
||||||
takerTradeProcessModel.getFiatAccount(),
|
processModel.getFiatAccount(),
|
||||||
takerTradeProcessModel.getOffer().getP2PSigPubKey(),
|
processModel.getOffer().getP2PSigPubKey(),
|
||||||
takerTradeProcessModel.getP2pSigPubKey());
|
processModel.getP2pSigPubKey());
|
||||||
String contractAsJson = Utilities.objectToJson(contract);
|
String contractAsJson = Utilities.objectToJson(contract);
|
||||||
String signature = takerTradeProcessModel.getSignatureService().signMessage(takerTradeProcessModel.getRegistrationKeyPair(), contractAsJson);
|
String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(), contractAsJson);
|
||||||
|
|
||||||
model.setContract(contract);
|
model.setContract(contract);
|
||||||
model.setContractAsJson(contractAsJson);
|
model.setContractAsJson(contractAsJson);
|
||||||
|
|
|
@ -42,18 +42,18 @@ public class TakerCreatesAndSignsDepositTx extends TakerTradeTask {
|
||||||
Coin inputAmount = takerTrade.getSecurityDeposit().add(FeePolicy.TX_FEE).add(takerTrade.getTradeAmount());
|
Coin inputAmount = takerTrade.getSecurityDeposit().add(FeePolicy.TX_FEE).add(takerTrade.getTradeAmount());
|
||||||
Coin msOutputAmount = inputAmount.add(takerTrade.getSecurityDeposit());
|
Coin msOutputAmount = inputAmount.add(takerTrade.getSecurityDeposit());
|
||||||
|
|
||||||
TradeWalletService.Result result = takerTradeProcessModel.getTradeWalletService().createAndSignDepositTx(
|
TradeWalletService.Result result = processModel.getTradeWalletService().createAndSignDepositTx(
|
||||||
inputAmount,
|
inputAmount,
|
||||||
msOutputAmount,
|
msOutputAmount,
|
||||||
takerTradeProcessModel.tradingPeer.getConnectedOutputsForAllInputs(),
|
processModel.tradingPeer.getConnectedOutputsForAllInputs(),
|
||||||
takerTradeProcessModel.tradingPeer.getOutputs(),
|
processModel.tradingPeer.getOutputs(),
|
||||||
takerTradeProcessModel.getAddressEntry(),
|
processModel.getAddressEntry(),
|
||||||
takerTradeProcessModel.tradingPeer.getTradeWalletPubKey(),
|
processModel.tradingPeer.getTradeWalletPubKey(),
|
||||||
takerTradeProcessModel.getTradeWalletPubKey(),
|
processModel.getTradeWalletPubKey(),
|
||||||
takerTradeProcessModel.getArbitratorPubKey());
|
processModel.getArbitratorPubKey());
|
||||||
|
|
||||||
takerTradeProcessModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs());
|
processModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs());
|
||||||
takerTradeProcessModel.setPreparedDepositTx(result.getDepositTx());
|
processModel.setPreparedDepositTx(result.getDepositTx());
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
|
|
@ -40,8 +40,8 @@ public class TakerProcessDepositTxPublishedMessage extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
DepositTxPublishedMessage message = (DepositTxPublishedMessage) takerTradeProcessModel.getTradeMessage();
|
DepositTxPublishedMessage message = (DepositTxPublishedMessage) processModel.getTradeMessage();
|
||||||
checkTradeId(takerTradeProcessModel.getId(), message);
|
checkTradeId(processModel.getId(), message);
|
||||||
checkNotNull(message);
|
checkNotNull(message);
|
||||||
|
|
||||||
takerTrade.setDepositTx(checkNotNull(message.depositTx));
|
takerTrade.setDepositTx(checkNotNull(message.depositTx));
|
||||||
|
|
|
@ -40,14 +40,14 @@ public class TakerProcessFiatTransferStartedMessage extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
FiatTransferStartedMessage message = (FiatTransferStartedMessage) takerTradeProcessModel.getTradeMessage();
|
FiatTransferStartedMessage message = (FiatTransferStartedMessage) processModel.getTradeMessage();
|
||||||
checkTradeId(takerTradeProcessModel.getId(), message);
|
checkTradeId(processModel.getId(), message);
|
||||||
checkNotNull(message);
|
checkNotNull(message);
|
||||||
|
|
||||||
takerTradeProcessModel.tradingPeer.setSignature(checkNotNull(message.buyerSignature));
|
processModel.tradingPeer.setSignature(checkNotNull(message.buyerSignature));
|
||||||
takerTradeProcessModel.tradingPeer.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.buyerPayoutAmount)));
|
processModel.tradingPeer.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.buyerPayoutAmount)));
|
||||||
takerTradeProcessModel.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.sellerPayoutAmount)));
|
processModel.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.sellerPayoutAmount)));
|
||||||
takerTradeProcessModel.tradingPeer.setPayoutAddressString(nonEmptyStringOf(message.buyerPayoutAddress));
|
processModel.tradingPeer.setPayoutAddressString(nonEmptyStringOf(message.buyerPayoutAddress));
|
||||||
|
|
||||||
if (takerTrade instanceof TakerAsBuyerTrade)
|
if (takerTrade instanceof TakerAsBuyerTrade)
|
||||||
takerTrade.setProcessState(TakerAsBuyerTrade.ProcessState.FIAT_PAYMENT_STARTED);
|
takerTrade.setProcessState(TakerAsBuyerTrade.ProcessState.FIAT_PAYMENT_STARTED);
|
||||||
|
|
|
@ -38,18 +38,18 @@ public class TakerProcessRequestSellerDepositPaymentMessage extends TakerTradeTa
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
RequestPayDepositMessage message = (RequestPayDepositMessage) takerTradeProcessModel.getTradeMessage();
|
RequestPayDepositMessage message = (RequestPayDepositMessage) processModel.getTradeMessage();
|
||||||
checkTradeId(takerTradeProcessModel.getId(), message);
|
checkTradeId(processModel.getId(), message);
|
||||||
checkNotNull(message);
|
checkNotNull(message);
|
||||||
|
|
||||||
takerTradeProcessModel.tradingPeer.setConnectedOutputsForAllInputs(checkNotNull(message.buyerConnectedOutputsForAllInputs));
|
processModel.tradingPeer.setConnectedOutputsForAllInputs(checkNotNull(message.buyerConnectedOutputsForAllInputs));
|
||||||
checkArgument(message.buyerConnectedOutputsForAllInputs.size() > 0);
|
checkArgument(message.buyerConnectedOutputsForAllInputs.size() > 0);
|
||||||
takerTradeProcessModel.tradingPeer.setOutputs(checkNotNull(message.buyerOutputs));
|
processModel.tradingPeer.setOutputs(checkNotNull(message.buyerOutputs));
|
||||||
takerTradeProcessModel.tradingPeer.setTradeWalletPubKey(checkNotNull(message.buyerTradeWalletPubKey));
|
processModel.tradingPeer.setTradeWalletPubKey(checkNotNull(message.buyerTradeWalletPubKey));
|
||||||
takerTradeProcessModel.tradingPeer.setP2pSigPubKey(checkNotNull(message.buyerP2PSigPublicKey));
|
processModel.tradingPeer.setP2pSigPubKey(checkNotNull(message.buyerP2PSigPublicKey));
|
||||||
takerTradeProcessModel.tradingPeer.setP2pEncryptPubKey(checkNotNull(message.buyerP2PEncryptPublicKey));
|
processModel.tradingPeer.setP2pEncryptPubKey(checkNotNull(message.buyerP2PEncryptPublicKey));
|
||||||
takerTradeProcessModel.tradingPeer.setFiatAccount(checkNotNull(message.buyerFiatAccount));
|
processModel.tradingPeer.setFiatAccount(checkNotNull(message.buyerFiatAccount));
|
||||||
takerTradeProcessModel.tradingPeer.setAccountId(nonEmptyStringOf(message.buyerAccountId));
|
processModel.tradingPeer.setAccountId(nonEmptyStringOf(message.buyerAccountId));
|
||||||
|
|
||||||
complete();
|
complete();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
|
|
@ -38,11 +38,11 @@ public class TakerSendsPayoutTxPublishedMessage extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
PayoutTxPublishedMessage tradeMessage = new PayoutTxPublishedMessage(takerTradeProcessModel.getId(), takerTradeProcessModel.getPayoutTx());
|
PayoutTxPublishedMessage tradeMessage = new PayoutTxPublishedMessage(processModel.getId(), processModel.getPayoutTx());
|
||||||
takerTradeProcessModel.getMessageService().sendMessage(takerTrade.getTradingPeer(),
|
processModel.getMessageService().sendMessage(takerTrade.getTradingPeer(),
|
||||||
tradeMessage,
|
tradeMessage,
|
||||||
takerTradeProcessModel.tradingPeer.getP2pSigPubKey(),
|
processModel.tradingPeer.getP2pSigPubKey(),
|
||||||
takerTradeProcessModel.tradingPeer.getP2pEncryptPubKey(),
|
processModel.tradingPeer.getP2pEncryptPubKey(),
|
||||||
new SendMessageListener() {
|
new SendMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleResult() {
|
public void handleResult() {
|
||||||
|
|
|
@ -42,20 +42,20 @@ public class TakerSignsAndPublishPayoutTx extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
takerTradeProcessModel.getTradeWalletService().signAndPublishPayoutTx(
|
processModel.getTradeWalletService().signAndPublishPayoutTx(
|
||||||
takerTrade.getDepositTx(),
|
takerTrade.getDepositTx(),
|
||||||
takerTradeProcessModel.tradingPeer.getSignature(),
|
processModel.tradingPeer.getSignature(),
|
||||||
takerTradeProcessModel.tradingPeer.getPayoutAmount(),
|
processModel.tradingPeer.getPayoutAmount(),
|
||||||
takerTradeProcessModel.getPayoutAmount(),
|
processModel.getPayoutAmount(),
|
||||||
takerTradeProcessModel.tradingPeer.getPayoutAddressString(),
|
processModel.tradingPeer.getPayoutAddressString(),
|
||||||
takerTradeProcessModel.getAddressEntry(),
|
processModel.getAddressEntry(),
|
||||||
takerTradeProcessModel.tradingPeer.getTradeWalletPubKey(),
|
processModel.tradingPeer.getTradeWalletPubKey(),
|
||||||
takerTradeProcessModel.getTradeWalletPubKey(),
|
processModel.getTradeWalletPubKey(),
|
||||||
takerTradeProcessModel.getArbitratorPubKey(),
|
processModel.getArbitratorPubKey(),
|
||||||
new FutureCallback<Transaction>() {
|
new FutureCallback<Transaction>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Transaction transaction) {
|
public void onSuccess(Transaction transaction) {
|
||||||
takerTradeProcessModel.setPayoutTx(transaction);
|
processModel.setPayoutTx(transaction);
|
||||||
|
|
||||||
if (takerTrade instanceof TakerAsBuyerTrade)
|
if (takerTrade instanceof TakerAsBuyerTrade)
|
||||||
takerTrade.setProcessState(TakerAsBuyerTrade.ProcessState.PAYOUT_PUBLISHED);
|
takerTrade.setProcessState(TakerAsBuyerTrade.ProcessState.PAYOUT_PUBLISHED);
|
||||||
|
|
|
@ -35,7 +35,7 @@ public class VerifyTakeOfferFeePayment extends OffererTradeTask {
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
//TODO mocked yet, need a confidence listeners
|
//TODO mocked yet, need a confidence listeners
|
||||||
int numOfPeersSeenTx = offererTradeProcessModel.getWalletService().getNumOfPeersSeenTx(offererTradeProcessModel.getTakeOfferFeeTxId());
|
int numOfPeersSeenTx = processModel.getWalletService().getNumOfPeersSeenTx(processModel.getTakeOfferFeeTxId());
|
||||||
/* if (numOfPeersSeenTx > 2) {
|
/* if (numOfPeersSeenTx > 2) {
|
||||||
resultHandler.handleResult();
|
resultHandler.handleResult();
|
||||||
}*/
|
}*/
|
||||||
|
|
|
@ -37,9 +37,9 @@ public class VerifyTakerAccount extends OffererTradeTask {
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
//TODO mocked yet
|
//TODO mocked yet
|
||||||
if (offererTradeProcessModel.getBlockChainService().verifyAccountRegistration()) {
|
if (processModel.getBlockChainService().verifyAccountRegistration()) {
|
||||||
if (offererTradeProcessModel.getBlockChainService().isAccountBlackListed(offererTradeProcessModel.tradingPeer.getAccountId(),
|
if (processModel.getBlockChainService().isAccountBlackListed(processModel.tradingPeer.getAccountId(),
|
||||||
offererTradeProcessModel
|
processModel
|
||||||
.tradingPeer
|
.tradingPeer
|
||||||
.getFiatAccount())) {
|
.getFiatAccount())) {
|
||||||
log.error("Taker is blacklisted");
|
log.error("Taker is blacklisted");
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class BroadcastTakeOfferFeeTx extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
takerTradeProcessModel.getTradeWalletService().broadcastTakeOfferFeeTx(takerTradeProcessModel.getTakeOfferFeeTx(),
|
processModel.getTradeWalletService().broadcastTakeOfferFeeTx(processModel.getTakeOfferFeeTx(),
|
||||||
new FutureCallback<Transaction>() {
|
new FutureCallback<Transaction>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Transaction transaction) {
|
public void onSuccess(Transaction transaction) {
|
||||||
|
|
|
@ -38,9 +38,9 @@ public class CreateTakeOfferFeeTx extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
Transaction createTakeOfferFeeTx = takerTradeProcessModel.getTradeWalletService().createTakeOfferFeeTx(takerTradeProcessModel.getAddressEntry());
|
Transaction createTakeOfferFeeTx = processModel.getTradeWalletService().createTakeOfferFeeTx(processModel.getAddressEntry());
|
||||||
|
|
||||||
takerTradeProcessModel.setTakeOfferFeeTx(createTakeOfferFeeTx);
|
processModel.setTakeOfferFeeTx(createTakeOfferFeeTx);
|
||||||
|
|
||||||
if (takerTrade instanceof TakerAsBuyerTrade)
|
if (takerTrade instanceof TakerAsBuyerTrade)
|
||||||
takerTrade.setProcessState(TakerAsBuyerTrade.ProcessState.TAKE_OFFER_FEE_TX_CREATED);
|
takerTrade.setProcessState(TakerAsBuyerTrade.ProcessState.TAKE_OFFER_FEE_TX_CREATED);
|
||||||
|
|
|
@ -35,7 +35,7 @@ public class VerifyOfferFeePayment extends TakerTradeTask {
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
//TODO impl. missing
|
//TODO impl. missing
|
||||||
int numOfPeersSeenTx = takerTradeProcessModel.getWalletService().getNumOfPeersSeenTx(takerTradeProcessModel.getTakeOfferFeeTx().getHashAsString());
|
int numOfPeersSeenTx = processModel.getWalletService().getNumOfPeersSeenTx(processModel.getTakeOfferFeeTx().getHashAsString());
|
||||||
/* if (numOfPeersSeenTx > 2) {
|
/* if (numOfPeersSeenTx > 2) {
|
||||||
resultHandler.handleResult();
|
resultHandler.handleResult();
|
||||||
}*/
|
}*/
|
||||||
|
|
|
@ -34,9 +34,9 @@ public class VerifyOffererAccount extends TakerTradeTask {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() {
|
protected void doRun() {
|
||||||
try {
|
try {
|
||||||
if (takerTradeProcessModel.getBlockChainService().verifyAccountRegistration()) {
|
if (processModel.getBlockChainService().verifyAccountRegistration()) {
|
||||||
if (takerTradeProcessModel.getBlockChainService().isAccountBlackListed(takerTradeProcessModel.tradingPeer.getAccountId(),
|
if (processModel.getBlockChainService().isAccountBlackListed(processModel.tradingPeer.getAccountId(),
|
||||||
takerTradeProcessModel.tradingPeer.getFiatAccount())) {
|
processModel.tradingPeer.getFiatAccount())) {
|
||||||
failed("Taker is blacklisted.");
|
failed("Taker is blacklisted.");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -1,232 +0,0 @@
|
||||||
/*
|
|
||||||
* This file is part of Bitsquare.
|
|
||||||
*
|
|
||||||
* Bitsquare is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU Affero General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or (at
|
|
||||||
* your option) any later version.
|
|
||||||
*
|
|
||||||
* Bitsquare is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
|
|
||||||
* License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package io.bitsquare.trade.protocol.trade.taker.models;
|
|
||||||
|
|
||||||
import io.bitsquare.arbitration.ArbitrationRepository;
|
|
||||||
import io.bitsquare.btc.AddressEntry;
|
|
||||||
import io.bitsquare.btc.BlockChainService;
|
|
||||||
import io.bitsquare.btc.TradeWalletService;
|
|
||||||
import io.bitsquare.btc.WalletService;
|
|
||||||
import io.bitsquare.crypto.SignatureService;
|
|
||||||
import io.bitsquare.fiat.FiatAccount;
|
|
||||||
import io.bitsquare.offer.Offer;
|
|
||||||
import io.bitsquare.p2p.MessageService;
|
|
||||||
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
|
||||||
import io.bitsquare.trade.protocol.trade.shared.models.TradingPeer;
|
|
||||||
import io.bitsquare.user.User;
|
|
||||||
|
|
||||||
import org.bitcoinj.core.Coin;
|
|
||||||
import org.bitcoinj.core.Transaction;
|
|
||||||
import org.bitcoinj.core.TransactionOutput;
|
|
||||||
import org.bitcoinj.crypto.DeterministicKey;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import java.security.PublicKey;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fully serializable, no transient fields
|
|
||||||
* <p/>
|
|
||||||
* Holds all data which are needed between tasks. All relevant data for the trade itself are stored in Trade.
|
|
||||||
*/
|
|
||||||
public class TakerProcessModel extends ProcessModel implements Serializable {
|
|
||||||
// That object is saved to disc. We need to take care of changes to not break deserialization.
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
transient private static final Logger log = LoggerFactory.getLogger(TakerProcessModel.class);
|
|
||||||
|
|
||||||
// Immutable
|
|
||||||
public final TradingPeer tradingPeer;
|
|
||||||
|
|
||||||
// Transient/Immutable
|
|
||||||
transient private Offer offer;
|
|
||||||
transient private WalletService walletService;
|
|
||||||
transient private User user;
|
|
||||||
|
|
||||||
// Mutable
|
|
||||||
private Transaction takeOfferFeeTx;
|
|
||||||
private Transaction payoutTx;
|
|
||||||
private List<TransactionOutput> connectedOutputsForAllInputs;
|
|
||||||
private Coin payoutAmount;
|
|
||||||
private Transaction preparedDepositTx;
|
|
||||||
private List<TransactionOutput> outputs; // used to verify amounts with change outputs
|
|
||||||
private byte[] payoutTxSignature;
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Constructor, initialization
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
public TakerProcessModel() {
|
|
||||||
log.trace("Created by constructor");
|
|
||||||
tradingPeer = new TradingPeer();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
|
|
||||||
in.defaultReadObject();
|
|
||||||
log.trace("Created from serialized form.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAllServicesInitialized(Offer offer,
|
|
||||||
MessageService messageService,
|
|
||||||
WalletService walletService,
|
|
||||||
TradeWalletService tradeWalletService,
|
|
||||||
BlockChainService blockChainService,
|
|
||||||
SignatureService signatureService,
|
|
||||||
ArbitrationRepository arbitrationRepository,
|
|
||||||
User user) {
|
|
||||||
log.trace("onAllServicesInitialized");
|
|
||||||
super.onAllServicesInitialized(offer,
|
|
||||||
messageService,
|
|
||||||
walletService,
|
|
||||||
tradeWalletService,
|
|
||||||
blockChainService,
|
|
||||||
signatureService,
|
|
||||||
arbitrationRepository,
|
|
||||||
user);
|
|
||||||
|
|
||||||
this.offer = offer;
|
|
||||||
this.walletService = walletService;
|
|
||||||
this.user = user;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Getter/Setter for Mutable objects
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public Transaction getPayoutTx() {
|
|
||||||
return payoutTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPayoutTx(Transaction payoutTx) {
|
|
||||||
this.payoutTx = payoutTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public Transaction getTakeOfferFeeTx() {
|
|
||||||
return takeOfferFeeTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTakeOfferFeeTx(Transaction takeOfferFeeTx) {
|
|
||||||
this.takeOfferFeeTx = takeOfferFeeTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Getter only
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
public FiatAccount getFiatAccount() {
|
|
||||||
return user.getFiatAccount(offer.getBankAccountId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public DeterministicKey getRegistrationKeyPair() {
|
|
||||||
return walletService.getRegistrationAddressEntry().getKeyPair();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAccountId() {
|
|
||||||
return user.getAccountId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public PublicKey getP2pSigPubKey() {
|
|
||||||
return user.getP2PSigPubKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
public PublicKey getP2pEncryptPublicKey() {
|
|
||||||
return user.getP2PEncryptPubKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getRegistrationPubKey() {
|
|
||||||
return walletService.getRegistrationAddressEntry().getPubKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
public AddressEntry getAddressEntry() {
|
|
||||||
return walletService.getAddressEntry(offer.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getTradeWalletPubKey() {
|
|
||||||
return getAddressEntry().getPubKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
public PublicKey getP2pEncryptPubKey() {
|
|
||||||
return user.getP2PEncryptPubKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Getter/Setter for Mutable objects
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public List<TransactionOutput> getConnectedOutputsForAllInputs() {
|
|
||||||
return connectedOutputsForAllInputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConnectedOutputsForAllInputs(List<TransactionOutput> connectedOutputsForAllInputs) {
|
|
||||||
this.connectedOutputsForAllInputs = connectedOutputsForAllInputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public Coin getPayoutAmount() {
|
|
||||||
return payoutAmount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPayoutAmount(Coin payoutAmount) {
|
|
||||||
this.payoutAmount = payoutAmount;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public Transaction getPreparedDepositTx() {
|
|
||||||
return preparedDepositTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPreparedDepositTx(Transaction preparedDepositTx) {
|
|
||||||
this.preparedDepositTx = preparedDepositTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public List<TransactionOutput> getOutputs() {
|
|
||||||
return outputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOutputs(List<TransactionOutput> outputs) {
|
|
||||||
this.outputs = outputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public byte[] getPayoutTxSignature() {
|
|
||||||
return payoutTxSignature;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPayoutTxSignature(byte[] payoutTxSignature) {
|
|
||||||
this.payoutTxSignature = payoutTxSignature;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -20,21 +20,21 @@ package io.bitsquare.trade.protocol.trade.taker.tasks;
|
||||||
import io.bitsquare.common.taskrunner.Task;
|
import io.bitsquare.common.taskrunner.Task;
|
||||||
import io.bitsquare.common.taskrunner.TaskRunner;
|
import io.bitsquare.common.taskrunner.TaskRunner;
|
||||||
import io.bitsquare.trade.TakerTrade;
|
import io.bitsquare.trade.TakerTrade;
|
||||||
import io.bitsquare.trade.protocol.trade.taker.models.TakerProcessModel;
|
import io.bitsquare.trade.protocol.trade.ProcessModel;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class TakerTradeTask extends Task<TakerTrade> {
|
public class TakerTradeTask extends Task<TakerTrade> {
|
||||||
private static final Logger log = LoggerFactory.getLogger(TakerTradeTask.class);
|
private static final Logger log = LoggerFactory.getLogger(TakerTradeTask.class);
|
||||||
protected final TakerProcessModel takerTradeProcessModel;
|
protected final ProcessModel processModel;
|
||||||
protected final TakerTrade takerTrade;
|
protected final TakerTrade takerTrade;
|
||||||
|
|
||||||
public TakerTradeTask(TaskRunner taskHandler, TakerTrade takerTrade) {
|
public TakerTradeTask(TaskRunner taskHandler, TakerTrade takerTrade) {
|
||||||
super(taskHandler, takerTrade);
|
super(taskHandler, takerTrade);
|
||||||
|
|
||||||
this.takerTrade = takerTrade;
|
this.takerTrade = takerTrade;
|
||||||
takerTradeProcessModel = takerTrade.getProcessModel();
|
processModel = takerTrade.getProcessModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue