Unified Seller tasks (WIP)

This commit is contained in:
Manfred Karrer 2015-04-02 15:33:54 +02:00
parent 0a4e082e44
commit 06c06b1244
20 changed files with 92 additions and 446 deletions

View file

@ -46,7 +46,7 @@ import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerCreatesAndSignC
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerCreatesAndSignsDepositTx; import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerCreatesAndSignsDepositTx;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerProcessDepositTxPublishedMessage; import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerProcessDepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerProcessFiatTransferStartedMessage; import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerProcessFiatTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerProcessRequestSellerDepositPaymentMessage; import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerProcessRequestPayDepositMessage;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerSendsPayoutTxPublishedMessage; import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerSendsPayoutTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerSignsAndPublishPayoutTx; import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerSignsAndPublishPayoutTx;
import io.bitsquare.trade.protocol.trade.shared.offerer.tasks.VerifyTakeOfferFeePayment; import io.bitsquare.trade.protocol.trade.shared.offerer.tasks.VerifyTakeOfferFeePayment;
@ -122,7 +122,7 @@ public class DebugView extends InitializableView {
CreateTakeOfferFeeTx.class, CreateTakeOfferFeeTx.class,
TakerSendsRequestDepositTxInputsMessage.class, TakerSendsRequestDepositTxInputsMessage.class,
TakerProcessRequestSellerDepositPaymentMessage.class, TakerProcessRequestPayDepositMessage.class,
VerifyOffererAccount.class, VerifyOffererAccount.class,
TakerCreatesAndSignContract.class, TakerCreatesAndSignContract.class,
TakerCreatesAndSignsDepositTx.class, TakerCreatesAndSignsDepositTx.class,

View file

@ -99,8 +99,8 @@ abstract public class Trade extends Model implements Serializable {
protected Transaction depositTx; protected Transaction depositTx;
private Contract contract; private Contract contract;
private String contractAsJson; private String contractAsJson;
private String takerContractSignature; private String sellerContractSignature;
private String offererContractSignature; private String buyerContractSignature;
private Transaction payoutTx; private Transaction payoutTx;
// Transient/Mutable // Transient/Mutable
@ -354,22 +354,22 @@ abstract public class Trade extends Model implements Serializable {
// Getter/Setter for Mutable objects // Getter/Setter for Mutable objects
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
public void setTakerContractSignature(String takerSignature) { public void setSellerContractSignature(String takerSignature) {
this.takerContractSignature = takerSignature; this.sellerContractSignature = takerSignature;
} }
@Nullable @Nullable
public String getTakerContractSignature() { public String getSellerContractSignature() {
return takerContractSignature; return sellerContractSignature;
} }
public void setOffererContractSignature(String offererContractSignature) { public void setBuyerContractSignature(String buyerContractSignature) {
this.offererContractSignature = offererContractSignature; this.buyerContractSignature = buyerContractSignature;
} }
@Nullable @Nullable
public String getOffererContractSignature() { public String getBuyerContractSignature() {
return offererContractSignature; return buyerContractSignature;
} }
public void setContractAsJson(String contractAsJson) { public void setContractAsJson(String contractAsJson) {
@ -430,8 +430,8 @@ abstract public class Trade extends Model implements Serializable {
", depositTx=" + depositTx + ", depositTx=" + depositTx +
", contract=" + contract + ", contract=" + contract +
", contractAsJson='" + contractAsJson + '\'' + ", contractAsJson='" + contractAsJson + '\'' +
", takerContractSignature='" + takerContractSignature + '\'' + ", takerContractSignature='" + sellerContractSignature + '\'' +
", offererContractSignature='" + offererContractSignature + '\'' + ", offererContractSignature='" + buyerContractSignature + '\'' +
", payoutTx=" + payoutTx + ", payoutTx=" + payoutTx +
", errorMessage='" + errorMessage + '\'' + ", errorMessage='" + errorMessage + '\'' +
", throwable=" + throwable + ", throwable=" + throwable +

View file

@ -44,7 +44,7 @@ public class TakerSendsRequestPublishDepositTxMessage extends TradeTask {
processModel.getP2pSigPubKey(), processModel.getP2pSigPubKey(),
processModel.getP2pEncryptPublicKey(), processModel.getP2pEncryptPublicKey(),
trade.getContractAsJson(), trade.getContractAsJson(),
trade.getTakerContractSignature(), trade.getSellerContractSignature(),
processModel.getAddressEntry().getAddressString(), processModel.getAddressEntry().getAddressString(),
processModel.getPreparedDepositTx(), processModel.getPreparedDepositTx(),
processModel.getConnectedOutputsForAllInputs() processModel.getConnectedOutputsForAllInputs()

View file

@ -50,8 +50,8 @@ public class BuyerVerifiesAndSignsContract extends TradeTask {
String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(), contractAsJson); String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(), contractAsJson);
trade.setContract(contract); trade.setContract(contract);
trade.setContractAsJson(contractAsJson); trade.setContractAsJson(contractAsJson);
trade.setOffererContractSignature(signature); trade.setBuyerContractSignature(signature);
trade.setOffererContractSignature(processModel.tradingPeer.getContractSignature()); trade.setBuyerContractSignature(processModel.tradingPeer.getContractSignature());
complete(); complete();
} catch (Throwable t) { } catch (Throwable t) {

View file

@ -31,15 +31,15 @@ import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage; import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositMessage; import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositMessage;
import io.bitsquare.trade.protocol.trade.messages.TradeMessage; import io.bitsquare.trade.protocol.trade.messages.TradeMessage;
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererCommitDepositTx;
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererCreatesAndSignsContract;
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererCreatesAndSignsDepositTx;
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererProcessDepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererProcessFiatTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererProcessRequestPayDepositFromOffererMessage;
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererSendsPayoutTxPublishedMessage; import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererSendsPayoutTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererSendsRequestPublishDepositTxFromTakerMessage; import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererSendsRequestPublishDepositTxFromTakerMessage;
import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererSignsAndPublishPayoutTx; import io.bitsquare.trade.protocol.trade.seller.offerer.tasks.OffererSignsAndPublishPayoutTx;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerCommitDepositTx;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerCreatesAndSignsContract;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerCreatesAndSignsDepositTx;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerProcessDepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerProcessFiatTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerProcessRequestPayDepositMessage;
import io.bitsquare.trade.protocol.trade.shared.models.ProcessModel; import io.bitsquare.trade.protocol.trade.shared.models.ProcessModel;
import io.bitsquare.trade.protocol.trade.shared.offerer.tasks.VerifyTakeOfferFeePayment; import io.bitsquare.trade.protocol.trade.shared.offerer.tasks.VerifyTakeOfferFeePayment;
import io.bitsquare.trade.protocol.trade.shared.offerer.tasks.VerifyTakerAccount; import io.bitsquare.trade.protocol.trade.shared.offerer.tasks.VerifyTakerAccount;
@ -145,10 +145,10 @@ public class SellerAsOffererProtocol implements TradeProtocol {
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks( taskRunner.addTasks(
OffererProcessRequestPayDepositFromOffererMessage.class, SellerProcessRequestPayDepositMessage.class,
VerifyTakerAccount.class, VerifyTakerAccount.class,
OffererCreatesAndSignsContract.class, SellerCreatesAndSignsContract.class,
OffererCreatesAndSignsDepositTx.class, SellerCreatesAndSignsDepositTx.class,
OffererSendsRequestPublishDepositTxFromTakerMessage.class OffererSendsRequestPublishDepositTxFromTakerMessage.class
); );
taskRunner.run(); taskRunner.run();
@ -162,8 +162,8 @@ public class SellerAsOffererProtocol implements TradeProtocol {
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks( taskRunner.addTasks(
OffererProcessDepositTxPublishedMessage.class, SellerProcessDepositTxPublishedMessage.class,
OffererCommitDepositTx.class SellerCommitDepositTx.class
); );
taskRunner.run(); taskRunner.run();
} }
@ -175,7 +175,7 @@ public class SellerAsOffererProtocol implements TradeProtocol {
() -> log.debug("taskRunner at handleFiatTransferStartedMessage completed"), () -> log.debug("taskRunner at handleFiatTransferStartedMessage completed"),
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks(OffererProcessFiatTransferStartedMessage.class); taskRunner.addTasks(SellerProcessFiatTransferStartedMessage.class);
taskRunner.run(); taskRunner.run();
} }

View file

@ -1,51 +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.seller.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 OffererCommitDepositTx extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererCommitDepositTx.class);
public OffererCommitDepositTx(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
// To access tx confidence we need to add that tx into our wallet.
Transaction depositTx = processModel.getTradeWalletService().commitTx(trade.getDepositTx());
trade.setDepositTx(depositTx);
complete();
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
failed(t);
}
}
}

View file

@ -1,65 +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.seller.offerer.tasks;
import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.Contract;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.util.Utilities;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OffererCreatesAndSignsContract extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererCreatesAndSignsContract.class);
public OffererCreatesAndSignsContract(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
assert processModel.getTakeOfferFeeTxId() != null;
Contract contract = new Contract(
processModel.getOffer(),
model.getTradeAmount(),
processModel.getTakeOfferFeeTxId(),
processModel.getAccountId(),
processModel.getAccountId(),
processModel.getFiatAccount(),
processModel.getFiatAccount(),
processModel.getOffer().getP2PSigPubKey(),
processModel.getP2pSigPubKey());
String contractAsJson = Utilities.objectToJson(contract);
String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(),
contractAsJson);
model.setContract(contract);
model.setContractAsJson(contractAsJson);
model.setOffererContractSignature(signature);
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.seller.offerer.tasks;
import io.bitsquare.btc.FeePolicy;
import io.bitsquare.btc.TradeWalletService;
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 OffererCreatesAndSignsDepositTx extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererCreatesAndSignsDepositTx.class);
public OffererCreatesAndSignsDepositTx(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
assert trade.getTradeAmount() != null;
Coin inputAmount = trade.getSecurityDeposit().add(FeePolicy.TX_FEE).add(trade.getTradeAmount());
Coin msOutputAmount = inputAmount.add(trade.getSecurityDeposit());
TradeWalletService.Result result = processModel.getTradeWalletService().createAndSignDepositTx(
inputAmount,
msOutputAmount,
processModel.tradingPeer.getConnectedOutputsForAllInputs(),
processModel.tradingPeer.getOutputs(),
processModel.getAddressEntry(),
processModel.tradingPeer.getTradeWalletPubKey(),
processModel.getTradeWalletPubKey(),
processModel.getArbitratorPubKey());
processModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs());
processModel.setPreparedDepositTx(result.getDepositTx());
complete();
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
failed(t);
}
}
}

