Unified Buyer tasks

This commit is contained in:
Manfred Karrer 2015-04-02 15:11:49 +02:00
parent a95936297a
commit 0a4e082e44
40 changed files with 284 additions and 999 deletions

View file

@ -29,18 +29,17 @@ import io.bitsquare.trade.protocol.placeoffer.tasks.BroadcastCreateOfferFeeTx;
import io.bitsquare.trade.protocol.placeoffer.tasks.CreateOfferFeeTx; import io.bitsquare.trade.protocol.placeoffer.tasks.CreateOfferFeeTx;
import io.bitsquare.trade.protocol.placeoffer.tasks.ValidateOffer; import io.bitsquare.trade.protocol.placeoffer.tasks.ValidateOffer;
import io.bitsquare.trade.protocol.trade.buyer.offerer.BuyerAsOffererProtocol; import io.bitsquare.trade.protocol.trade.buyer.offerer.BuyerAsOffererProtocol;
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.OffererProcessPayoutTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererProcessRequestDepositTxInputsMessage; import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererProcessRequestDepositTxInputsMessage;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererProcessRequestPublishDepositTxMessage; import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererProcessRequestPublishDepositTxMessage;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererSendsDepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererSendsFiatTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererSendsRequestSellerDepositPaymentMessage;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererSignsAndPublishDepositTx;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererVerifiesAndSignsContract;
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.buyer.tasks.BuyerCreatesAndSignPayoutTx;
import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerCreatesDepositTxInputs;
import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerProcessPayoutTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSendsDepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSendsFiatTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSendsRequestPayDepositMessage;
import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSignsAndPublishDepositTx;
import io.bitsquare.trade.protocol.trade.seller.taker.SellerAsTakerProtocol; import io.bitsquare.trade.protocol.trade.seller.taker.SellerAsTakerProtocol;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerCommitDepositTx; import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerCommitDepositTx;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerCreatesAndSignContract; import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerCreatesAndSignContract;
@ -102,20 +101,19 @@ public class DebugView extends InitializableView {
/*---- Protocol ----*/ /*---- Protocol ----*/
BuyerAsOffererProtocol.class, BuyerAsOffererProtocol.class,
OffererProcessRequestDepositTxInputsMessage.class, OffererProcessRequestDepositTxInputsMessage.class,
OffererCreatesDepositTxInputs.class, BuyerCreatesDepositTxInputs.class,
OffererSendsRequestSellerDepositPaymentMessage.class, BuyerSendsRequestPayDepositMessage.class,
OffererProcessRequestPublishDepositTxMessage.class, OffererProcessRequestPublishDepositTxMessage.class,
VerifyTakerAccount.class, VerifyTakerAccount.class,
OffererVerifiesAndSignsContract.class, BuyerSignsAndPublishDepositTx.class,
OffererSignsAndPublishDepositTx.class, BuyerSendsDepositTxPublishedMessage.class,
OffererSendsDepositTxPublishedMessage.class,
OffererCreatesAndSignPayoutTx.class, BuyerCreatesAndSignPayoutTx.class,
VerifyTakeOfferFeePayment.class, VerifyTakeOfferFeePayment.class,
OffererSendsFiatTransferStartedMessage.class, BuyerSendsFiatTransferStartedMessage.class,
OffererProcessPayoutTxPublishedMessage.class, BuyerProcessPayoutTxPublishedMessage.class,
Boolean.class, /* used as seperator*/ Boolean.class, /* used as seperator*/

View file

@ -217,7 +217,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
// payment // payment
public String getPaymentMethod() { public String getPaymentMethod() {
assert dataModel.getContract() != null; assert dataModel.getContract() != null;
return BSResources.get(dataModel.getContract().takerFiatAccount.type.toString()); return BSResources.get(dataModel.getContract().sellerFiatAccount.type.toString());
} }
public String getFiatAmount() { public String getFiatAmount() {
@ -226,17 +226,17 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
public String getHolderName() { public String getHolderName() {
assert dataModel.getContract() != null; assert dataModel.getContract() != null;
return dataModel.getContract().takerFiatAccount.accountHolderName; return dataModel.getContract().sellerFiatAccount.accountHolderName;
} }
public String getPrimaryId() { public String getPrimaryId() {
assert dataModel.getContract() != null; assert dataModel.getContract() != null;
return dataModel.getContract().takerFiatAccount.accountPrimaryID; return dataModel.getContract().sellerFiatAccount.accountPrimaryID;
} }
public String getSecondaryId() { public String getSecondaryId() {
assert dataModel.getContract() != null; assert dataModel.getContract() != null;
return dataModel.getContract().takerFiatAccount.accountSecondaryID; return dataModel.getContract().sellerFiatAccount.accountSecondaryID;
} }
// summary // summary

View file

@ -23,7 +23,7 @@ import io.bitsquare.common.handlers.ResultHandler;
import java.security.PublicKey; import java.security.PublicKey;
public interface MailboxService { public interface MailboxService {
void addMessage(PublicKey p2pSigPubKey, EncryptedMailboxMessage message, ResultHandler resultHandler, FaultHandler faultHandler); void addMessage(PublicKey recipientP2pSigPubKey, EncryptedMailboxMessage message, ResultHandler resultHandler, FaultHandler faultHandler);
void getAllMessages(PublicKey p2pSigPubKey, MailboxMessagesResultHandler resultHandler); void getAllMessages(PublicKey p2pSigPubKey, MailboxMessagesResultHandler resultHandler);

View file

@ -26,7 +26,7 @@ public interface MessageService extends P2PService {
void sendMessage(Peer peer, Message message, SendMessageListener listener); void sendMessage(Peer peer, Message message, SendMessageListener listener);
void sendMessage(Peer peer, Message message, PublicKey p2pSigPubKey, PublicKey p2pEncryptPubKey, SendMessageListener listener); void sendMessage(Peer peer, Message message, PublicKey recipientP2pSigPubKey, PublicKey recipientP2pEncryptPubKey, SendMessageListener listener);
void addMessageHandler(MessageHandler listener); void addMessageHandler(MessageHandler listener);

View file

@ -70,14 +70,14 @@ public class TomP2PMailboxService extends TomP2PDHTService implements MailboxSer
} }
@Override @Override
public void addMessage(PublicKey p2pSigPubKey, EncryptedMailboxMessage message, ResultHandler resultHandler, FaultHandler faultHandler) { public void addMessage(PublicKey recipientP2pSigPubKey, EncryptedMailboxMessage message, ResultHandler resultHandler, FaultHandler faultHandler) {
try { try {
final Data data = new Data(message); final Data data = new Data(message);
data.ttlSeconds(TTL); data.ttlSeconds(TTL);
log.trace("Add message to DHT requested. Added data: [locationKey: " + getLocationKey(p2pSigPubKey) + log.trace("Add message to DHT requested. Added data: [locationKey: " + getLocationKey(recipientP2pSigPubKey) +
", hash: " + data.hash().toString() + "]"); ", hash: " + data.hash().toString() + "]");
FuturePut futurePut = addDataToMapOfProtectedDomain(getLocationKey(p2pSigPubKey), data, p2pSigPubKey); FuturePut futurePut = addDataToMapOfProtectedDomain(getLocationKey(recipientP2pSigPubKey), data, recipientP2pSigPubKey);
futurePut.addListener(new BaseFutureListener<BaseFuture>() { futurePut.addListener(new BaseFutureListener<BaseFuture>() {
@Override @Override
public void operationComplete(BaseFuture future) throws Exception { public void operationComplete(BaseFuture future) throws Exception {
@ -85,7 +85,7 @@ public class TomP2PMailboxService extends TomP2PDHTService implements MailboxSer
executor.execute(() -> { executor.execute(() -> {
resultHandler.handleResult(); resultHandler.handleResult();
log.trace("Add message to mailbox was successful. Added data: [locationKey: " + getLocationKey(p2pSigPubKey) + log.trace("Add message to mailbox was successful. Added data: [locationKey: " + getLocationKey(recipientP2pSigPubKey) +
", value: " + data + "]"); ", value: " + data + "]");
}); });
} }

View file

@ -78,7 +78,7 @@ public class TomP2PMessageService extends TomP2PService implements MessageServic
} }
@Override @Override
public void sendMessage(Peer peer, Message message, PublicKey p2pSigPubKey, PublicKey p2pEncryptPubKey, public void sendMessage(Peer peer, Message message, PublicKey recipientP2pSigPubKey, PublicKey recipientP2pEncryptPubKey,
SendMessageListener listener) { SendMessageListener listener) {
if (peer == null) if (peer == null)
@ -95,9 +95,9 @@ public class TomP2PMessageService extends TomP2PService implements MessageServic
executor.execute(listener::handleResult); executor.execute(listener::handleResult);
} }
else { else {
if (p2pSigPubKey != null && p2pEncryptPubKey != null) { if (recipientP2pSigPubKey != null && recipientP2pEncryptPubKey != null) {
log.info("sendMessage failed. We will try to send the message to the mailbox. Fault reason: " + futureDirect.failedReason()); log.info("sendMessage failed. We will try to send the message to the mailbox. Fault reason: " + futureDirect.failedReason());
sendMailboxMessage(p2pSigPubKey, p2pEncryptPubKey, (MailboxMessage) message, listener); sendMailboxMessage(recipientP2pSigPubKey, recipientP2pEncryptPubKey, (MailboxMessage) message, listener);
} }
else { else {
log.error("sendMessage failed with reason " + futureDirect.failedReason()); log.error("sendMessage failed with reason " + futureDirect.failedReason());
@ -108,9 +108,9 @@ public class TomP2PMessageService extends TomP2PService implements MessageServic
@Override @Override
public void exceptionCaught(Throwable t) throws Exception { public void exceptionCaught(Throwable t) throws Exception {
if (p2pSigPubKey != null && p2pEncryptPubKey != null) { if (recipientP2pSigPubKey != null && recipientP2pEncryptPubKey != null) {
log.info("sendMessage failed with exception. We will try to send the message to the mailbox. Exception: " + t.getMessage()); log.info("sendMessage failed with exception. We will try to send the message to the mailbox. Exception: " + t.getMessage());
sendMailboxMessage(p2pSigPubKey, p2pEncryptPubKey, (MailboxMessage) message, listener); sendMailboxMessage(recipientP2pSigPubKey, recipientP2pEncryptPubKey, (MailboxMessage) message, listener);
} }
else { else {
log.error("sendMessage failed with exception " + t.getMessage()); log.error("sendMessage failed with exception " + t.getMessage());
@ -120,18 +120,19 @@ public class TomP2PMessageService extends TomP2PService implements MessageServic
}); });
} }
private void sendMailboxMessage(PublicKey p2pSigPubKey, PublicKey p2pEncryptPubKey, MailboxMessage message, SendMessageListener listener) { private void sendMailboxMessage(PublicKey recipientP2pSigPubKey, PublicKey recipientP2pEncryptPubKey, MailboxMessage message, SendMessageListener
listener) {
Bucket bucket = null; Bucket bucket = null;
log.info("sendMailboxMessage called"); log.info("sendMailboxMessage called");
try { try {
bucket = encryptionService.encryptObject(p2pEncryptPubKey, message); bucket = encryptionService.encryptObject(recipientP2pEncryptPubKey, message);
} catch (Throwable t) { } catch (Throwable t) {
t.printStackTrace(); t.printStackTrace();
log.error(t.getMessage()); log.error(t.getMessage());
executor.execute(listener::handleFault); executor.execute(listener::handleFault);
} }
EncryptedMailboxMessage encrypted = new EncryptedMailboxMessage(bucket); EncryptedMailboxMessage encrypted = new EncryptedMailboxMessage(bucket);
mailboxService.addMessage(p2pSigPubKey, mailboxService.addMessage(recipientP2pSigPubKey,
encrypted, encrypted,
() -> { () -> {
log.debug("Message successfully added to peers mailbox."); log.debug("Message successfully added to peers mailbox.");

View file

@ -38,31 +38,31 @@ public class Contract implements Serializable {
public final Offer offer; public final Offer offer;
public final String takeOfferFeeTxID; public final String takeOfferFeeTxID;
public final Coin tradeAmount; public final Coin tradeAmount;
public final String offererAccountID; public final String buyerAccountID;
public final String takerAccountID; public final String sellerAccountID;
public final FiatAccount offererFiatAccount; public final FiatAccount buyerFiatAccount;
public final FiatAccount takerFiatAccount; public final FiatAccount sellerFiatAccount;
public final String offererP2PSigPubKeyAsString; public final String buyerP2PSigPubKeyAsString;
public final String takerP2PSigPubKeyAsString; public final String sellerP2PSigPubKeyAsString;
public Contract(Offer offer, public Contract(Offer offer,
Coin tradeAmount, Coin tradeAmount,
String takeOfferFeeTxID, String takeOfferFeeTxID,
String offererAccountID, String buyerAccountID,
String takerAccountID, String sellerAccountID,
FiatAccount offererFiatAccount, FiatAccount buyerFiatAccount,
FiatAccount takerFiatAccount, FiatAccount sellerFiatAccount,
PublicKey offererP2PSigPubKey, PublicKey buyerP2PSigPubKey,
PublicKey takerP2PSigPubKey) { PublicKey sellerP2PSigPubKey) {
this.offer = offer; this.offer = offer;
this.tradeAmount = tradeAmount; this.tradeAmount = tradeAmount;
this.takeOfferFeeTxID = takeOfferFeeTxID; this.takeOfferFeeTxID = takeOfferFeeTxID;
this.offererAccountID = offererAccountID; this.buyerAccountID = buyerAccountID;
this.takerAccountID = takerAccountID; this.sellerAccountID = sellerAccountID;
this.offererFiatAccount = offererFiatAccount; this.buyerFiatAccount = buyerFiatAccount;
this.takerFiatAccount = takerFiatAccount; this.sellerFiatAccount = sellerFiatAccount;
this.offererP2PSigPubKeyAsString = Utilities.getHexFromPubKey(offererP2PSigPubKey); this.buyerP2PSigPubKeyAsString = Utilities.getHexFromPubKey(buyerP2PSigPubKey);
this.takerP2PSigPubKeyAsString = Utilities.getHexFromPubKey(takerP2PSigPubKey); this.sellerP2PSigPubKeyAsString = Utilities.getHexFromPubKey(sellerP2PSigPubKey);
} }
@Override @Override
@ -71,12 +71,12 @@ public class Contract implements Serializable {
"offer=" + offer + "offer=" + offer +
", takeOfferFeeTxID='" + takeOfferFeeTxID + '\'' + ", takeOfferFeeTxID='" + takeOfferFeeTxID + '\'' +
", tradeAmount=" + tradeAmount + ", tradeAmount=" + tradeAmount +
", offererAccountID='" + offererAccountID + '\'' + ", buyerAccountID='" + buyerAccountID + '\'' +
", takerAccountID='" + takerAccountID + '\'' + ", sellerAccountID='" + sellerAccountID + '\'' +
", offererFiatAccount=" + offererFiatAccount + ", buyerFiatAccount=" + buyerFiatAccount +
", takerFiatAccount=" + takerFiatAccount + ", sellerFiatAccount=" + sellerFiatAccount +
", offererP2PSigPubKeyAsString='" + offererP2PSigPubKeyAsString + '\'' + ", buyerP2PSigPubKeyAsString='" + buyerP2PSigPubKeyAsString + '\'' +
", takerP2PSigPubKeyAsString='" + takerP2PSigPubKeyAsString + '\'' + ", sellerP2PSigPubKeyAsString='" + sellerP2PSigPubKeyAsString + '\'' +
'}'; '}';
} }
} }

View file

@ -27,17 +27,17 @@ import io.bitsquare.trade.BuyerAsOffererTrade;
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.TradeProtocol; import io.bitsquare.trade.protocol.trade.TradeProtocol;
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.OffererCreatesDepositTxInputs;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererProcessPayoutTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererProcessRequestDepositTxInputsMessage; import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererProcessRequestDepositTxInputsMessage;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererProcessRequestPublishDepositTxMessage; import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererProcessRequestPublishDepositTxMessage;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererSendsDepositTxPublishedMessage; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerCommitsPayoutTx;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererSendsFiatTransferStartedMessage; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerCreatesAndSignPayoutTx;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererSendsRequestSellerDepositPaymentMessage; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerCreatesDepositTxInputs;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererSignsAndPublishDepositTx; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerProcessPayoutTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.buyer.offerer.tasks.OffererVerifiesAndSignsContract; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSendsDepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSendsFiatTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSendsRequestPayDepositMessage;
import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSignsAndPublishDepositTx;
import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerVerifiesAndSignsContract;
import io.bitsquare.trade.protocol.trade.messages.PayoutTxPublishedMessage; 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;
@ -144,8 +144,8 @@ public class BuyerAsOffererProtocol implements TradeProtocol {
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks( taskRunner.addTasks(
OffererProcessRequestDepositTxInputsMessage.class, OffererProcessRequestDepositTxInputsMessage.class,
OffererCreatesDepositTxInputs.class, BuyerCreatesDepositTxInputs.class,
OffererSendsRequestSellerDepositPaymentMessage.class BuyerSendsRequestPayDepositMessage.class
); );
taskRunner.run(); taskRunner.run();
} }
@ -159,9 +159,9 @@ public class BuyerAsOffererProtocol implements TradeProtocol {
taskRunner.addTasks( taskRunner.addTasks(
OffererProcessRequestPublishDepositTxMessage.class, OffererProcessRequestPublishDepositTxMessage.class,
VerifyTakerAccount.class, VerifyTakerAccount.class,
OffererVerifiesAndSignsContract.class, BuyerVerifiesAndSignsContract.class,
OffererSignsAndPublishDepositTx.class, BuyerSignsAndPublishDepositTx.class,
OffererSendsDepositTxPublishedMessage.class BuyerSendsDepositTxPublishedMessage.class
); );
taskRunner.run(); taskRunner.run();
} }
@ -178,8 +178,8 @@ public class BuyerAsOffererProtocol implements TradeProtocol {
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks( taskRunner.addTasks(
VerifyTakeOfferFeePayment.class, VerifyTakeOfferFeePayment.class,
OffererCreatesAndSignPayoutTx.class, BuyerCreatesAndSignPayoutTx.class,
OffererSendsFiatTransferStartedMessage.class BuyerSendsFiatTransferStartedMessage.class
); );
taskRunner.run(); taskRunner.run();
} }
@ -200,8 +200,8 @@ public class BuyerAsOffererProtocol implements TradeProtocol {
}, },
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks(OffererProcessPayoutTxPublishedMessage.class); taskRunner.addTasks(BuyerProcessPayoutTxPublishedMessage.class);
taskRunner.addTasks(OffererCommitsPayoutTx.class); taskRunner.addTasks(BuyerCommitsPayoutTx.class);
taskRunner.run(); taskRunner.run();
} }

View file

@ -1,50 +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.buyer.offerer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask;
import org.bitcoinj.core.Transaction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OffererCommitsPayoutTx extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererCommitsPayoutTx.class);
public OffererCommitsPayoutTx(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
Transaction transaction = processModel.getTradeWalletService().commitTx(trade.getPayoutTx());
trade.setPayoutTx(transaction);
complete();
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
failed(t);
}
}
}

View file

@ -1,66 +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.buyer.offerer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask;
import org.bitcoinj.core.Coin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OffererCreatesAndSignPayoutTx extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererCreatesAndSignPayoutTx.class);
public OffererCreatesAndSignPayoutTx(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
assert trade.getTradeAmount() != null;
Coin securityDeposit = trade.getSecurityDeposit();
Coin offererPayoutAmount = securityDeposit.add(trade.getTradeAmount());
Coin takerPayoutAmount = securityDeposit;
byte[] offererPayoutTxSignature = processModel.getTradeWalletService().createAndSignPayoutTx(
trade.getDepositTx(),
offererPayoutAmount,
takerPayoutAmount,
processModel.getAddressEntry(),
processModel.tradingPeer.getPayoutAddressString(),
processModel.getTradeWalletPubKey(),
processModel.tradingPeer.getTradeWalletPubKey(),
processModel.getArbitratorPubKey());
processModel.setPayoutTxSignature(offererPayoutTxSignature);
processModel.setPayoutAmount(offererPayoutAmount);
processModel.tradingPeer.setPayoutAmount(takerPayoutAmount);
complete();
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
failed(t);
}
}
}

View file

@ -1,67 +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.buyer.offerer.tasks;
import io.bitsquare.btc.FeePolicy;
import io.bitsquare.btc.TradeWalletService;
import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.states.OffererState;
import org.bitcoinj.core.Coin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OffererCreatesDepositTxInputs extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererCreatesDepositTxInputs.class);
public OffererCreatesDepositTxInputs(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
log.debug("trade.id" + trade.getId());
Coin inputAmount = trade.getSecurityDeposit().add(FeePolicy.TX_FEE);
TradeWalletService.Result result = processModel.getTradeWalletService().createDepositTxInputs(inputAmount,
processModel.getAddressEntry());
processModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs());
processModel.setOutputs(result.getOutputs());
complete();
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
if (trade instanceof BuyerAsOffererTrade) {
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
}
else if (trade instanceof SellerAsOffererTrade) {
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
}
failed(t);
}
}
}

