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.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*/

View File

@ -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

View File

@ -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);

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, PublicKey p2pSigPubKey, PublicKey p2pEncryptPubKey, SendMessageListener listener);
void sendMessage(Peer peer, Message message, PublicKey recipientP2pSigPubKey, PublicKey recipientP2pEncryptPubKey, SendMessageListener listener);
void addMessageHandler(MessageHandler listener);

View File

@ -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 + "]");
});
}

View File

@ -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.");

View File

@ -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 + '\'' +
'}';
}
}

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.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();
}

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;
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);
}
}

View File

@ -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);
}
}

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.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();
}

View File

@ -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);

View File

@ -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();
}
}

View File

@ -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();
}
});

View File

@ -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);
}

View File

@ -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) {

View File

@ -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);
}
}

View File

@ -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();

View File

@ -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);
}
}
}

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

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 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;
}
}

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 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;

View File

@ -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,

View File

@ -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);

View File

@ -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(),

View File

@ -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);