mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-04-20 23:56:30 -04:00
Unified Buyer tasks
This commit is contained in:
parent
a95936297a
commit
0a4e082e44
@ -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.ValidateOffer;
|
||||
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.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.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.tasks.TakerCommitDepositTx;
|
||||
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerCreatesAndSignContract;
|
||||
@ -102,20 +101,19 @@ public class DebugView extends InitializableView {
|
||||
/*---- Protocol ----*/
|
||||
BuyerAsOffererProtocol.class,
|
||||
OffererProcessRequestDepositTxInputsMessage.class,
|
||||
OffererCreatesDepositTxInputs.class,
|
||||
OffererSendsRequestSellerDepositPaymentMessage.class,
|
||||
BuyerCreatesDepositTxInputs.class,
|
||||
BuyerSendsRequestPayDepositMessage.class,
|
||||
|
||||
OffererProcessRequestPublishDepositTxMessage.class,
|
||||
VerifyTakerAccount.class,
|
||||
OffererVerifiesAndSignsContract.class,
|
||||
OffererSignsAndPublishDepositTx.class,
|
||||
OffererSendsDepositTxPublishedMessage.class,
|
||||
BuyerSignsAndPublishDepositTx.class,
|
||||
BuyerSendsDepositTxPublishedMessage.class,
|
||||
|
||||
OffererCreatesAndSignPayoutTx.class,
|
||||
BuyerCreatesAndSignPayoutTx.class,
|
||||
VerifyTakeOfferFeePayment.class,
|
||||
OffererSendsFiatTransferStartedMessage.class,
|
||||
BuyerSendsFiatTransferStartedMessage.class,
|
||||
|
||||
OffererProcessPayoutTxPublishedMessage.class,
|
||||
BuyerProcessPayoutTxPublishedMessage.class,
|
||||
Boolean.class, /* used as seperator*/
|
||||
|
||||
|
||||
|
@ -217,7 +217,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
||||
// payment
|
||||
public String getPaymentMethod() {
|
||||
assert dataModel.getContract() != null;
|
||||
return BSResources.get(dataModel.getContract().takerFiatAccount.type.toString());
|
||||
return BSResources.get(dataModel.getContract().sellerFiatAccount.type.toString());
|
||||
}
|
||||
|
||||
public String getFiatAmount() {
|
||||
@ -226,17 +226,17 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
||||
|
||||
public String getHolderName() {
|
||||
assert dataModel.getContract() != null;
|
||||
return dataModel.getContract().takerFiatAccount.accountHolderName;
|
||||
return dataModel.getContract().sellerFiatAccount.accountHolderName;
|
||||
}
|
||||
|
||||
public String getPrimaryId() {
|
||||
assert dataModel.getContract() != null;
|
||||
return dataModel.getContract().takerFiatAccount.accountPrimaryID;
|
||||
return dataModel.getContract().sellerFiatAccount.accountPrimaryID;
|
||||
}
|
||||
|
||||
public String getSecondaryId() {
|
||||
assert dataModel.getContract() != null;
|
||||
return dataModel.getContract().takerFiatAccount.accountSecondaryID;
|
||||
return dataModel.getContract().sellerFiatAccount.accountSecondaryID;
|
||||
}
|
||||
|
||||
// summary
|
||||
|
@ -23,7 +23,7 @@ import io.bitsquare.common.handlers.ResultHandler;
|
||||
import java.security.PublicKey;
|
||||
|
||||
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);
|
||||
|
||||
|
@ -26,7 +26,7 @@ public interface MessageService extends P2PService {
|
||||
|
||||
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);
|
||||
|
||||
|
@ -70,14 +70,14 @@ public class TomP2PMailboxService extends TomP2PDHTService implements MailboxSer
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMessage(PublicKey p2pSigPubKey, EncryptedMailboxMessage message, ResultHandler resultHandler, FaultHandler faultHandler) {
|
||||
public void addMessage(PublicKey recipientP2pSigPubKey, EncryptedMailboxMessage message, ResultHandler resultHandler, FaultHandler faultHandler) {
|
||||
try {
|
||||
final Data data = new Data(message);
|
||||
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() + "]");
|
||||
|
||||
FuturePut futurePut = addDataToMapOfProtectedDomain(getLocationKey(p2pSigPubKey), data, p2pSigPubKey);
|
||||
FuturePut futurePut = addDataToMapOfProtectedDomain(getLocationKey(recipientP2pSigPubKey), data, recipientP2pSigPubKey);
|
||||
futurePut.addListener(new BaseFutureListener<BaseFuture>() {
|
||||
@Override
|
||||
public void operationComplete(BaseFuture future) throws Exception {
|
||||
@ -85,7 +85,7 @@ public class TomP2PMailboxService extends TomP2PDHTService implements MailboxSer
|
||||
executor.execute(() -> {
|
||||
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 + "]");
|
||||
});
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ public class TomP2PMessageService extends TomP2PService implements MessageServic
|
||||
}
|
||||
|
||||
@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) {
|
||||
|
||||
if (peer == null)
|
||||
@ -95,9 +95,9 @@ public class TomP2PMessageService extends TomP2PService implements MessageServic
|
||||
executor.execute(listener::handleResult);
|
||||
}
|
||||
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());
|
||||
sendMailboxMessage(p2pSigPubKey, p2pEncryptPubKey, (MailboxMessage) message, listener);
|
||||
sendMailboxMessage(recipientP2pSigPubKey, recipientP2pEncryptPubKey, (MailboxMessage) message, listener);
|
||||
}
|
||||
else {
|
||||
log.error("sendMessage failed with reason " + futureDirect.failedReason());
|
||||
@ -108,9 +108,9 @@ public class TomP2PMessageService extends TomP2PService implements MessageServic
|
||||
|
||||
@Override
|
||||
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());
|
||||
sendMailboxMessage(p2pSigPubKey, p2pEncryptPubKey, (MailboxMessage) message, listener);
|
||||
sendMailboxMessage(recipientP2pSigPubKey, recipientP2pEncryptPubKey, (MailboxMessage) message, listener);
|
||||
}
|
||||
else {
|
||||
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;
|
||||
log.info("sendMailboxMessage called");
|
||||
try {
|
||||
bucket = encryptionService.encryptObject(p2pEncryptPubKey, message);
|
||||
bucket = encryptionService.encryptObject(recipientP2pEncryptPubKey, message);
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
log.error(t.getMessage());
|
||||
executor.execute(listener::handleFault);
|
||||
}
|
||||
EncryptedMailboxMessage encrypted = new EncryptedMailboxMessage(bucket);
|
||||
mailboxService.addMessage(p2pSigPubKey,
|
||||
mailboxService.addMessage(recipientP2pSigPubKey,
|
||||
encrypted,
|
||||
() -> {
|
||||
log.debug("Message successfully added to peers mailbox.");
|
||||
|
@ -38,31 +38,31 @@ public class Contract implements Serializable {
|
||||
public final Offer offer;
|
||||
public final String takeOfferFeeTxID;
|
||||
public final Coin tradeAmount;
|
||||
public final String offererAccountID;
|
||||
public final String takerAccountID;
|
||||
public final FiatAccount offererFiatAccount;
|
||||
public final FiatAccount takerFiatAccount;
|
||||
public final String offererP2PSigPubKeyAsString;
|
||||
public final String takerP2PSigPubKeyAsString;
|
||||
public final String buyerAccountID;
|
||||
public final String sellerAccountID;
|
||||
public final FiatAccount buyerFiatAccount;
|
||||
public final FiatAccount sellerFiatAccount;
|
||||
public final String buyerP2PSigPubKeyAsString;
|
||||
public final String sellerP2PSigPubKeyAsString;
|
||||
|
||||
public Contract(Offer offer,
|
||||
Coin tradeAmount,
|
||||
String takeOfferFeeTxID,
|
||||
String offererAccountID,
|
||||
String takerAccountID,
|
||||
FiatAccount offererFiatAccount,
|
||||
FiatAccount takerFiatAccount,
|
||||
PublicKey offererP2PSigPubKey,
|
||||
PublicKey takerP2PSigPubKey) {
|
||||
String buyerAccountID,
|
||||
String sellerAccountID,
|
||||
FiatAccount buyerFiatAccount,
|
||||
FiatAccount sellerFiatAccount,
|
||||
PublicKey buyerP2PSigPubKey,
|
||||
PublicKey sellerP2PSigPubKey) {
|
||||
this.offer = offer;
|
||||
this.tradeAmount = tradeAmount;
|
||||
this.takeOfferFeeTxID = takeOfferFeeTxID;
|
||||
this.offererAccountID = offererAccountID;
|
||||
this.takerAccountID = takerAccountID;
|
||||
this.offererFiatAccount = offererFiatAccount;
|
||||
this.takerFiatAccount = takerFiatAccount;
|
||||
this.offererP2PSigPubKeyAsString = Utilities.getHexFromPubKey(offererP2PSigPubKey);
|
||||
this.takerP2PSigPubKeyAsString = Utilities.getHexFromPubKey(takerP2PSigPubKey);
|
||||
this.buyerAccountID = buyerAccountID;
|
||||
this.sellerAccountID = sellerAccountID;
|
||||
this.buyerFiatAccount = buyerFiatAccount;
|
||||
this.sellerFiatAccount = sellerFiatAccount;
|
||||
this.buyerP2PSigPubKeyAsString = Utilities.getHexFromPubKey(buyerP2PSigPubKey);
|
||||
this.sellerP2PSigPubKeyAsString = Utilities.getHexFromPubKey(sellerP2PSigPubKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -71,12 +71,12 @@ public class Contract implements Serializable {
|
||||
"offer=" + offer +
|
||||
", takeOfferFeeTxID='" + takeOfferFeeTxID + '\'' +
|
||||
", tradeAmount=" + tradeAmount +
|
||||
", offererAccountID='" + offererAccountID + '\'' +
|
||||
", takerAccountID='" + takerAccountID + '\'' +
|
||||
", offererFiatAccount=" + offererFiatAccount +
|
||||
", takerFiatAccount=" + takerFiatAccount +
|
||||
", offererP2PSigPubKeyAsString='" + offererP2PSigPubKeyAsString + '\'' +
|
||||
", takerP2PSigPubKeyAsString='" + takerP2PSigPubKeyAsString + '\'' +
|
||||
", buyerAccountID='" + buyerAccountID + '\'' +
|
||||
", sellerAccountID='" + sellerAccountID + '\'' +
|
||||
", buyerFiatAccount=" + buyerFiatAccount +
|
||||
", sellerFiatAccount=" + sellerFiatAccount +
|
||||
", buyerP2PSigPubKeyAsString='" + buyerP2PSigPubKeyAsString + '\'' +
|
||||
", sellerP2PSigPubKeyAsString='" + sellerP2PSigPubKeyAsString + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
@ -27,17 +27,17 @@ import io.bitsquare.trade.BuyerAsOffererTrade;
|
||||
import io.bitsquare.trade.protocol.availability.messages.ReportOfferAvailabilityMessage;
|
||||
import io.bitsquare.trade.protocol.availability.messages.RequestIsOfferAvailableMessage;
|
||||
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.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.tasks.BuyerCommitsPayoutTx;
|
||||
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.buyer.tasks.BuyerVerifiesAndSignsContract;
|
||||
import io.bitsquare.trade.protocol.trade.messages.PayoutTxPublishedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.messages.RequestDepositTxInputsMessage;
|
||||
import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxMessage;
|
||||
@ -144,8 +144,8 @@ public class BuyerAsOffererProtocol implements TradeProtocol {
|
||||
this::handleTaskRunnerFault);
|
||||
taskRunner.addTasks(
|
||||
OffererProcessRequestDepositTxInputsMessage.class,
|
||||
OffererCreatesDepositTxInputs.class,
|
||||
OffererSendsRequestSellerDepositPaymentMessage.class
|
||||
BuyerCreatesDepositTxInputs.class,
|
||||
BuyerSendsRequestPayDepositMessage.class
|
||||
);
|
||||
taskRunner.run();
|
||||
}
|
||||
@ -159,9 +159,9 @@ public class BuyerAsOffererProtocol implements TradeProtocol {
|
||||
taskRunner.addTasks(
|
||||
OffererProcessRequestPublishDepositTxMessage.class,
|
||||
VerifyTakerAccount.class,
|
||||
OffererVerifiesAndSignsContract.class,
|
||||
OffererSignsAndPublishDepositTx.class,
|
||||
OffererSendsDepositTxPublishedMessage.class
|
||||
BuyerVerifiesAndSignsContract.class,
|
||||
BuyerSignsAndPublishDepositTx.class,
|
||||
BuyerSendsDepositTxPublishedMessage.class
|
||||
);
|
||||
taskRunner.run();
|
||||
}
|
||||
@ -178,8 +178,8 @@ public class BuyerAsOffererProtocol implements TradeProtocol {
|
||||
this::handleTaskRunnerFault);
|
||||
taskRunner.addTasks(
|
||||
VerifyTakeOfferFeePayment.class,
|
||||
OffererCreatesAndSignPayoutTx.class,
|
||||
OffererSendsFiatTransferStartedMessage.class
|
||||
BuyerCreatesAndSignPayoutTx.class,
|
||||
BuyerSendsFiatTransferStartedMessage.class
|
||||
);
|
||||
taskRunner.run();
|
||||
}
|
||||
@ -200,8 +200,8 @@ public class BuyerAsOffererProtocol implements TradeProtocol {
|
||||
},
|
||||
this::handleTaskRunnerFault);
|
||||
|
||||
taskRunner.addTasks(OffererProcessPayoutTxPublishedMessage.class);
|
||||
taskRunner.addTasks(OffererCommitsPayoutTx.class);
|
||||
taskRunner.addTasks(BuyerProcessPayoutTxPublishedMessage.class);
|
||||
taskRunner.addTasks(BuyerCommitsPayoutTx.class);
|
||||
taskRunner.run();
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -18,12 +18,10 @@
|
||||
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.buyer.tasks.StateUtil;
|
||||
import io.bitsquare.trade.protocol.trade.messages.RequestDepositTxInputsMessage;
|
||||
import io.bitsquare.trade.states.OffererState;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -53,12 +51,7 @@ public class OffererProcessRequestDepositTxInputsMessage extends TradeTask {
|
||||
} 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);
|
||||
|
||||
StateUtil.setOfferOpenState(trade);
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
|
@ -18,12 +18,10 @@
|
||||
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.buyer.tasks.StateUtil;
|
||||
import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxMessage;
|
||||
import io.bitsquare.trade.states.OffererState;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -60,12 +58,7 @@ public class OffererProcessRequestPublishDepositTxMessage extends TradeTask {
|
||||
} 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);
|
||||
|
||||
StateUtil.setOfferOpenState(trade);
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -24,16 +24,16 @@ import io.bitsquare.p2p.MessageHandler;
|
||||
import io.bitsquare.p2p.Peer;
|
||||
import io.bitsquare.trade.BuyerAsTakerTrade;
|
||||
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.TakerCreatesAndSignsPayoutTx;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerCreatesDepositTxInputs;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerProcessPayoutTxPublishedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerProcessRequestPublishDepositTxFromTakerMessage;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSendsDepositTxPublishedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSendsFiatTransferStartedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSendsRequestPayDepositMessage;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerSignsAndPublishDepositTx;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerVerifiesAndSignsContract;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.taker.tasks.TakerProcessRequestPublishDepositTxFromSellerMessage;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.tasks.BuyerCommitsPayoutTx;
|
||||
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.buyer.tasks.BuyerVerifiesAndSignsContract;
|
||||
import io.bitsquare.trade.protocol.trade.messages.PayoutTxPublishedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxMessage;
|
||||
import io.bitsquare.trade.protocol.trade.messages.TradeMessage;
|
||||
@ -101,8 +101,8 @@ public class BuyerAsTakerProtocol implements TradeProtocol {
|
||||
taskRunner.addTasks(
|
||||
CreateTakeOfferFeeTx.class,
|
||||
BroadcastTakeOfferFeeTx.class,
|
||||
TakerCreatesDepositTxInputs.class,
|
||||
TakerSendsRequestPayDepositMessage.class
|
||||
BuyerCreatesDepositTxInputs.class,
|
||||
BuyerSendsRequestPayDepositMessage.class
|
||||
);
|
||||
taskRunner.run();
|
||||
}
|
||||
@ -119,11 +119,11 @@ public class BuyerAsTakerProtocol implements TradeProtocol {
|
||||
() -> log.debug("taskRunner at handleRequestPublishDepositTxMessage completed"),
|
||||
this::handleTaskRunnerFault);
|
||||
taskRunner.addTasks(
|
||||
TakerProcessRequestPublishDepositTxFromTakerMessage.class,
|
||||
TakerProcessRequestPublishDepositTxFromSellerMessage.class,
|
||||
VerifyOffererAccount.class,
|
||||
TakerVerifiesAndSignsContract.class,
|
||||
TakerSignsAndPublishDepositTx.class,
|
||||
TakerSendsDepositTxPublishedMessage.class
|
||||
BuyerVerifiesAndSignsContract.class,
|
||||
BuyerSignsAndPublishDepositTx.class,
|
||||
BuyerSendsDepositTxPublishedMessage.class
|
||||
);
|
||||
taskRunner.run();
|
||||
}
|
||||
@ -140,8 +140,8 @@ public class BuyerAsTakerProtocol implements TradeProtocol {
|
||||
this::handleTaskRunnerFault);
|
||||
taskRunner.addTasks(
|
||||
VerifyOfferFeePayment.class,
|
||||
TakerCreatesAndSignsPayoutTx.class,
|
||||
TakerSendsFiatTransferStartedMessage.class
|
||||
BuyerCreatesAndSignPayoutTx.class,
|
||||
BuyerSendsFiatTransferStartedMessage.class
|
||||
);
|
||||
taskRunner.run();
|
||||
}
|
||||
@ -163,8 +163,8 @@ public class BuyerAsTakerProtocol implements TradeProtocol {
|
||||
this::handleTaskRunnerFault);
|
||||
|
||||
taskRunner.addTasks(
|
||||
TakerProcessPayoutTxPublishedMessage.class,
|
||||
TakerCommitsPayoutTx.class);
|
||||
BuyerProcessPayoutTxPublishedMessage.class,
|
||||
BuyerCommitsPayoutTx.class);
|
||||
taskRunner.run();
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ package io.bitsquare.trade.protocol.trade.buyer.taker.tasks;
|
||||
import io.bitsquare.common.taskrunner.TaskRunner;
|
||||
import io.bitsquare.trade.Trade;
|
||||
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.LoggerFactory;
|
||||
@ -28,17 +28,17 @@ import org.slf4j.LoggerFactory;
|
||||
import static com.google.common.base.Preconditions.*;
|
||||
import static io.bitsquare.util.Validator.*;
|
||||
|
||||
public class TakerProcessRequestPublishDepositTxFromTakerMessage extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(TakerProcessRequestPublishDepositTxFromTakerMessage.class);
|
||||
public class TakerProcessRequestPublishDepositTxFromSellerMessage extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(TakerProcessRequestPublishDepositTxFromSellerMessage.class);
|
||||
|
||||
public TakerProcessRequestPublishDepositTxFromTakerMessage(TaskRunner taskHandler, Trade trade) {
|
||||
public TakerProcessRequestPublishDepositTxFromSellerMessage(TaskRunner taskHandler, Trade trade) {
|
||||
super(taskHandler, trade);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doRun() {
|
||||
try {
|
||||
RequestPublishDepositTxFromTakerMessage message = (RequestPublishDepositTxFromTakerMessage) processModel.getTradeMessage();
|
||||
RequestPublishDepositTxFromSellerMessage message = (RequestPublishDepositTxFromSellerMessage) processModel.getTradeMessage();
|
||||
checkTradeId(processModel.getId(), message);
|
||||
checkNotNull(message);
|
||||
|
@ -19,12 +19,10 @@ package io.bitsquare.trade.protocol.trade.buyer.taker.tasks;
|
||||
|
||||
import io.bitsquare.common.taskrunner.TaskRunner;
|
||||
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.protocol.trade.TradeTask;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.tasks.StateUtil;
|
||||
import io.bitsquare.trade.protocol.trade.messages.RequestDepositTxInputsMessage;
|
||||
import io.bitsquare.trade.states.TakerState;
|
||||
|
||||
import javafx.application.Platform;
|
||||
|
||||
@ -72,13 +70,7 @@ public class TakerSendsRequestDepositTxInputsMessage extends TradeTask {
|
||||
"or cancel that trade.");
|
||||
|
||||
trade.setErrorMessage(errorMessage);
|
||||
|
||||
if (trade instanceof BuyerAsTakerTrade)
|
||||
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
else if (trade instanceof SellerAsTakerTrade)
|
||||
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
|
||||
|
||||
StateUtil.setSendFailedState(trade);
|
||||
failed();
|
||||
}
|
||||
}
|
||||
|
@ -19,12 +19,10 @@ package io.bitsquare.trade.protocol.trade.buyer.taker.tasks;
|
||||
|
||||
import io.bitsquare.common.taskrunner.TaskRunner;
|
||||
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.protocol.trade.TradeTask;
|
||||
import io.bitsquare.trade.protocol.trade.buyer.tasks.StateUtil;
|
||||
import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxMessage;
|
||||
import io.bitsquare.trade.states.TakerState;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -62,12 +60,7 @@ public class TakerSendsRequestPublishDepositTxMessage extends TradeTask {
|
||||
public void handleFault() {
|
||||
appendToErrorMessage("Sending RequestOffererPublishDepositTxMessage failed");
|
||||
trade.setErrorMessage(errorMessage);
|
||||
|
||||
if (trade instanceof BuyerAsTakerTrade)
|
||||
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
else if (trade instanceof SellerAsTakerTrade)
|
||||
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
|
||||
StateUtil.setSendFailedState(trade);
|
||||
failed();
|
||||
}
|
||||
});
|
||||
|
@ -15,7 +15,7 @@
|
||||
* 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.trade.Trade;
|
||||
@ -26,10 +26,10 @@ import org.bitcoinj.core.Transaction;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TakerCommitsPayoutTx extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(TakerCommitsPayoutTx.class);
|
||||
public class BuyerCommitsPayoutTx extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(BuyerCommitsPayoutTx.class);
|
||||
|
||||
public TakerCommitsPayoutTx(TaskRunner taskHandler, Trade trade) {
|
||||
public BuyerCommitsPayoutTx(TaskRunner taskHandler, Trade trade) {
|
||||
super(taskHandler, trade);
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
* 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.trade.Trade;
|
||||
@ -26,10 +26,10 @@ import org.bitcoinj.core.Coin;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TakerCreatesAndSignsPayoutTx extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(TakerCreatesAndSignsPayoutTx.class);
|
||||
public class BuyerCreatesAndSignPayoutTx extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(BuyerCreatesAndSignPayoutTx.class);
|
||||
|
||||
public TakerCreatesAndSignsPayoutTx(TaskRunner taskHandler, Trade trade) {
|
||||
public BuyerCreatesAndSignPayoutTx(TaskRunner taskHandler, Trade trade) {
|
||||
super(taskHandler, trade);
|
||||
}
|
||||
|
||||
@ -37,25 +37,23 @@ public class TakerCreatesAndSignsPayoutTx extends TradeTask {
|
||||
protected void doRun() {
|
||||
try {
|
||||
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;
|
||||
Coin takerPayoutAmount = securityDeposit.add(trade.getTradeAmount());
|
||||
|
||||
|
||||
byte[] takerPayoutTxSignature = processModel.getTradeWalletService().createAndSignPayoutTx(
|
||||
byte[] buyerPayoutTxSignature = processModel.getTradeWalletService().createAndSignPayoutTx(
|
||||
trade.getDepositTx(),
|
||||
takerPayoutAmount,
|
||||
offererPayoutAmount,
|
||||
buyerPayoutAmount,
|
||||
sellerPayoutAmount,
|
||||
processModel.getAddressEntry(),
|
||||
processModel.tradingPeer.getPayoutAddressString(),
|
||||
processModel.getTradeWalletPubKey(),
|
||||
processModel.tradingPeer.getTradeWalletPubKey(),
|
||||
processModel.getArbitratorPubKey());
|
||||
|
||||
processModel.setPayoutTxSignature(takerPayoutTxSignature);
|
||||
processModel.setPayoutAmount(takerPayoutAmount);
|
||||
processModel.tradingPeer.setPayoutAmount(offererPayoutAmount);
|
||||
processModel.setPayoutTxSignature(buyerPayoutTxSignature);
|
||||
processModel.setPayoutAmount(buyerPayoutAmount);
|
||||
processModel.tradingPeer.setPayoutAmount(sellerPayoutAmount);
|
||||
|
||||
complete();
|
||||
} catch (Throwable t) {
|
@ -15,7 +15,7 @@
|
||||
* 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.TradeWalletService;
|
||||
@ -28,10 +28,10 @@ import org.bitcoinj.core.Coin;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TakerCreatesDepositTxInputs extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(TakerCreatesDepositTxInputs.class);
|
||||
public class BuyerCreatesDepositTxInputs extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(BuyerCreatesDepositTxInputs.class);
|
||||
|
||||
public TakerCreatesDepositTxInputs(TaskRunner taskHandler, Trade trade) {
|
||||
public BuyerCreatesDepositTxInputs(TaskRunner taskHandler, Trade trade) {
|
||||
super(taskHandler, trade);
|
||||
}
|
||||
|
||||
@ -50,6 +50,9 @@ public class TakerCreatesDepositTxInputs extends TradeTask {
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
trade.setThrowable(t);
|
||||
|
||||
StateUtil.setOfferOpenState(trade);
|
||||
|
||||
failed(t);
|
||||
}
|
||||
}
|
@ -15,14 +15,17 @@
|
||||
* 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.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.protocol.trade.TradeTask;
|
||||
import io.bitsquare.trade.protocol.trade.messages.PayoutTxPublishedMessage;
|
||||
import io.bitsquare.trade.states.OffererState;
|
||||
import io.bitsquare.trade.states.TakerState;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
@ -31,10 +34,10 @@ import org.slf4j.LoggerFactory;
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static io.bitsquare.util.Validator.checkTradeId;
|
||||
|
||||
public class TakerProcessPayoutTxPublishedMessage extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(TakerProcessPayoutTxPublishedMessage.class);
|
||||
public class BuyerProcessPayoutTxPublishedMessage extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(BuyerProcessPayoutTxPublishedMessage.class);
|
||||
|
||||
public TakerProcessPayoutTxPublishedMessage(TaskRunner taskHandler, Trade trade) {
|
||||
public BuyerProcessPayoutTxPublishedMessage(TaskRunner taskHandler, Trade trade) {
|
||||
super(taskHandler, trade);
|
||||
}
|
||||
|
||||
@ -47,9 +50,9 @@ public class TakerProcessPayoutTxPublishedMessage extends TradeTask {
|
||||
|
||||
trade.setPayoutTx(checkNotNull(message.payoutTx));
|
||||
|
||||
if (trade instanceof BuyerAsTakerTrade)
|
||||
trade.setProcessState(TakerState.ProcessState.PAYOUT_PUBLISHED);
|
||||
else if (trade instanceof SellerAsTakerTrade)
|
||||
if (trade instanceof BuyerAsOffererTrade || trade instanceof SellerAsOffererTrade)
|
||||
trade.setProcessState(OffererState.ProcessState.PAYOUT_PUBLISHED);
|
||||
else if (trade instanceof BuyerAsTakerTrade || trade instanceof SellerAsTakerTrade)
|
||||
trade.setProcessState(TakerState.ProcessState.PAYOUT_PUBLISHED);
|
||||
|
||||
complete();
|
@ -15,24 +15,21 @@
|
||||
* 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.p2p.listener.SendMessageListener;
|
||||
import io.bitsquare.trade.BuyerAsTakerTrade;
|
||||
import io.bitsquare.trade.SellerAsTakerTrade;
|
||||
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.TakerState;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TakerSendsDepositTxPublishedMessage extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(TakerSendsDepositTxPublishedMessage.class);
|
||||
public class BuyerSendsDepositTxPublishedMessage extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(BuyerSendsDepositTxPublishedMessage.class);
|
||||
|
||||
public TakerSendsDepositTxPublishedMessage(TaskRunner taskHandler, Trade trade) {
|
||||
public BuyerSendsDepositTxPublishedMessage(TaskRunner taskHandler, Trade trade) {
|
||||
super(taskHandler, trade);
|
||||
}
|
||||
|
||||
@ -53,10 +50,7 @@ public class TakerSendsDepositTxPublishedMessage extends TradeTask {
|
||||
appendToErrorMessage("Sending DepositTxPublishedMessage failed");
|
||||
trade.setErrorMessage(errorMessage);
|
||||
|
||||
if (trade instanceof BuyerAsTakerTrade)
|
||||
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
else if (trade instanceof SellerAsTakerTrade)
|
||||
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
StateUtil.setSendFailedState(trade);
|
||||
|
||||
failed();
|
||||
}
|
||||
@ -67,4 +61,6 @@ public class TakerSendsDepositTxPublishedMessage extends TradeTask {
|
||||
failed(t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -15,24 +15,27 @@
|
||||
* 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.p2p.listener.SendMessageListener;
|
||||
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.protocol.trade.TradeTask;
|
||||
import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage;
|
||||
import io.bitsquare.trade.states.OffererState;
|
||||
import io.bitsquare.trade.states.TakerState;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TakerSendsFiatTransferStartedMessage extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(TakerSendsFiatTransferStartedMessage.class);
|
||||
public class BuyerSendsFiatTransferStartedMessage extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(BuyerSendsFiatTransferStartedMessage.class);
|
||||
|
||||
public TakerSendsFiatTransferStartedMessage(TaskRunner taskHandler, Trade trade) {
|
||||
public BuyerSendsFiatTransferStartedMessage(TaskRunner taskHandler, Trade trade) {
|
||||
super(taskHandler, trade);
|
||||
}
|
||||
|
||||
@ -42,23 +45,22 @@ public class TakerSendsFiatTransferStartedMessage extends TradeTask {
|
||||
FiatTransferStartedMessage tradeMessage = new FiatTransferStartedMessage(processModel.getId(),
|
||||
processModel.getPayoutTxSignature(),
|
||||
processModel.getPayoutAmount(),
|
||||
processModel.tradingPeer.getPayoutAmount(),
|
||||
processModel.getAddressEntry().getAddressString());
|
||||
processModel.getAddressEntry().getAddressString(),
|
||||
processModel.tradingPeer.getPayoutAmount()
|
||||
);
|
||||
|
||||
processModel.getMessageService().sendMessage(trade.getTradingPeer(), tradeMessage,
|
||||
processModel.getP2pSigPubKey(),
|
||||
processModel.getP2pEncryptPubKey(),
|
||||
processModel.tradingPeer.getP2pSigPubKey(),
|
||||
processModel.tradingPeer.getP2pEncryptPubKey(),
|
||||
new SendMessageListener() {
|
||||
@Override
|
||||
public void handleResult() {
|
||||
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);
|
||||
}
|
||||
else if (trade instanceof SellerAsTakerTrade) {
|
||||
trade.setProcessState(TakerState.ProcessState.FIAT_PAYMENT_STARTED);
|
||||
}
|
||||
|
||||
complete();
|
||||
}
|
||||
@ -68,16 +70,12 @@ public class TakerSendsFiatTransferStartedMessage extends TradeTask {
|
||||
appendToErrorMessage("Sending FiatTransferStartedMessage failed");
|
||||
trade.setErrorMessage(errorMessage);
|
||||
|
||||
if (trade instanceof BuyerAsTakerTrade) {
|
||||
((BuyerAsTakerTrade) trade).setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
}
|
||||
else if (trade instanceof SellerAsTakerTrade) {
|
||||
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
}
|
||||
StateUtil.setSendFailedState(trade);
|
||||
|
||||
failed();
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
trade.setThrowable(t);
|
@ -15,33 +15,30 @@
|
||||
* 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.p2p.listener.SendMessageListener;
|
||||
import io.bitsquare.trade.BuyerAsTakerTrade;
|
||||
import io.bitsquare.trade.SellerAsTakerTrade;
|
||||
import io.bitsquare.trade.Trade;
|
||||
import io.bitsquare.trade.protocol.trade.TradeTask;
|
||||
import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositFromOffererMessage;
|
||||
import io.bitsquare.trade.states.TakerState;
|
||||
import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositMessage;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TakerSendsRequestPayDepositMessage extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(TakerSendsRequestPayDepositMessage.class);
|
||||
public class BuyerSendsRequestPayDepositMessage extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(BuyerSendsRequestPayDepositMessage.class);
|
||||
|
||||
public TakerSendsRequestPayDepositMessage(TaskRunner taskHandler, Trade trade) {
|
||||
public BuyerSendsRequestPayDepositMessage(TaskRunner taskHandler, Trade trade) {
|
||||
super(taskHandler, trade);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doRun() {
|
||||
try {
|
||||
RequestPayDepositFromOffererMessage message = new RequestPayDepositFromOffererMessage(
|
||||
RequestPayDepositMessage tradeMessage = new RequestPayDepositMessage(
|
||||
processModel.getId(),
|
||||
model.getTradeAmount(),
|
||||
trade.getTradeAmount(),
|
||||
processModel.getConnectedOutputsForAllInputs(),
|
||||
processModel.getOutputs(),
|
||||
processModel.getTradeWalletPubKey(),
|
||||
@ -50,7 +47,7 @@ public class TakerSendsRequestPayDepositMessage extends TradeTask {
|
||||
processModel.getFiatAccount(),
|
||||
processModel.getAccountId());
|
||||
|
||||
processModel.getMessageService().sendMessage(trade.getTradingPeer(), message, new SendMessageListener() {
|
||||
processModel.getMessageService().sendMessage(trade.getTradingPeer(), tradeMessage, new SendMessageListener() {
|
||||
@Override
|
||||
public void handleResult() {
|
||||
log.trace("RequestTakerDepositPaymentMessage successfully arrived at peer");
|
||||
@ -61,25 +58,16 @@ public class TakerSendsRequestPayDepositMessage extends TradeTask {
|
||||
public void handleFault() {
|
||||
appendToErrorMessage("Sending RequestTakerDepositPaymentMessage failed");
|
||||
trade.setErrorMessage(errorMessage);
|
||||
if (trade instanceof BuyerAsTakerTrade)
|
||||
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
else if (trade instanceof SellerAsTakerTrade)
|
||||
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
|
||||
StateUtil.setOfferOpenState(trade);
|
||||
StateUtil.setSendFailedState(trade);
|
||||
failed();
|
||||
}
|
||||
});
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
trade.setThrowable(t);
|
||||
|
||||
if (trade instanceof BuyerAsTakerTrade) {
|
||||
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
}
|
||||
else if (trade instanceof SellerAsTakerTrade) {
|
||||
trade.setProcessState(TakerState.ProcessState.MESSAGE_SENDING_FAILED);
|
||||
}
|
||||
|
||||
StateUtil.setOfferOpenState(trade);
|
||||
StateUtil.setSendFailedState(trade);
|
||||
failed(t);
|
||||
}
|
||||
}
|
@ -15,14 +15,17 @@
|
||||
* 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.common.taskrunner.TaskRunner;
|
||||
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.protocol.trade.TradeTask;
|
||||
import io.bitsquare.trade.states.OffererState;
|
||||
import io.bitsquare.trade.states.TakerState;
|
||||
|
||||
import org.bitcoinj.core.Coin;
|
||||
@ -35,10 +38,10 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TakerSignsAndPublishDepositTx extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(TakerSignsAndPublishDepositTx.class);
|
||||
public class BuyerSignsAndPublishDepositTx extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(BuyerSignsAndPublishDepositTx.class);
|
||||
|
||||
public TakerSignsAndPublishDepositTx(TaskRunner taskHandler, Trade trade) {
|
||||
public BuyerSignsAndPublishDepositTx(TaskRunner taskHandler, Trade trade) {
|
||||
super(taskHandler, trade);
|
||||
}
|
||||
|
||||
@ -63,13 +66,13 @@ public class TakerSignsAndPublishDepositTx extends TradeTask {
|
||||
|
||||
trade.setDepositTx(transaction);
|
||||
|
||||
if (trade instanceof BuyerAsTakerTrade) {
|
||||
if (trade instanceof BuyerAsTakerTrade || trade instanceof SellerAsTakerTrade) {
|
||||
trade.setProcessState(TakerState.ProcessState.DEPOSIT_PUBLISHED);
|
||||
trade.setLifeCycleState(TakerState.LifeCycleState.PENDING);
|
||||
}
|
||||
else if (trade instanceof SellerAsTakerTrade) {
|
||||
trade.setProcessState(TakerState.ProcessState.DEPOSIT_PUBLISHED);
|
||||
trade.setLifeCycleState(TakerState.LifeCycleState.PENDING);
|
||||
else if (trade instanceof BuyerAsOffererTrade || trade instanceof SellerAsOffererTrade) {
|
||||
trade.setProcessState(OffererState.ProcessState.DEPOSIT_PUBLISHED);
|
||||
trade.setLifeCycleState(OffererState.LifeCycleState.PENDING);
|
||||
}
|
||||
|
||||
complete();
|
||||
@ -77,15 +80,21 @@ public class TakerSignsAndPublishDepositTx extends TradeTask {
|
||||
|
||||
@Override
|
||||
public void onFailure(@NotNull Throwable t) {
|
||||
t.printStackTrace();
|
||||
trade.setThrowable(t);
|
||||
failed(t);
|
||||
handleFault(t);
|
||||
}
|
||||
});
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
trade.setThrowable(t);
|
||||
failed(t);
|
||||
handleFault(t);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleFault(Throwable t) {
|
||||
t.printStackTrace();
|
||||
trade.setThrowable(t);
|
||||
|
||||
if (trade instanceof BuyerAsOffererTrade || trade instanceof SellerAsOffererTrade)
|
||||
trade.setLifeCycleState(OffererState.LifeCycleState.OFFER_OPEN);
|
||||
|
||||
failed(t);
|
||||
}
|
||||
}
|
@ -15,7 +15,7 @@
|
||||
* 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.trade.Contract;
|
||||
@ -26,10 +26,10 @@ import io.bitsquare.util.Utilities;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TakerVerifiesAndSignsContract extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(TakerVerifiesAndSignsContract.class);
|
||||
public class BuyerVerifiesAndSignsContract extends TradeTask {
|
||||
private static final Logger log = LoggerFactory.getLogger(BuyerVerifiesAndSignsContract.class);
|
||||
|
||||
public TakerVerifiesAndSignsContract(TaskRunner taskHandler, Trade trade) {
|
||||
public BuyerVerifiesAndSignsContract(TaskRunner taskHandler, Trade trade) {
|
||||
super(taskHandler, trade);
|
||||
}
|
||||
|
||||
@ -39,17 +39,15 @@ public class TakerVerifiesAndSignsContract extends TradeTask {
|
||||
Contract contract = new Contract(
|
||||
processModel.getOffer(),
|
||||
trade.getTradeAmount(),
|
||||
processModel.getTakeOfferFeeTx().getHashAsString(),
|
||||
processModel.tradingPeer.getAccountId(),
|
||||
processModel.getTakeOfferFeeTxId(),
|
||||
processModel.getAccountId(),
|
||||
processModel.tradingPeer.getFiatAccount(),
|
||||
processModel.tradingPeer.getAccountId(),
|
||||
processModel.getFiatAccount(),
|
||||
processModel.tradingPeer.getP2pSigPubKey(),
|
||||
processModel.getP2pSigPubKey());
|
||||
processModel.tradingPeer.getFiatAccount(),
|
||||
processModel.getP2pSigPubKey(),
|
||||
processModel.tradingPeer.getP2pSigPubKey());
|
||||
String contractAsJson = Utilities.objectToJson(contract);
|
||||
String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(),
|
||||
contractAsJson);
|
||||
|
||||
String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(), contractAsJson);
|
||||
trade.setContract(contract);
|
||||
trade.setContractAsJson(contractAsJson);
|
||||
trade.setOffererContractSignature(signature);
|
||||
@ -60,6 +58,8 @@ public class TakerVerifiesAndSignsContract extends TradeTask {
|
||||
t.printStackTrace();
|
||||
trade.setThrowable(t);
|
||||
|
||||
StateUtil.setOfferOpenState(trade);
|
||||
|
||||
failed(t);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -32,18 +32,18 @@ public class FiatTransferStartedMessage extends TradeMessage implements MailboxM
|
||||
|
||||
public final byte[] buyerSignature;
|
||||
public final Coin buyerPayoutAmount;
|
||||
public final Coin sellerPayoutAmount;
|
||||
public final String buyerPayoutAddress;
|
||||
public final Coin sellerPayoutAmount;
|
||||
|
||||
public FiatTransferStartedMessage(String tradeId,
|
||||
byte[] buyerSignature,
|
||||
Coin buyerPayoutAmount,
|
||||
Coin sellerPayoutAmount,
|
||||
String buyerPayoutAddress) {
|
||||
String buyerPayoutAddress,
|
||||
Coin sellerPayoutAmount) {
|
||||
super(tradeId);
|
||||
this.buyerSignature = buyerSignature;
|
||||
this.buyerPayoutAmount = buyerPayoutAmount;
|
||||
this.sellerPayoutAmount = sellerPayoutAmount;
|
||||
this.buyerPayoutAddress = buyerPayoutAddress;
|
||||
this.sellerPayoutAmount = sellerPayoutAmount;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -19,6 +19,7 @@ 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;
|
||||
@ -41,8 +42,10 @@ public class RequestPayDepositMessage extends TradeMessage implements Serializab
|
||||
public final PublicKey buyerP2PEncryptPublicKey;
|
||||
public final FiatAccount buyerFiatAccount;
|
||||
public final String buyerAccountId;
|
||||
public final Coin tradeAmount;
|
||||
|
||||
public RequestPayDepositMessage(String tradeId,
|
||||
Coin tradeAmount,
|
||||
List<TransactionOutput> buyerConnectedOutputsForAllInputs,
|
||||
List<TransactionOutput> buyerOutputs,
|
||||
byte[] buyerTradeWalletPubKey,
|
||||
@ -51,6 +54,7 @@ public class RequestPayDepositMessage extends TradeMessage implements Serializab
|
||||
FiatAccount buyerFiatAccount,
|
||||
String buyerAccountId) {
|
||||
super(tradeId);
|
||||
this.tradeAmount = tradeAmount;
|
||||
this.buyerP2PSigPublicKey = buyerP2PSigPublicKey;
|
||||
this.buyerP2PEncryptPublicKey = buyerP2PEncryptPublicKey;
|
||||
this.buyerConnectedOutputsForAllInputs = buyerConnectedOutputsForAllInputs;
|
||||
|
@ -31,22 +31,22 @@ import java.util.List;
|
||||
import javax.annotation.concurrent.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.
|
||||
private static final long serialVersionUID = 1L;
|
||||
public byte[] sellerTradeWalletPubKey;
|
||||
|
||||
public RequestPublishDepositTxFromTakerMessage(String tradeId,
|
||||
FiatAccount takerFiatAccount,
|
||||
String takerAccountId,
|
||||
byte[] sellerTradeWalletPubKey,
|
||||
PublicKey takerP2PSigPublicKey,
|
||||
PublicKey takerP2PEncryptPublicKey,
|
||||
String takerContractAsJson,
|
||||
String takerContractSignature,
|
||||
String takerPayoutAddressString,
|
||||
Transaction takersPreparedDepositTx,
|
||||
List<TransactionOutput> takerConnectedOutputsForAllInputs) {
|
||||
public RequestPublishDepositTxFromSellerMessage(String tradeId,
|
||||
FiatAccount takerFiatAccount,
|
||||
String takerAccountId,
|
||||
byte[] sellerTradeWalletPubKey,
|
||||
PublicKey takerP2PSigPublicKey,
|
||||
PublicKey takerP2PEncryptPublicKey,
|
||||
String takerContractAsJson,
|
||||
String takerContractSignature,
|
||||
String takerPayoutAddressString,
|
||||
Transaction takersPreparedDepositTx,
|
||||
List<TransactionOutput> takerConnectedOutputsForAllInputs) {
|
||||
super(tradeId,
|
||||
takerFiatAccount,
|
||||
takerAccountId,
|
@ -20,7 +20,7 @@ package io.bitsquare.trade.protocol.trade.seller.offerer.tasks;
|
||||
import io.bitsquare.common.taskrunner.TaskRunner;
|
||||
import io.bitsquare.trade.Trade;
|
||||
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.LoggerFactory;
|
||||
@ -38,7 +38,7 @@ public class OffererProcessRequestPayDepositFromOffererMessage extends TradeTask
|
||||
@Override
|
||||
protected void doRun() {
|
||||
try {
|
||||
RequestPayDepositFromOffererMessage message = (RequestPayDepositFromOffererMessage) processModel.getTradeMessage();
|
||||
RequestPayDepositMessage message = (RequestPayDepositMessage) processModel.getTradeMessage();
|
||||
checkTradeId(processModel.getId(), message);
|
||||
checkNotNull(message);
|
||||
|
||||
|
@ -23,7 +23,7 @@ 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.RequestPublishDepositTxFromTakerMessage;
|
||||
import io.bitsquare.trade.protocol.trade.messages.RequestPublishDepositTxFromSellerMessage;
|
||||
import io.bitsquare.trade.states.OffererState;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
@ -39,7 +39,7 @@ public class OffererSendsRequestPublishDepositTxFromTakerMessage extends TradeTa
|
||||
@Override
|
||||
protected void doRun() {
|
||||
try {
|
||||
RequestPublishDepositTxFromTakerMessage tradeMessage = new RequestPublishDepositTxFromTakerMessage(
|
||||
RequestPublishDepositTxFromSellerMessage tradeMessage = new RequestPublishDepositTxFromSellerMessage(
|
||||
processModel.getId(),
|
||||
processModel.getFiatAccount(),
|
||||
processModel.getAccountId(),
|
||||
|
@ -42,6 +42,7 @@ public class CreateTakeOfferFeeTx extends TradeTask {
|
||||
Transaction createTakeOfferFeeTx = processModel.getTradeWalletService().createTakeOfferFeeTx(processModel.getAddressEntry());
|
||||
|
||||
processModel.setTakeOfferFeeTx(createTakeOfferFeeTx);
|
||||
processModel.setTakeOfferFeeTxId(createTakeOfferFeeTx.getHashAsString());
|
||||
|
||||
if (trade instanceof BuyerAsTakerTrade)
|
||||
trade.setProcessState(TakerState.ProcessState.TAKE_OFFER_FEE_TX_CREATED);
|
||||
|
Loading…
x
Reference in New Issue
Block a user