View file

@ -1,62 +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.buyer.offerer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.PayoutTxPublishedMessage;
import io.bitsquare.trade.states.OffererState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
import static io.bitsquare.util.Validator.checkTradeId;
public class OffererProcessPayoutTxPublishedMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererProcessPayoutTxPublishedMessage.class);
public OffererProcessPayoutTxPublishedMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
PayoutTxPublishedMessage message = (PayoutTxPublishedMessage) processModel.getTradeMessage();
checkTradeId(processModel.getId(), message);
checkNotNull(message);
trade.setPayoutTx(checkNotNull(message.payoutTx));
if (trade instanceof BuyerAsOffererTrade)
trade.setProcessState(OffererState.ProcessState.PAYOUT_PUBLISHED);
else if (trade instanceof SellerAsOffererTrade)
trade.setProcessState(OffererState.ProcessState.PAYOUT_PUBLISHED);
complete();
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
failed(t);
}
}
}

View file

@ -18,12 +18,10 @@
package io.bitsquare.trade.protocol.trade.buyer.offerer.tasks; package io.bitsquare.trade.protocol.trade.buyer.offerer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.buyer.tasks.StateUtil;
import io.bitsquare.trade.protocol.trade.messages.RequestDepositTxInputsMessage; import io.bitsquare.trade.protocol.trade.messages.RequestDepositTxInputsMessage;
import io.bitsquare.trade.states.OffererState;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -53,12 +51,7 @@ public class OffererProcessRequestDepositTxInputsMessage extends TradeTask {
} catch (Throwable t) { } catch (Throwable t) {
t.printStackTrace(); t.printStackTrace();
trade.setThrowable(t); trade.setThrowable(t);
StateUtil.setOfferOpenState(trade);
if (trade instanceof BuyerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
else if (trade instanceof SellerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
failed(t); failed(t);
} }
} }