View file

@ -47,7 +47,7 @@ public class OffererSendsRequestPublishDepositTxFromTakerMessage extends TradeTa
processModel.getP2pSigPubKey(), processModel.getP2pSigPubKey(),
processModel.getP2pEncryptPublicKey(), processModel.getP2pEncryptPublicKey(),
trade.getContractAsJson(), trade.getContractAsJson(),
trade.getOffererContractSignature(), trade.getBuyerContractSignature(),
processModel.getAddressEntry().getAddressString(), processModel.getAddressEntry().getAddressString(),
processModel.getPreparedDepositTx(), processModel.getPreparedDepositTx(),
processModel.getConnectedOutputsForAllInputs() processModel.getConnectedOutputsForAllInputs()

View file

@ -31,14 +31,14 @@ import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage; import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositMessage; import io.bitsquare.trade.protocol.trade.messages.RequestPayDepositMessage;
import io.bitsquare.trade.protocol.trade.messages.TradeMessage; import io.bitsquare.trade.protocol.trade.messages.TradeMessage;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerCommitDepositTx;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerCreatesAndSignContract;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerCreatesAndSignsDepositTx;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerProcessDepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerProcessFiatTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerProcessRequestSellerDepositPaymentMessage;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerSendsPayoutTxPublishedMessage; import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerSendsPayoutTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerSignsAndPublishPayoutTx; import io.bitsquare.trade.protocol.trade.seller.taker.tasks.TakerSignsAndPublishPayoutTx;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerCommitDepositTx;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerCreatesAndSignsContract;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerCreatesAndSignsDepositTx;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerProcessDepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerProcessFiatTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.seller.tasks.SellerProcessRequestPayDepositMessage;
import io.bitsquare.trade.protocol.trade.shared.models.ProcessModel; import io.bitsquare.trade.protocol.trade.shared.models.ProcessModel;
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.BroadcastTakeOfferFeeTx; import io.bitsquare.trade.protocol.trade.shared.taker.tasks.BroadcastTakeOfferFeeTx;
import io.bitsquare.trade.protocol.trade.shared.taker.tasks.CreateTakeOfferFeeTx; import io.bitsquare.trade.protocol.trade.shared.taker.tasks.CreateTakeOfferFeeTx;
@ -122,10 +122,10 @@ public class SellerAsTakerProtocol implements TradeProtocol {
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks( taskRunner.addTasks(
TakerProcessRequestSellerDepositPaymentMessage.class, SellerProcessRequestPayDepositMessage.class,
VerifyOffererAccount.class, VerifyOffererAccount.class,
TakerCreatesAndSignContract.class, SellerCreatesAndSignsContract.class,
TakerCreatesAndSignsDepositTx.class, SellerCreatesAndSignsDepositTx.class,
TakerSendsRequestPublishDepositTxMessage.class TakerSendsRequestPublishDepositTxMessage.class
); );
taskRunner.run(); taskRunner.run();
@ -139,8 +139,8 @@ public class SellerAsTakerProtocol implements TradeProtocol {
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks( taskRunner.addTasks(
TakerProcessDepositTxPublishedMessage.class, SellerProcessDepositTxPublishedMessage.class,
TakerCommitDepositTx.class SellerCommitDepositTx.class
); );
taskRunner.run(); taskRunner.run();
} }
@ -152,7 +152,7 @@ public class SellerAsTakerProtocol implements TradeProtocol {
() -> log.debug("taskRunner at handleFiatTransferStartedMessage completed"), () -> log.debug("taskRunner at handleFiatTransferStartedMessage completed"),
this::handleTaskRunnerFault); this::handleTaskRunnerFault);
taskRunner.addTasks(TakerProcessFiatTransferStartedMessage.class); taskRunner.addTasks(SellerProcessFiatTransferStartedMessage.class);
taskRunner.run(); taskRunner.run();
} }

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.seller.taker.tasks;
import io.bitsquare.common.taskrunner.TaskRunner;
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;
import static com.google.common.base.Preconditions.checkNotNull;
import static io.bitsquare.util.Validator.checkTradeId;
public class TakerProcessDepositTxPublishedMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerProcessDepositTxPublishedMessage.class);
public TakerProcessDepositTxPublishedMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
DepositTxPublishedMessage message = (DepositTxPublishedMessage) processModel.getTradeMessage();
checkTradeId(processModel.getId(), message);
checkNotNull(message);
trade.setDepositTx(checkNotNull(message.depositTx));
if (trade instanceof BuyerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.DEPOSIT_PUBLISHED);
else if (trade instanceof SellerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.DEPOSIT_PUBLISHED);
complete();
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
failed(t);
}
}
}