View file

@ -18,12 +18,10 @@
package io.bitsquare.trade.protocol.trade.buyer.offerer.tasks; package io.bitsquare.trade.protocol.trade.buyer.offerer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.buyer.tasks.StateUtil;
import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxMessage; import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxMessage;
import io.bitsquare.trade.states.OffererState;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -60,12 +58,7 @@ public class OffererProcessRequestPublishDepositTxMessage extends TradeTask {
} catch (Throwable t) { } catch (Throwable t) {
t.printStackTrace(); t.printStackTrace();
trade.setThrowable(t); trade.setThrowable(t);
StateUtil.setOfferOpenState(trade);
if (trade instanceof BuyerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
else if (trade instanceof SellerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
failed(t); failed(t);
} }
} }

View file

@ -1,70 +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.buyer.offerer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.p2p.listener.SendMessageListener;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage;
import io.bitsquare.trade.states.OffererState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OffererSendsDepositTxPublishedMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererSendsDepositTxPublishedMessage.class);
public OffererSendsDepositTxPublishedMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
DepositTxPublishedMessage tradeMessage = new DepositTxPublishedMessage(processModel.getId(), trade.getDepositTx());
processModel.getMessageService().sendMessage(trade.getTradingPeer(), tradeMessage, new SendMessageListener() {
@Override
public void handleResult() {
log.trace("DepositTxPublishedMessage successfully arrived at peer");
complete();
}
@Override
public void handleFault() {
appendToErrorMessage("Sending DepositTxPublishedMessage failed");
trade.setErrorMessage(errorMessage);
if (trade instanceof BuyerAsOffererTrade)
trade.setProcessState(OffererState.ProcessState.MESSAGE_SENDING_FAILED);
else if (trade instanceof SellerAsOffererTrade)
trade.setProcessState(OffererState.ProcessState.MESSAGE_SENDING_FAILED);
failed();
}
});
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
failed(t);
}
}
}

View file

@ -1,87 +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.buyer.offerer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.p2p.listener.SendMessageListener;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage;
import io.bitsquare.trade.states.OffererState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OffererSendsFiatTransferStartedMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererSendsFiatTransferStartedMessage.class);
public OffererSendsFiatTransferStartedMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
FiatTransferStartedMessage tradeMessage = new FiatTransferStartedMessage(processModel.getId(),
processModel.getPayoutTxSignature(),
processModel.getPayoutAmount(),
processModel.tradingPeer.getPayoutAmount(),
processModel.getAddressEntry().getAddressString());
processModel.getMessageService().sendMessage(trade.getTradingPeer(), tradeMessage,
processModel.tradingPeer.getP2pSigPubKey(),
processModel.tradingPeer.getP2pEncryptPubKey(),
new SendMessageListener() {
@Override
public void handleResult() {
log.trace("Sending FiatTransferStartedMessage succeeded.");
if (trade instanceof BuyerAsOffererTrade) {
((BuyerAsOffererTrade) trade).setProcessState(OffererState.ProcessState.FIAT_PAYMENT_STARTED);
}
else if (trade instanceof SellerAsOffererTrade) {
((SellerAsOffererTrade) trade).setProcessState(OffererState.ProcessState.FIAT_PAYMENT_STARTED);
}
complete();
}
@Override
public void handleFault() {
appendToErrorMessage("Sending FiatTransferStartedMessage failed");
trade.setErrorMessage(errorMessage);
if (trade instanceof BuyerAsOffererTrade) {
((BuyerAsOffererTrade) trade).setProcessState(OffererState.ProcessState.MESSAGE_SENDING_FAILED);
}
else if (trade instanceof SellerAsOffererTrade) {
((SellerAsOffererTrade) trade).setProcessState(OffererState.ProcessState.MESSAGE_SENDING_FAILED);
}
failed();
}
});
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
failed(t);
}
}
}

View file

@ -1,91 +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.buyer.offerer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.p2p.listener.SendMessageListener;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositMessage;
import io.bitsquare.trade.states.OffererState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OffererSendsRequestSellerDepositPaymentMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererSendsRequestSellerDepositPaymentMessage.class);
public OffererSendsRequestSellerDepositPaymentMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
RequestPayDepositMessage tradeMessage = new RequestPayDepositMessage(
processModel.getId(),
processModel.getConnectedOutputsForAllInputs(),
processModel.getOutputs(),
processModel.getTradeWalletPubKey(),
processModel.getP2pSigPubKey(),
processModel.getP2pEncryptPubKey(),
processModel.getFiatAccount(),
processModel.getAccountId());
processModel.getMessageService().sendMessage(trade.getTradingPeer(), tradeMessage, new SendMessageListener() {
@Override
public void handleResult() {
log.trace("RequestTakerDepositPaymentMessage successfully arrived at peer");
complete();
}
@Override
public void handleFault() {
appendToErrorMessage("Sending RequestTakerDepositPaymentMessage failed");
trade.setErrorMessage(errorMessage);
if (trade instanceof BuyerAsOffererTrade) {
((BuyerAsOffererTrade) trade).setProcessState(OffererState.ProcessState.MESSAGE_SENDING_FAILED);
((BuyerAsOffererTrade) trade).setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
}
else if (trade instanceof SellerAsOffererTrade) {
((SellerAsOffererTrade) trade).setProcessState(OffererState.ProcessState.MESSAGE_SENDING_FAILED);
((SellerAsOffererTrade) trade).setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
}
failed();
}
});
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
if (trade instanceof BuyerAsOffererTrade) {
((BuyerAsOffererTrade) trade).setProcessState(OffererState.ProcessState.MESSAGE_SENDING_FAILED);
((SellerAsOffererTrade) trade).setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
}
else if (trade instanceof SellerAsOffererTrade) {
((SellerAsOffererTrade) trade).setProcessState(OffererState.ProcessState.MESSAGE_SENDING_FAILED);
((SellerAsOffererTrade) trade).setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
}
failed(t);
}
}
}

View file

@ -1,103 +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.buyer.offerer.tasks;
import io.bitsquare.btc.FeePolicy;
import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.states.OffererState;
import org.bitcoinj.core.Coin;
import org.bitcoinj.core.Transaction;
import com.google.common.util.concurrent.FutureCallback;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OffererSignsAndPublishDepositTx extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererSignsAndPublishDepositTx.class);
public OffererSignsAndPublishDepositTx(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
Coin inputAmount = trade.getSecurityDeposit().add(FeePolicy.TX_FEE);
processModel.getTradeWalletService().signAndPublishDepositTx(
processModel.tradingPeer.getPreparedDepositTx(),
processModel.getConnectedOutputsForAllInputs(),
processModel.tradingPeer.getConnectedOutputsForAllInputs(),
processModel.getOutputs(),
inputAmount,
processModel.getTradeWalletPubKey(),
processModel.tradingPeer.getTradeWalletPubKey(),
processModel.getArbitratorPubKey(),
new FutureCallback<Transaction>() {
@Override
public void onSuccess(Transaction transaction) {
log.trace("offererSignAndPublishTx succeeded " + transaction);
trade.setDepositTx(transaction);
if (trade instanceof BuyerAsOffererTrade) {
trade.setProcessState(OffererState.ProcessState.DEPOSIT_PUBLISHED);
trade.setLifeCycleState(OffererState.LifeCycleState.PENDING);
}
else if (trade instanceof SellerAsOffererTrade) {
trade.setProcessState(OffererState.ProcessState.DEPOSIT_PUBLISHED);
trade.setLifeCycleState(OffererState.LifeCycleState.PENDING);
}
complete();
}
@Override
public void onFailure(@NotNull Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
if (trade instanceof BuyerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
else if (trade instanceof SellerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
failed(t);
}
});
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
if (trade instanceof BuyerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
else if (trade instanceof SellerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
failed(t);
}
}
}

View file

@ -1,74 +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.buyer.offerer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.Contract;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.states.OffererState;
import io.bitsquare.util.Utilities;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OffererVerifiesAndSignsContract extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererVerifiesAndSignsContract.class);
public OffererVerifiesAndSignsContract(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
Contract contract = new Contract(
processModel.getOffer(),
trade.getTradeAmount(),
processModel.getTakeOfferFeeTxId(),
processModel.getAccountId(),
processModel.tradingPeer.getAccountId(),
processModel.getFiatAccount(),
processModel.tradingPeer.getFiatAccount(),
processModel.getP2pSigPubKey(),
processModel.tradingPeer.getP2pSigPubKey());
String contractAsJson = Utilities.objectToJson(contract);
String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(),
contractAsJson);
trade.setContract(contract);
trade.setContractAsJson(contractAsJson);
trade.setOffererContractSignature(signature);
trade.setTakerContractSignature(processModel.tradingPeer.getContractSignature());
complete();
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
if (trade instanceof BuyerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
else if (trade instanceof SellerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
failed(t);
}
}
}

View file