View file

@ -1,65 +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.seller.taker.tasks;
import io.bitsquare.common.taskrunner.TaskRunner;
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.FiatTransferStartedMessage;
import io.bitsquare.trade.states.TakerState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
import static io.bitsquare.util.Validator.*;
public class TakerProcessFiatTransferStartedMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerProcessFiatTransferStartedMessage.class);
public TakerProcessFiatTransferStartedMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
FiatTransferStartedMessage message = (FiatTransferStartedMessage) processModel.getTradeMessage();
checkTradeId(processModel.getId(), message);
checkNotNull(message);
processModel.tradingPeer.setSignature(checkNotNull(message.buyerSignature));
processModel.tradingPeer.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.buyerPayoutAmount)));
processModel.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.sellerPayoutAmount)));
processModel.tradingPeer.setPayoutAddressString(nonEmptyStringOf(message.buyerPayoutAddress));
if (trade instanceof BuyerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.FIAT_PAYMENT_STARTED);
else if (trade instanceof SellerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.FIAT_PAYMENT_STARTED);
complete();
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
failed(t);
}
}
}

View file

@ -1,61 +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.seller.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.RequestPayDepositMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.*;
import static io.bitsquare.util.Validator.*;
public class TakerProcessRequestSellerDepositPaymentMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerProcessRequestSellerDepositPaymentMessage.class);
public TakerProcessRequestSellerDepositPaymentMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade);
}
@Override
protected void doRun() {
try {
RequestPayDepositMessage message = (RequestPayDepositMessage) processModel.getTradeMessage();
checkTradeId(processModel.getId(), message);
checkNotNull(message);
processModel.tradingPeer.setConnectedOutputsForAllInputs(checkNotNull(message.buyerConnectedOutputsForAllInputs));
checkArgument(message.buyerConnectedOutputsForAllInputs.size() > 0);
processModel.tradingPeer.setOutputs(checkNotNull(message.buyerOutputs));
processModel.tradingPeer.setTradeWalletPubKey(checkNotNull(message.buyerTradeWalletPubKey));
processModel.tradingPeer.setP2pSigPubKey(checkNotNull(message.buyerP2PSigPublicKey));
processModel.tradingPeer.setP2pEncryptPubKey(checkNotNull(message.buyerP2PEncryptPublicKey));
processModel.tradingPeer.setFiatAccount(checkNotNull(message.buyerFiatAccount));
processModel.tradingPeer.setAccountId(nonEmptyStringOf(message.buyerAccountId));
complete();
} catch (Throwable t) {
t.printStackTrace();
trade.setThrowable(t);
failed(t);
}
}
}