@ -24,16 +24,16 @@ import io.bitsquare.p2p.MessageHandler;
import io.bitsquare.p2p.Peer; import io.bitsquare.p2p.Peer;
import io.bitsquare.trade.BuyerAsTakerTrade; import io.bitsquare.trade.BuyerAsTakerTrade;
import io.bitsquare.trade.protocol.trade.TradeProtocol; import io.bitsquare.trade.protocol.trade.TradeProtocol;
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerCommitsPayoutTx; import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerProcessRequestPublishDepositTxFromSellerMessage;
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerCreatesAndSignsPayoutTx; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerCommitsPayoutTx;
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerCreatesDepositTxInputs; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerCreatesAndSignPayoutTx;
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerProcessPayoutTxPublishedMessage; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerCreatesDepositTxInputs;
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerProcessRequestPublishDepositTxFromTakerMessage; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerProcessPayoutTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSendsDepositTxPublishedMessage; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSendsDepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSendsFiatTransferStartedMessage; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSendsFiatTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSendsRequestPayDepositMessage; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSendsRequestPayDepositMessage;
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSignsAndPublishDepositTx; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerSignsAndPublishDepositTx;
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerVerifiesAndSignsContract; import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerVerifiesAndSignsContract;
import io.bitsquare.trade.protocol.trade.messages.PayoutTxPublishedMessage; import io.bitsquare.trade.protocol.trade.messages.PayoutTxPublishedMessage;
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;
@ -101,8 +101,8 @@ public class BuyerAsTakerProtocol implements TradeProtocol {
taskRunner.addTasks( taskRunner.addTasks(
CreateTakeOfferFeeTx.class, CreateTakeOfferFeeTx.class,
BroadcastTakeOfferFeeTx.class, BroadcastTakeOfferFeeTx.class,
TakerCreatesDepositTxInputs.class, BuyerCreatesDepositTxInputs.class,
TakerSendsRequestPayDepositMessage.class BuyerSendsRequestPayDepositMessage.class
); );
taskRunner.run(); taskRunner.run();
} }
@ -119,11 +119,11 @@ public class BuyerAsTakerProtocol implements TradeProtocol {
() -> log.debug("taskRunner at handleRequestPublishDepositTxMessage completed"), () -> log.debug("taskRunner at handleRequestPublishDepositTxMessage completed"),
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks( taskRunner.addTasks(
TakerProcessRequestPublishDepositTxFromTakerMessage.class, TakerProcessRequestPublishDepositTxFromSellerMessage.class,
VerifyOffererAccount.class, VerifyOffererAccount.class,
TakerVerifiesAndSignsContract.class, BuyerVerifiesAndSignsContract.class,
TakerSignsAndPublishDepositTx.class, BuyerSignsAndPublishDepositTx.class,
TakerSendsDepositTxPublishedMessage.class BuyerSendsDepositTxPublishedMessage.class
); );
taskRunner.run(); taskRunner.run();
} }
@ -140,8 +140,8 @@ public class BuyerAsTakerProtocol implements TradeProtocol {
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks( taskRunner.addTasks(
VerifyOfferFeePayment.class, VerifyOfferFeePayment.class,
TakerCreatesAndSignsPayoutTx.class, BuyerCreatesAndSignPayoutTx.class,
TakerSendsFiatTransferStartedMessage.class BuyerSendsFiatTransferStartedMessage.class
); );
taskRunner.run(); taskRunner.run();
} }
@ -163,8 +163,8 @@ public class BuyerAsTakerProtocol implements TradeProtocol {
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks( taskRunner.addTasks(
TakerProcessPayoutTxPublishedMessage.class, BuyerProcessPayoutTxPublishedMessage.class,
TakerCommitsPayoutTx.class); BuyerCommitsPayoutTx.class);
taskRunner.run(); taskRunner.run();
} }

View file

@ -20,7 +20,7 @@ package io.bitsquare.trade.protocol.trade.buyer.taker.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxFromTakerMessage; import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxFromSellerMessage;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -28,17 +28,17 @@ import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.*; import static com.google.common.base.Preconditions.*;
import static io.bitsquare.util.Validator.*; import static io.bitsquare.util.Validator.*;
public class TakerProcessRequestPublishDepositTxFromTakerMessage extends TradeTask { public class TakerProcessRequestPublishDepositTxFromSellerMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerProcessRequestPublishDepositTxFromTakerMessage.class); private static final Logger log = LoggerFactory.getLogger(TakerProcessRequestPublishDepositTxFromSellerMessage.class);
public TakerProcessRequestPublishDepositTxFromTakerMessage(TaskRunner taskHandler, Trade trade) { public TakerProcessRequestPublishDepositTxFromSellerMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@Override @Override
protected void doRun() { protected void doRun() {
try { try {
RequestPublishDepositTxFromTakerMessage message = (RequestPublishDepositTxFromTakerMessage) processModel.getTradeMessage(); RequestPublishDepositTxFromSellerMessage message = (RequestPublishDepositTxFromSellerMessage) processModel.getTradeMessage();
checkTradeId(processModel.getId(), message); checkTradeId(processModel.getId(), message);
checkNotNull(message); checkNotNull(message);

View file

@ -19,12 +19,10 @@ package io.bitsquare.trade.protocol.trade.buyer.taker.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.p2p.listener.SendMessageListener; import io.bitsquare.p2p.listener.SendMessageListener;
import io.bitsquare.trade.BuyerAsTakerTrade;
import io.bitsquare.trade.SellerAsTakerTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.buyer.tasks.StateUtil;
import io.bitsquare.trade.protocol.trade.messages.RequestDepositTxInputsMessage; import io.bitsquare.trade.protocol.trade.messages.RequestDepositTxInputsMessage;
import io.bitsquare.trade.states.TakerState;
import javafx.application.Platform; import javafx.application.Platform;
@ -72,13 +70,7 @@ public class TakerSendsRequestDepositTxInputsMessage extends TradeTask {
"or cancel that trade."); "or cancel that trade.");
trade.setErrorMessage(errorMessage); trade.setErrorMessage(errorMessage);
StateUtil.setSendFailedState(trade);
if (trade instanceof BuyerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
else if (trade instanceof SellerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
failed(); failed();
} }
} }

View file

@ -19,12 +19,10 @@ package io.bitsquare.trade.protocol.trade.buyer.taker.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.p2p.listener.SendMessageListener; import io.bitsquare.p2p.listener.SendMessageListener;
import io.bitsquare.trade.BuyerAsTakerTrade;
import io.bitsquare.trade.SellerAsTakerTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.buyer.tasks.StateUtil;
import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxMessage; import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxMessage;
import io.bitsquare.trade.states.TakerState;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -62,12 +60,7 @@ public class TakerSendsRequestPublishDepositTxMessage extends TradeTask {
public void handleFault() { public void handleFault() {
appendToErrorMessage("Sending RequestOffererPublishDepositTxMessage failed"); appendToErrorMessage("Sending RequestOffererPublishDepositTxMessage failed");
trade.setErrorMessage(errorMessage); trade.setErrorMessage(errorMessage);
StateUtil.setSendFailedState(trade);
if (trade instanceof BuyerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
else if (trade instanceof SellerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
failed(); failed();
} }
}); });

View file

@ -15,7 +15,7 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.buyer.taker.tasks; package io.bitsquare.trade.protocol.trade.buyer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
@ -26,10 +26,10 @@ import org.bitcoinj.core.Transaction;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class TakerCommitsPayoutTx extends TradeTask { public class BuyerCommitsPayoutTx extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerCommitsPayoutTx.class); private static final Logger log = LoggerFactory.getLogger(BuyerCommitsPayoutTx.class);
public TakerCommitsPayoutTx(TaskRunner taskHandler, Trade trade) { public BuyerCommitsPayoutTx(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }

View file

@ -15,7 +15,7 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.buyer.taker.tasks; package io.bitsquare.trade.protocol.trade.buyer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
@ -26,10 +26,10 @@ import org.bitcoinj.core.Coin;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class TakerCreatesAndSignsPayoutTx extends TradeTask { public class BuyerCreatesAndSignPayoutTx extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerCreatesAndSignsPayoutTx.class); private static final Logger log = LoggerFactory.getLogger(BuyerCreatesAndSignPayoutTx.class);
public TakerCreatesAndSignsPayoutTx(TaskRunner taskHandler, Trade trade) { public BuyerCreatesAndSignPayoutTx(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@ -37,25 +37,23 @@ public class TakerCreatesAndSignsPayoutTx extends TradeTask {
protected void doRun() { protected void doRun() {
try { try {
assert trade.getTradeAmount() != null; assert trade.getTradeAmount() != null;
Coin securityDeposit = trade.getSecurityDeposit(); assert trade.getSecurityDeposit() != null;
Coin sellerPayoutAmount = trade.getSecurityDeposit();
Coin buyerPayoutAmount = sellerPayoutAmount.add(trade.getTradeAmount());
Coin offererPayoutAmount = securityDeposit; byte[] buyerPayoutTxSignature = processModel.getTradeWalletService().createAndSignPayoutTx(
Coin takerPayoutAmount = securityDeposit.add(trade.getTradeAmount());
byte[] takerPayoutTxSignature = processModel.getTradeWalletService().createAndSignPayoutTx(
trade.getDepositTx(), trade.getDepositTx(),
takerPayoutAmount, buyerPayoutAmount,
offererPayoutAmount, sellerPayoutAmount,
processModel.getAddressEntry(), processModel.getAddressEntry(),
processModel.tradingPeer.getPayoutAddressString(), processModel.tradingPeer.getPayoutAddressString(),
processModel.getTradeWalletPubKey(), processModel.getTradeWalletPubKey(),
processModel.tradingPeer.getTradeWalletPubKey(), processModel.tradingPeer.getTradeWalletPubKey(),
processModel.getArbitratorPubKey()); processModel.getArbitratorPubKey());
processModel.setPayoutTxSignature(takerPayoutTxSignature); processModel.setPayoutTxSignature(buyerPayoutTxSignature);
processModel.setPayoutAmount(takerPayoutAmount); processModel.setPayoutAmount(buyerPayoutAmount);
processModel.tradingPeer.setPayoutAmount(offererPayoutAmount); processModel.tradingPeer.setPayoutAmount(sellerPayoutAmount);
complete(); complete();
} catch (Throwable t) { } catch (Throwable t) {

View file

@ -15,7 +15,7 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.buyer.taker.tasks; package io.bitsquare.trade.protocol.trade.buyer.tasks;
import io.bitsquare.btc.FeePolicy; import io.bitsquare.btc.FeePolicy;
import io.bitsquare.btc.TradeWalletService; import io.bitsquare.btc.TradeWalletService;
@ -28,10 +28,10 @@ import org.bitcoinj.core.Coin;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class TakerCreatesDepositTxInputs extends TradeTask { public class BuyerCreatesDepositTxInputs extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerCreatesDepositTxInputs.class); private static final Logger log = LoggerFactory.getLogger(BuyerCreatesDepositTxInputs.class);
public TakerCreatesDepositTxInputs(TaskRunner taskHandler, Trade trade) { public BuyerCreatesDepositTxInputs(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@ -50,6 +50,9 @@ public class TakerCreatesDepositTxInputs extends TradeTask {
} catch (Throwable t) { } catch (Throwable t) {
t.printStackTrace(); t.printStackTrace();
trade.setThrowable(t); trade.setThrowable(t);
StateUtil.setOfferOpenState(trade);
failed(t); failed(t);
} }
} }

View file

@ -15,14 +15,17 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.buyer.taker.tasks; package io.bitsquare.trade.protocol.trade.buyer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.BuyerAsTakerTrade; import io.bitsquare.trade.BuyerAsTakerTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.SellerAsTakerTrade; import io.bitsquare.trade.SellerAsTakerTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.PayoutTxPublishedMessage; import io.bitsquare.trade.protocol.trade.messages.PayoutTxPublishedMessage;
import io.bitsquare.trade.states.OffererState;
import io.bitsquare.trade.states.TakerState; import io.bitsquare.trade.states.TakerState;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -31,10 +34,10 @@ import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static io.bitsquare.util.Validator.checkTradeId; import static io.bitsquare.util.Validator.checkTradeId;
public class TakerProcessPayoutTxPublishedMessage extends TradeTask { public class BuyerProcessPayoutTxPublishedMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerProcessPayoutTxPublishedMessage.class); private static final Logger log = LoggerFactory.getLogger(BuyerProcessPayoutTxPublishedMessage.class);
public TakerProcessPayoutTxPublishedMessage(TaskRunner taskHandler, Trade trade) { public BuyerProcessPayoutTxPublishedMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@ -47,9 +50,9 @@ public class TakerProcessPayoutTxPublishedMessage extends TradeTask {
trade.setPayoutTx(checkNotNull(message.payoutTx)); trade.setPayoutTx(checkNotNull(message.payoutTx));
if (trade instanceof BuyerAsTakerTrade) if (trade instanceof BuyerAsOffererTrade || trade instanceof SellerAsOffererTrade)
trade.setProcessState(TakerState.ProcessState.PAYOUT_PUBLISHED); trade.setProcessState(OffererState.ProcessState.PAYOUT_PUBLISHED);
else if (trade instanceof SellerAsTakerTrade) else if (trade instanceof BuyerAsTakerTrade || trade instanceof SellerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.PAYOUT_PUBLISHED); trade.setProcessState(TakerState.ProcessState.PAYOUT_PUBLISHED);
complete(); complete();

View file

@ -15,24 +15,21 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.buyer.taker.tasks; package io.bitsquare.trade.protocol.trade.buyer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.p2p.listener.SendMessageListener; import io.bitsquare.p2p.listener.SendMessageListener;
import io.bitsquare.trade.BuyerAsTakerTrade;
import io.bitsquare.trade.SellerAsTakerTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage; import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage;
import io.bitsquare.trade.states.TakerState;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class TakerSendsDepositTxPublishedMessage extends TradeTask { public class BuyerSendsDepositTxPublishedMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerSendsDepositTxPublishedMessage.class); private static final Logger log = LoggerFactory.getLogger(BuyerSendsDepositTxPublishedMessage.class);
public TakerSendsDepositTxPublishedMessage(TaskRunner taskHandler, Trade trade) { public BuyerSendsDepositTxPublishedMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@ -53,10 +50,7 @@ public class TakerSendsDepositTxPublishedMessage extends TradeTask {
appendToErrorMessage("Sending DepositTxPublishedMessage failed"); appendToErrorMessage("Sending DepositTxPublishedMessage failed");
trade.setErrorMessage(errorMessage); trade.setErrorMessage(errorMessage);
if (trade instanceof BuyerAsTakerTrade) StateUtil.setSendFailedState(trade);
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
else if (trade instanceof SellerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
failed(); failed();
} }
@ -67,4 +61,6 @@ public class TakerSendsDepositTxPublishedMessage extends TradeTask {
failed(t); failed(t);
} }
} }
} }

View file

@ -15,24 +15,27 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.buyer.taker.tasks; package io.bitsquare.trade.protocol.trade.buyer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.p2p.listener.SendMessageListener; import io.bitsquare.p2p.listener.SendMessageListener;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.BuyerAsTakerTrade; import io.bitsquare.trade.BuyerAsTakerTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.SellerAsTakerTrade; import io.bitsquare.trade.SellerAsTakerTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage; import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage;
import io.bitsquare.trade.states.OffererState;
import io.bitsquare.trade.states.TakerState; import io.bitsquare.trade.states.TakerState;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class TakerSendsFiatTransferStartedMessage extends TradeTask { public class BuyerSendsFiatTransferStartedMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerSendsFiatTransferStartedMessage.class); private static final Logger log = LoggerFactory.getLogger(BuyerSendsFiatTransferStartedMessage.class);
public TakerSendsFiatTransferStartedMessage(TaskRunner taskHandler, Trade trade) { public BuyerSendsFiatTransferStartedMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@ -42,23 +45,22 @@ public class TakerSendsFiatTransferStartedMessage extends TradeTask {
FiatTransferStartedMessage tradeMessage = new FiatTransferStartedMessage(processModel.getId(), FiatTransferStartedMessage tradeMessage = new FiatTransferStartedMessage(processModel.getId(),
processModel.getPayoutTxSignature(), processModel.getPayoutTxSignature(),
processModel.getPayoutAmount(), processModel.getPayoutAmount(),
processModel.tradingPeer.getPayoutAmount(), processModel.getAddressEntry().getAddressString(),
processModel.getAddressEntry().getAddressString()); processModel.tradingPeer.getPayoutAmount()
);
processModel.getMessageService().sendMessage(trade.getTradingPeer(), tradeMessage, processModel.getMessageService().sendMessage(trade.getTradingPeer(), tradeMessage,
processModel.getP2pSigPubKey(), processModel.tradingPeer.getP2pSigPubKey(),
processModel.getP2pEncryptPubKey(), processModel.tradingPeer.getP2pEncryptPubKey(),
new SendMessageListener() { new SendMessageListener() {
@Override @Override
public void handleResult() { public void handleResult() {
log.trace("Sending FiatTransferStartedMessage succeeded."); log.trace("Sending FiatTransferStartedMessage succeeded.");
if (trade instanceof BuyerAsTakerTrade) { if (trade instanceof BuyerAsOffererTrade || trade instanceof SellerAsOffererTrade)
trade.setProcessState(OffererState.ProcessState.FIAT_PAYMENT_STARTED);
if (trade instanceof BuyerAsTakerTrade || trade instanceof SellerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.FIAT_PAYMENT_STARTED); trade.setProcessState(TakerState.ProcessState.FIAT_PAYMENT_STARTED);
}
else if (trade instanceof SellerAsTakerTrade) {
trade.setProcessState(TakerState.ProcessState.FIAT_PAYMENT_STARTED);
}
complete(); complete();
} }
@ -68,16 +70,12 @@ public class TakerSendsFiatTransferStartedMessage extends TradeTask {
appendToErrorMessage("Sending FiatTransferStartedMessage failed"); appendToErrorMessage("Sending FiatTransferStartedMessage failed");
trade.setErrorMessage(errorMessage); trade.setErrorMessage(errorMessage);
if (trade instanceof BuyerAsTakerTrade) { StateUtil.setSendFailedState(trade);
((BuyerAsTakerTrade) trade).setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
}
else if (trade instanceof SellerAsTakerTrade) {
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
}
failed(); failed();
} }
}); }
);
} catch (Throwable t) { } catch (Throwable t) {
t.printStackTrace(); t.printStackTrace();
trade.setThrowable(t); trade.setThrowable(t);

View file

@ -15,33 +15,30 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.buyer.taker.tasks; package io.bitsquare.trade.protocol.trade.buyer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.p2p.listener.SendMessageListener; import io.bitsquare.p2p.listener.SendMessageListener;
import io.bitsquare.trade.BuyerAsTakerTrade;
import io.bitsquare.trade.SellerAsTakerTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositFromOffererMessage; import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositMessage;
import io.bitsquare.trade.states.TakerState;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class TakerSendsRequestPayDepositMessage extends TradeTask { public class BuyerSendsRequestPayDepositMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerSendsRequestPayDepositMessage.class); private static final Logger log = LoggerFactory.getLogger(BuyerSendsRequestPayDepositMessage.class);
public TakerSendsRequestPayDepositMessage(TaskRunner taskHandler, Trade trade) { public BuyerSendsRequestPayDepositMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@Override @Override
protected void doRun() { protected void doRun() {
try { try {
RequestPayDepositFromOffererMessage message = new RequestPayDepositFromOffererMessage( RequestPayDepositMessage tradeMessage = new RequestPayDepositMessage(
processModel.getId(), processModel.getId(),
model.getTradeAmount(), trade.getTradeAmount(),
processModel.getConnectedOutputsForAllInputs(), processModel.getConnectedOutputsForAllInputs(),
processModel.getOutputs(), processModel.getOutputs(),
processModel.getTradeWalletPubKey(), processModel.getTradeWalletPubKey(),
@ -50,7 +47,7 @@ public class TakerSendsRequestPayDepositMessage extends TradeTask {
processModel.getFiatAccount(), processModel.getFiatAccount(),
processModel.getAccountId()); processModel.getAccountId());
processModel.getMessageService().sendMessage(trade.getTradingPeer(), message, new SendMessageListener() { processModel.getMessageService().sendMessage(trade.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");
@ -61,25 +58,16 @@ public class TakerSendsRequestPayDepositMessage extends TradeTask {
public void handleFault() { public void handleFault() {
appendToErrorMessage("Sending RequestTakerDepositPaymentMessage failed"); appendToErrorMessage("Sending RequestTakerDepositPaymentMessage failed");
trade.setErrorMessage(errorMessage); trade.setErrorMessage(errorMessage);
if (trade instanceof BuyerAsTakerTrade) StateUtil.setOfferOpenState(trade);
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED); StateUtil.setSendFailedState(trade);
else if (trade instanceof SellerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
failed(); failed();
} }
}); });
} catch (Throwable t) { } catch (Throwable t) {
t.printStackTrace(); t.printStackTrace();
trade.setThrowable(t); trade.setThrowable(t);
StateUtil.setOfferOpenState(trade);
if (trade instanceof BuyerAsTakerTrade) { StateUtil.setSendFailedState(trade);
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
}
else if (trade instanceof SellerAsTakerTrade) {
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
}
failed(t); failed(t);
} }
} }

View file

@ -15,14 +15,17 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.buyer.taker.tasks; package io.bitsquare.trade.protocol.trade.buyer.tasks;
import io.bitsquare.btc.FeePolicy; import io.bitsquare.btc.FeePolicy;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.BuyerAsTakerTrade; import io.bitsquare.trade.BuyerAsTakerTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.SellerAsTakerTrade; import io.bitsquare.trade.SellerAsTakerTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.states.OffererState;
import io.bitsquare.trade.states.TakerState; import io.bitsquare.trade.states.TakerState;
import org.bitcoinj.core.Coin; import org.bitcoinj.core.Coin;
@ -35,10 +38,10 @@ import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class TakerSignsAndPublishDepositTx extends TradeTask { public class BuyerSignsAndPublishDepositTx extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerSignsAndPublishDepositTx.class); private static final Logger log = LoggerFactory.getLogger(BuyerSignsAndPublishDepositTx.class);
public TakerSignsAndPublishDepositTx(TaskRunner taskHandler, Trade trade) { public BuyerSignsAndPublishDepositTx(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@ -63,13 +66,13 @@ public class TakerSignsAndPublishDepositTx extends TradeTask {
trade.setDepositTx(transaction); trade.setDepositTx(transaction);
if (trade instanceof BuyerAsTakerTrade) { if (trade instanceof BuyerAsTakerTrade || trade instanceof SellerAsTakerTrade) {
trade.setProcessState(TakerState.ProcessState.DEPOSIT_PUBLISHED); trade.setProcessState(TakerState.ProcessState.DEPOSIT_PUBLISHED);
trade.setLifeCycleState(TakerState.LifeCycleState.PENDING); trade.setLifeCycleState(TakerState.LifeCycleState.PENDING);
} }
else if (trade instanceof SellerAsTakerTrade) { else if (trade instanceof BuyerAsOffererTrade || trade instanceof SellerAsOffererTrade) {
trade.setProcessState(TakerState.ProcessState.DEPOSIT_PUBLISHED); trade.setProcessState(OffererState.ProcessState.DEPOSIT_PUBLISHED);
trade.setLifeCycleState(TakerState.LifeCycleState.PENDING); trade.setLifeCycleState(OffererState.LifeCycleState.PENDING);
} }
complete(); complete();
@ -77,15 +80,21 @@ public class TakerSignsAndPublishDepositTx extends TradeTask {
@Override @Override
public void onFailure(@NotNull Throwable t) { public void onFailure(@NotNull Throwable t) {
t.printStackTrace(); handleFault(t);
trade.setThrowable(t);
failed(t);
} }
}); });
} catch (Throwable t) { } catch (Throwable t) {
handleFault(t);
}
}
private void handleFault(Throwable t) {
t.printStackTrace(); t.printStackTrace();
trade.setThrowable(t); trade.setThrowable(t);
if (trade instanceof BuyerAsOffererTrade || trade instanceof SellerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
failed(t); failed(t);
} }
}
} }

View file

@ -15,7 +15,7 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.buyer.taker.tasks; package io.bitsquare.trade.protocol.trade.buyer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.Contract; import io.bitsquare.trade.Contract;
@ -26,10 +26,10 @@ import io.bitsquare.util.Utilities;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class TakerVerifiesAndSignsContract extends TradeTask { public class BuyerVerifiesAndSignsContract extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerVerifiesAndSignsContract.class); private static final Logger log = LoggerFactory.getLogger(BuyerVerifiesAndSignsContract.class);
public TakerVerifiesAndSignsContract(TaskRunner taskHandler, Trade trade) { public BuyerVerifiesAndSignsContract(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@ -39,17 +39,15 @@ public class TakerVerifiesAndSignsContract extends TradeTask {
Contract contract = new Contract( Contract contract = new Contract(
processModel.getOffer(), processModel.getOffer(),
trade.getTradeAmount(), trade.getTradeAmount(),
processModel.getTakeOfferFeeTx().getHashAsString(), processModel.getTakeOfferFeeTxId(),
processModel.tradingPeer.getAccountId(),
processModel.getAccountId(), processModel.getAccountId(),
processModel.tradingPeer.getFiatAccount(), processModel.tradingPeer.getAccountId(),
processModel.getFiatAccount(), processModel.getFiatAccount(),
processModel.tradingPeer.getP2pSigPubKey(), processModel.tradingPeer.getFiatAccount(),
processModel.getP2pSigPubKey()); processModel.getP2pSigPubKey(),
processModel.tradingPeer.getP2pSigPubKey());
String contractAsJson = Utilities.objectToJson(contract); String contractAsJson = Utilities.objectToJson(contract);
String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(), String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(), contractAsJson);
contractAsJson);
trade.setContract(contract); trade.setContract(contract);
trade.setContractAsJson(contractAsJson); trade.setContractAsJson(contractAsJson);
trade.setOffererContractSignature(signature); trade.setOffererContractSignature(signature);
@ -60,6 +58,8 @@ public class TakerVerifiesAndSignsContract extends TradeTask {
t.printStackTrace(); t.printStackTrace();
trade.setThrowable(t); trade.setThrowable(t);
StateUtil.setOfferOpenState(trade);
failed(t); failed(t);
} }
} }

View file

@ -0,0 +1,45 @@
/*
* 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.buyer.tasks;
import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.BuyerAsTakerTrade;
import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.SellerAsTakerTrade;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.states.OffererState;
import io.bitsquare.trade.states.TakerState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class StateUtil {
private static final Logger log = LoggerFactory.getLogger(StateUtil.class);
public static void setSendFailedState(Trade trade) {
if (trade instanceof BuyerAsOffererTrade || trade instanceof SellerAsOffererTrade)
trade.setProcessState(OffererState.ProcessState.MESSAGE_SENDING_FAILED);
else if (trade instanceof BuyerAsTakerTrade || trade instanceof SellerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
}
public static void setOfferOpenState(Trade trade) {
if (trade instanceof BuyerAsOffererTrade || trade instanceof SellerAsOffererTrade)
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
}
}

View file

@ -32,18 +32,18 @@ public class FiatTransferStartedMessage extends TradeMessage implements MailboxM
public final byte[] buyerSignature; public final byte[] buyerSignature;
public final Coin buyerPayoutAmount; public final Coin buyerPayoutAmount;
public final Coin sellerPayoutAmount;
public final String buyerPayoutAddress; public final String buyerPayoutAddress;
public final Coin sellerPayoutAmount;
public FiatTransferStartedMessage(String tradeId, public FiatTransferStartedMessage(String tradeId,
byte[] buyerSignature, byte[] buyerSignature,
Coin buyerPayoutAmount, Coin buyerPayoutAmount,
Coin sellerPayoutAmount, String buyerPayoutAddress,
String buyerPayoutAddress) { Coin sellerPayoutAmount) {
super(tradeId); super(tradeId);
this.buyerSignature = buyerSignature; this.buyerSignature = buyerSignature;
this.buyerPayoutAmount = buyerPayoutAmount; this.buyerPayoutAmount = buyerPayoutAmount;
this.sellerPayoutAmount = sellerPayoutAmount;
this.buyerPayoutAddress = buyerPayoutAddress; this.buyerPayoutAddress = buyerPayoutAddress;
this.sellerPayoutAmount = sellerPayoutAmount;
} }
} }

View file

@ -1,60 +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.messages;
import io.bitsquare.fiat.FiatAccount;
import org.bitcoinj.core.Coin;
import org.bitcoinj.core.TransactionOutput;
import java.io.Serializable;
import java.security.PublicKey;
import java.util.List;
import javax.annotation.concurrent.Immutable;
@Immutable
public class RequestPayDepositFromOffererMessage extends RequestPayDepositMessage implements Serializable {
// That object is sent over the wire, so we need to take care of version compatibility.
private static final long serialVersionUID = 1L;
public final Coin tradeAmount;
public RequestPayDepositFromOffererMessage(String tradeId,
Coin tradeAmount,
List<TransactionOutput> buyerConnectedOutputsForAllInputs,
List<TransactionOutput> buyerOutputs,
byte[] buyerTradeWalletPubKey,
PublicKey buyerP2PSigPublicKey,
PublicKey buyerP2PEncryptPublicKey,
FiatAccount buyerFiatAccount,
String buyerAccountId) {
super(tradeId,
buyerConnectedOutputsForAllInputs,
buyerOutputs,
buyerTradeWalletPubKey,
buyerP2PSigPublicKey,
buyerP2PEncryptPublicKey,
buyerFiatAccount,
buyerAccountId);
this.tradeAmount = tradeAmount;
}
}

View file

@ -19,6 +19,7 @@ package io.bitsquare.trade.protocol.trade.messages;
import io.bitsquare.fiat.FiatAccount; import io.bitsquare.fiat.FiatAccount;
import org.bitcoinj.core.Coin;
import org.bitcoinj.core.TransactionOutput; import org.bitcoinj.core.TransactionOutput;
import java.io.Serializable; import java.io.Serializable;
@ -41,8 +42,10 @@ public class RequestPayDepositMessage extends TradeMessage implements Serializab
public final PublicKey buyerP2PEncryptPublicKey; public final PublicKey buyerP2PEncryptPublicKey;
public final FiatAccount buyerFiatAccount; public final FiatAccount buyerFiatAccount;
public final String buyerAccountId; public final String buyerAccountId;
public final Coin tradeAmount;
public RequestPayDepositMessage(String tradeId, public RequestPayDepositMessage(String tradeId,
Coin tradeAmount,
List<TransactionOutput> buyerConnectedOutputsForAllInputs, List<TransactionOutput> buyerConnectedOutputsForAllInputs,
List<TransactionOutput> buyerOutputs, List<TransactionOutput> buyerOutputs,
byte[] buyerTradeWalletPubKey, byte[] buyerTradeWalletPubKey,
@ -51,6 +54,7 @@ public class RequestPayDepositMessage extends TradeMessage implements Serializab
FiatAccount buyerFiatAccount, FiatAccount buyerFiatAccount,
String buyerAccountId) { String buyerAccountId) {
super(tradeId); super(tradeId);
this.tradeAmount = tradeAmount;
this.buyerP2PSigPublicKey = buyerP2PSigPublicKey; this.buyerP2PSigPublicKey = buyerP2PSigPublicKey;
this.buyerP2PEncryptPublicKey = buyerP2PEncryptPublicKey; this.buyerP2PEncryptPublicKey = buyerP2PEncryptPublicKey;
this.buyerConnectedOutputsForAllInputs = buyerConnectedOutputsForAllInputs; this.buyerConnectedOutputsForAllInputs = buyerConnectedOutputsForAllInputs;

View file

@ -31,12 +31,12 @@ import java.util.List;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
@Immutable @Immutable
public class RequestPublishDepositTxFromTakerMessage extends RequestPublishDepositTxMessage implements Serializable { public class RequestPublishDepositTxFromSellerMessage extends RequestPublishDepositTxMessage implements Serializable {
// That object is sent over the wire, so we need to take care of version compatibility. // That object is sent over the wire, so we need to take care of version compatibility.
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public byte[] sellerTradeWalletPubKey; public byte[] sellerTradeWalletPubKey;
public RequestPublishDepositTxFromTakerMessage(String tradeId, public RequestPublishDepositTxFromSellerMessage(String tradeId,
FiatAccount takerFiatAccount, FiatAccount takerFiatAccount,
String takerAccountId, String takerAccountId,
byte[] sellerTradeWalletPubKey, byte[] sellerTradeWalletPubKey,

View file

@ -20,7 +20,7 @@ package io.bitsquare.trade.protocol.trade.seller.offerer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositFromOffererMessage; import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositMessage;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -38,7 +38,7 @@ public class OffererProcessRequestPayDepositFromOffererMessage extends TradeTask
@Override @Override
protected void doRun() { protected void doRun() {
try { try {
RequestPayDepositFromOffererMessage message = (RequestPayDepositFromOffererMessage) processModel.getTradeMessage(); RequestPayDepositMessage message = (RequestPayDepositMessage) processModel.getTradeMessage();
checkTradeId(processModel.getId(), message); checkTradeId(processModel.getId(), message);
checkNotNull(message); checkNotNull(message);

View file

@ -23,7 +23,7 @@ import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.SellerAsOffererTrade; import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxFromTakerMessage; import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxFromSellerMessage;
import io.bitsquare.trade.states.OffererState; import io.bitsquare.trade.states.OffererState;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -39,7 +39,7 @@ public class OffererSendsRequestPublishDepositTxFromTakerMessage extends TradeTa
@Override @Override
protected void doRun() { protected void doRun() {
try { try {
RequestPublishDepositTxFromTakerMessage tradeMessage = new RequestPublishDepositTxFromTakerMessage( RequestPublishDepositTxFromSellerMessage tradeMessage = new RequestPublishDepositTxFromSellerMessage(
processModel.getId(), processModel.getId(),
processModel.getFiatAccount(), processModel.getFiatAccount(),
processModel.getAccountId(), processModel.getAccountId(),

View file

@ -42,6 +42,7 @@ public class CreateTakeOfferFeeTx extends TradeTask {
Transaction createTakeOfferFeeTx = processModel.getTradeWalletService().createTakeOfferFeeTx(processModel.getAddressEntry()); Transaction createTakeOfferFeeTx = processModel.getTradeWalletService().createTakeOfferFeeTx(processModel.getAddressEntry());
processModel.setTakeOfferFeeTx(createTakeOfferFeeTx); processModel.setTakeOfferFeeTx(createTakeOfferFeeTx);
processModel.setTakeOfferFeeTxId(createTakeOfferFeeTx.getHashAsString());
if (trade instanceof BuyerAsTakerTrade) if (trade instanceof BuyerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.TAKE_OFFER_FEE_TX_CREATED); trade.setProcessState(TakerState.ProcessState.TAKE_OFFER_FEE_TX_CREATED);