View file

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

View file

@ -15,7 +15,7 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.seller.taker.tasks; package io.bitsquare.trade.protocol.trade.seller.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.Contract; import io.bitsquare.trade.Contract;
@ -26,33 +26,33 @@ import io.bitsquare.util.Utilities;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class TakerCreatesAndSignContract extends TradeTask { public class SellerCreatesAndSignsContract extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerCreatesAndSignContract.class); private static final Logger log = LoggerFactory.getLogger(SellerCreatesAndSignsContract.class);
public TakerCreatesAndSignContract(TaskRunner taskHandler, Trade trade) { public SellerCreatesAndSignsContract(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@Override @Override
protected void doRun() { protected void doRun() {
try { try {
assert processModel.getTakeOfferFeeTx() != null; assert processModel.getTakeOfferFeeTxId() != null;
Contract contract = new Contract( Contract contract = new Contract(
processModel.getOffer(), processModel.getOffer(),
model.getTradeAmount(), model.getTradeAmount(),
processModel.getTakeOfferFeeTx().getHashAsString(), processModel.getTakeOfferFeeTxId(),
processModel.tradingPeer.getAccountId(), processModel.tradingPeer.getAccountId(),
processModel.getAccountId(), processModel.getAccountId(),
processModel.tradingPeer.getFiatAccount(), processModel.tradingPeer.getFiatAccount(),
processModel.getFiatAccount(), processModel.getFiatAccount(),
processModel.getOffer().getP2PSigPubKey(), processModel.tradingPeer.getP2PSigPubKey(),
processModel.getP2pSigPubKey()); processModel.getP2pSigPubKey());
String contractAsJson = Utilities.objectToJson(contract); String contractAsJson = Utilities.objectToJson(contract);
String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(), contractAsJson); String signature = processModel.getSignatureService().signMessage(processModel.getRegistrationKeyPair(), contractAsJson);
model.setContract(contract); model.setContract(contract);
model.setContractAsJson(contractAsJson); model.setContractAsJson(contractAsJson);
model.setTakerContractSignature(signature); model.setSellerContractSignature(signature);
complete(); complete();
} catch (Throwable t) { } catch (Throwable t) {

View file

@ -15,7 +15,7 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.seller.taker.tasks; package io.bitsquare.trade.protocol.trade.seller.tasks;
import io.bitsquare.btc.FeePolicy; import io.bitsquare.btc.FeePolicy;
import io.bitsquare.btc.TradeWalletService; import io.bitsquare.btc.TradeWalletService;
@ -28,10 +28,10 @@ import org.bitcoinj.core.Coin;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class TakerCreatesAndSignsDepositTx extends TradeTask { public class SellerCreatesAndSignsDepositTx extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(TakerCreatesAndSignsDepositTx.class); private static final Logger log = LoggerFactory.getLogger(SellerCreatesAndSignsDepositTx.class);
public TakerCreatesAndSignsDepositTx(TaskRunner taskHandler, Trade trade) { public SellerCreatesAndSignsDepositTx(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@ -52,6 +52,7 @@ public class TakerCreatesAndSignsDepositTx extends TradeTask {
processModel.getTradeWalletPubKey(), processModel.getTradeWalletPubKey(),
processModel.getArbitratorPubKey()); processModel.getArbitratorPubKey());
processModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs()); processModel.setConnectedOutputsForAllInputs(result.getConnectedOutputsForAllInputs());
processModel.setPreparedDepositTx(result.getDepositTx()); processModel.setPreparedDepositTx(result.getDepositTx());

View file

@ -15,15 +15,18 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.seller.offerer.tasks; package io.bitsquare.trade.protocol.trade.seller.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.BuyerAsOffererTrade; import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.BuyerAsTakerTrade;
import io.bitsquare.trade.SellerAsOffererTrade; import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.SellerAsTakerTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage; import io.bitsquare.trade.protocol.trade.messages.DepositTxPublishedMessage;
import io.bitsquare.trade.states.OffererState; import io.bitsquare.trade.states.OffererState;
import io.bitsquare.trade.states.TakerState;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -31,10 +34,10 @@ import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static io.bitsquare.util.Validator.checkTradeId; import static io.bitsquare.util.Validator.checkTradeId;
public class OffererProcessDepositTxPublishedMessage extends TradeTask { public class SellerProcessDepositTxPublishedMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererProcessDepositTxPublishedMessage.class); private static final Logger log = LoggerFactory.getLogger(SellerProcessDepositTxPublishedMessage.class);
public OffererProcessDepositTxPublishedMessage(TaskRunner taskHandler, Trade trade) { public SellerProcessDepositTxPublishedMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@ -47,10 +50,10 @@ public class OffererProcessDepositTxPublishedMessage extends TradeTask {
trade.setDepositTx(checkNotNull(message.depositTx)); trade.setDepositTx(checkNotNull(message.depositTx));
if (trade instanceof BuyerAsOffererTrade) if (trade instanceof BuyerAsOffererTrade || trade instanceof SellerAsOffererTrade)
trade.setProcessState(OffererState.ProcessState.DEPOSIT_PUBLISHED);
else if (trade instanceof SellerAsOffererTrade)
trade.setProcessState(OffererState.ProcessState.DEPOSIT_PUBLISHED); trade.setProcessState(OffererState.ProcessState.DEPOSIT_PUBLISHED);
else if (trade instanceof BuyerAsTakerTrade || trade instanceof SellerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.DEPOSIT_PUBLISHED);
complete(); complete();
} catch (Throwable t) { } catch (Throwable t) {

View file

@ -15,15 +15,18 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.seller.offerer.tasks; package io.bitsquare.trade.protocol.trade.seller.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.BuyerAsOffererTrade; import io.bitsquare.trade.BuyerAsOffererTrade;
import io.bitsquare.trade.BuyerAsTakerTrade;
import io.bitsquare.trade.SellerAsOffererTrade; import io.bitsquare.trade.SellerAsOffererTrade;
import io.bitsquare.trade.SellerAsTakerTrade;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.protocol.trade.TradeTask; import io.bitsquare.trade.protocol.trade.TradeTask;
import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage; import io.bitsquare.trade.protocol.trade.messages.FiatTransferStartedMessage;
import io.bitsquare.trade.states.OffererState; import io.bitsquare.trade.states.OffererState;
import io.bitsquare.trade.states.TakerState;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -31,10 +34,10 @@ import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static io.bitsquare.util.Validator.*; import static io.bitsquare.util.Validator.*;
public class OffererProcessFiatTransferStartedMessage extends TradeTask { public class SellerProcessFiatTransferStartedMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererProcessFiatTransferStartedMessage.class); private static final Logger log = LoggerFactory.getLogger(SellerProcessFiatTransferStartedMessage.class);
public OffererProcessFiatTransferStartedMessage(TaskRunner taskHandler, Trade trade) { public SellerProcessFiatTransferStartedMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }
@ -50,10 +53,10 @@ public class OffererProcessFiatTransferStartedMessage extends TradeTask {
processModel.tradingPeer.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.buyerPayoutAmount))); processModel.tradingPeer.setPayoutAmount(positiveCoinOf(nonZeroCoinOf(message.buyerPayoutAmount)));
processModel.tradingPeer.setPayoutAddressString(nonEmptyStringOf(message.buyerPayoutAddress)); processModel.tradingPeer.setPayoutAddressString(nonEmptyStringOf(message.buyerPayoutAddress));
if (trade instanceof BuyerAsOffererTrade) if (trade instanceof BuyerAsOffererTrade || trade instanceof SellerAsOffererTrade)
trade.setProcessState(OffererState.ProcessState.FIAT_PAYMENT_STARTED);
else if (trade instanceof SellerAsOffererTrade)
trade.setProcessState(OffererState.ProcessState.FIAT_PAYMENT_STARTED); trade.setProcessState(OffererState.ProcessState.FIAT_PAYMENT_STARTED);
else if (trade instanceof BuyerAsTakerTrade || trade instanceof SellerAsTakerTrade)
trade.setProcessState(TakerState.ProcessState.FIAT_PAYMENT_STARTED);
complete(); complete();
} catch (Throwable t) { } catch (Throwable t) {

View file

@ -15,7 +15,7 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/ */
package io.bitsquare.trade.protocol.trade.seller.offerer.tasks; package io.bitsquare.trade.protocol.trade.seller.tasks;
import io.bitsquare.common.taskrunner.TaskRunner; import io.bitsquare.common.taskrunner.TaskRunner;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
@ -28,10 +28,10 @@ import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.*; import static com.google.common.base.Preconditions.*;
import static io.bitsquare.util.Validator.*; import static io.bitsquare.util.Validator.*;
public class OffererProcessRequestPayDepositFromOffererMessage extends TradeTask { public class SellerProcessRequestPayDepositMessage extends TradeTask {
private static final Logger log = LoggerFactory.getLogger(OffererProcessRequestPayDepositFromOffererMessage.class); private static final Logger log = LoggerFactory.getLogger(SellerProcessRequestPayDepositMessage.class);
public OffererProcessRequestPayDepositFromOffererMessage(TaskRunner taskHandler, Trade trade) { public SellerProcessRequestPayDepositMessage(TaskRunner taskHandler, Trade trade) {
super(taskHandler, trade); super(taskHandler, trade);
} }

View file

@ -55,6 +55,7 @@ public class TradingPeer implements Serializable {
private byte[] signature; private byte[] signature;
private String contractAsJson; private String contractAsJson;
private String contractSignature; private String contractSignature;
private PublicKey p2PSigPubKey;
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
@ -197,4 +198,12 @@ public class TradingPeer implements Serializable {
", contractSignature='" + contractSignature + '\'' + ", contractSignature='" + contractSignature + '\'' +
'}'; '}';
} }
public PublicKey getP2PSigPubKey() {
return p2PSigPubKey;
}
public void setP2PSigPubKey(PublicKey p2PSigPubKey) {
this.p2PSigPubKey = p2PSigPubKey;
}
} }