Use Transaction instead of hex string for trade process

This commit is contained in:
Manfred Karrer 2015-03-14 20:19:47 +01:00
parent 72ded8ad90
commit 1f041c520a
12 changed files with 105 additions and 114 deletions

View File

@ -602,11 +602,11 @@ public class WalletService {
// 1. step: deposit tx
// Offerer creates the 2of3 multiSig deposit tx with his unsigned input and change output
public Transaction offererCreatesMSTxAndAddPayment(Coin offererInputAmount,
byte[] offererPubKey,
byte[] takerPubKey,
byte[] arbitratorPubKey,
String tradeId) throws InsufficientMoneyException {
public Transaction prepareDepositTx(Coin offererInputAmount,
byte[] offererPubKey,
byte[] takerPubKey,
byte[] arbitratorPubKey,
String tradeId) throws InsufficientMoneyException {
log.debug("offererCreatesMSTxAndAddPayment");
log.trace("inputs: ");
log.trace("offererInputAmount=" + offererInputAmount.toFriendlyString());
@ -640,7 +640,8 @@ public class WalletService {
// The completeTx() call signs the input, but we don't want to pass over a signed tx so we remove the
// signature to make sure the tx is invalid for publishing
tx.getInput(0).setScriptSig(new Script(new byte[]{}));
// We have exactly 1 input as our spending transaction output is from the create offer fee payment and has only 1 output
tx.getInputs().get(0).setScriptSig(new Script(new byte[]{}));
log.trace("verify tx");
tx.verify();
@ -660,13 +661,12 @@ public class WalletService {
// 2. step: deposit tx
// Taker adds his input and change output, changes the multiSig amount to the correct value and sign his input
public Transaction takerAddPaymentAndSignTx(Coin takerInputAmount,
Coin msOutputAmount,
byte[] offererPubKey,
byte[] takerPubKey,
byte[] arbitratorPubKey,
String offerersPartialDepositTxAsHex,
Transaction preparedDepositTransaction,
String tradeId) throws InsufficientMoneyException {
log.debug("takerAddPaymentAndSignTx");
log.trace("inputs: ");
@ -675,7 +675,7 @@ public class WalletService {
log.trace("offererPubKey=" + offererPubKey);
log.trace("takerPubKey=" + takerPubKey);
log.trace("arbitratorPubKey=" + arbitratorPubKey);
log.trace("offerersPartialDepositTxAsHex=" + offerersPartialDepositTxAsHex);
log.trace("preparedDepositTransaction=" + preparedDepositTransaction);
log.trace("tradeId=" + tradeId);
// We pay the btc tx fee 2 times to the deposit tx:
@ -710,10 +710,8 @@ public class WalletService {
OUT[1] Optional change = input taker - takerInputAmount - fee btc tx fee
*/
// Now we construct the real 2of3 multiSig tx from the serialized offerers tx
Transaction tx = new Transaction(params, Utils.parseAsHexOrBase58(offerersPartialDepositTxAsHex));
log.trace("offerersPartialDepositTx=" + tx);
Transaction tx = new Transaction(params, preparedDepositTransaction.bitcoinSerialize());
// The serialized offerers tx looks like:
/*
@ -724,15 +722,14 @@ public class WalletService {
*/
// Now we add the inputs and outputs from our temp tx and change the multiSig amount to the correct value
// TODO multiple inputs not supported yet
tx.addInput(tempTx.getInput(0));
for (TransactionInput input : tempTx.getInputs()) {
tx.addInput(input);
}
// handle optional change output
if (tempTx.getOutputs().size() == 2) {
tx.addOutput(tempTx.getOutput(1));
}
// We add the btc tx fee to the msOutputAmount and apply the change to the multiSig output
msOutputAmount = msOutputAmount.add(FeePolicy.TX_FEE);
tx.getOutput(0).setValue(msOutputAmount);
// Now we sign our input (index 1)
@ -782,8 +779,7 @@ public class WalletService {
// 3. step: deposit tx
// Offerer signs tx and publishes it
public void offererSignAndPublishTx(String offerersFirstTxAsHex,
public void offererSignAndPublishTx(Transaction preparedDepositTx,
String takersSignedTxAsHex,
String takersSignedConnOutAsHex,
String takersSignedScriptSigAsHex,
@ -792,7 +788,7 @@ public class WalletService {
FutureCallback<Transaction> callback) {
log.debug("offererSignAndPublishTx");
log.trace("inputs: ");
log.trace("offerersFirstTxAsHex=" + offerersFirstTxAsHex);
log.trace("preparedDepositTx=" + preparedDepositTx);
log.trace("takersSignedTxAsHex=" + takersSignedTxAsHex);
log.trace("takersSignedConnOutAsHex=" + takersSignedConnOutAsHex);
log.trace("takersSignedScriptSigAsHex=" + takersSignedScriptSigAsHex);
@ -803,7 +799,7 @@ public class WalletService {
Transaction tx = new Transaction(params);
// offerers first tx
Transaction offerersFirstTx = new Transaction(params, Utils.parseAsHexOrBase58(offerersFirstTxAsHex));
Transaction offerersFirstTx = new Transaction(params, preparedDepositTx.bitcoinSerialize());
printInputs("offerersFirstTx", offerersFirstTx);
log.trace("offerersFirstTx = " + offerersFirstTx);
@ -1040,16 +1036,6 @@ public class WalletService {
return ScriptBuilder.createMultiSigOutputScript(2, keys);
}
private Script getMultiSigScript(String offererPubKey, String takerPubKey, String arbitratorPubKey) {
ECKey offererKey = ECKey.fromPublicOnly(Utils.parseAsHexOrBase58(offererPubKey));
ECKey takerKey = ECKey.fromPublicOnly(Utils.parseAsHexOrBase58(takerPubKey));
ECKey arbitratorKey = ECKey.fromPublicOnly(Utils.parseAsHexOrBase58(arbitratorPubKey));
List<ECKey> keys = ImmutableList.of(offererKey, takerKey, arbitratorKey);
return ScriptBuilder.createMultiSigOutputScript(2, keys);
}
private Transaction createPayoutTx(String depositTxAsHex, Coin offererPaybackAmount, Coin takerPaybackAmount,
String offererAddress, String takerAddress) throws AddressFormatException {
log.trace("createPayoutTx");

View File

@ -26,7 +26,7 @@ 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.offerer.BuyerAsOffererProtocol;
import io.bitsquare.trade.protocol.trade.offerer.tasks.CreateDepositTx;
import io.bitsquare.trade.protocol.trade.offerer.tasks.PrepareDepositTx;
import io.bitsquare.trade.protocol.trade.offerer.tasks.ProcessPayoutTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.offerer.tasks.ProcessRequestOffererPublishDepositTxMessage;
import io.bitsquare.trade.protocol.trade.offerer.tasks.ProcessRequestTakeOfferMessage;
@ -34,7 +34,7 @@ import io.bitsquare.trade.protocol.trade.offerer.tasks.ProcessTakeOfferFeePayedM
import io.bitsquare.trade.protocol.trade.offerer.tasks.RespondToTakeOfferRequest;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SendBankTransferInitedMessage;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SendDepositTxIdToTaker;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SendTakerDepositPaymentRequest;
import io.bitsquare.trade.protocol.trade.offerer.tasks.RequestDepositPayment;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SetupListenerForBlockChainConfirmation;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SignAndPublishDepositTx;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SignPayoutTx;
@ -48,7 +48,7 @@ import io.bitsquare.trade.protocol.trade.taker.tasks.PayTakeOfferFee;
import io.bitsquare.trade.protocol.trade.taker.tasks.ProcessBankTransferInitedMessage;
import io.bitsquare.trade.protocol.trade.taker.tasks.ProcessDepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.taker.tasks.ProcessRespondToTakeOfferRequestMessage;
import io.bitsquare.trade.protocol.trade.taker.tasks.ProcessTakerDepositPaymentRequestMessage;
import io.bitsquare.trade.protocol.trade.taker.tasks.ProcessRequestDepositPaymentMessage;
import io.bitsquare.trade.protocol.trade.taker.tasks.RequestTakeOffer;
import io.bitsquare.trade.protocol.trade.taker.tasks.SendPayoutTxToOfferer;
import io.bitsquare.trade.protocol.trade.taker.tasks.SendSignedTakerDepositTxAsHex;
@ -110,8 +110,8 @@ public class DebugView extends InitializableView {
RespondToTakeOfferRequest.class,
ProcessTakeOfferFeePayedMessage.class,
CreateDepositTx.class,
SendTakerDepositPaymentRequest.class,
PrepareDepositTx.class,
RequestDepositPayment.class,
ProcessRequestOffererPublishDepositTxMessage.class,
VerifyTakerAccount.class,
@ -137,7 +137,7 @@ public class DebugView extends InitializableView {
PayTakeOfferFee.class,
SendTakeOfferFeePayedMessage.class,
ProcessTakerDepositPaymentRequestMessage.class,
ProcessRequestDepositPaymentMessage.class,
VerifyOffererAccount.class,
CreateAndSignContract.class,
PayDeposit.class,

View File

@ -29,6 +29,7 @@ import io.bitsquare.trade.protocol.trade.OfferSharedModel;
import io.bitsquare.user.User;
import org.bitcoinj.core.Coin;
import org.bitcoinj.core.Transaction;
import java.security.PublicKey;
@ -50,7 +51,7 @@ public class BuyerAsOffererModel extends OfferSharedModel {
private Trade trade;
private Peer taker;
private String preparedOffererDepositTxAsHex;
private Transaction preparedDepositTx;
private String depositTxAsHex;
private String takerAccountId;
@ -109,12 +110,12 @@ public class BuyerAsOffererModel extends OfferSharedModel {
return offererPaybackAddress;
}
public String getPreparedOffererDepositTxAsHex() {
return preparedOffererDepositTxAsHex;
public Transaction getPreparedDepositTx() {
return preparedDepositTx;
}
public void setPreparedOffererDepositTxAsHex(String preparedOffererDepositTxAsHex) {
this.preparedOffererDepositTxAsHex = preparedOffererDepositTxAsHex;
public void setPreparedDepositTx(Transaction preparedDepositTx) {
this.preparedDepositTx = preparedDepositTx;
}
public long getOffererTxOutIndex() {

View File

@ -21,15 +21,15 @@ import io.bitsquare.network.Message;
import io.bitsquare.network.Peer;
import io.bitsquare.trade.handlers.MessageHandler;
import io.bitsquare.trade.protocol.trade.TradeMessage;
import io.bitsquare.trade.protocol.trade.offerer.tasks.CreateDepositTx;
import io.bitsquare.trade.protocol.trade.offerer.tasks.PrepareDepositTx;
import io.bitsquare.trade.protocol.trade.offerer.tasks.ProcessPayoutTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.offerer.tasks.ProcessRequestOffererPublishDepositTxMessage;
import io.bitsquare.trade.protocol.trade.offerer.tasks.ProcessRequestTakeOfferMessage;
import io.bitsquare.trade.protocol.trade.offerer.tasks.ProcessTakeOfferFeePayedMessage;
import io.bitsquare.trade.protocol.trade.offerer.tasks.RequestDepositPayment;
import io.bitsquare.trade.protocol.trade.offerer.tasks.RespondToTakeOfferRequest;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SendBankTransferInitedMessage;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SendDepositTxIdToTaker;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SendTakerDepositPaymentRequest;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SetupListenerForBlockChainConfirmation;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SignAndPublishDepositTx;
import io.bitsquare.trade.protocol.trade.offerer.tasks.SignPayoutTx;
@ -110,8 +110,8 @@ public class BuyerAsOffererProtocol {
);
taskRunner.addTasks(
ProcessTakeOfferFeePayedMessage.class,
CreateDepositTx.class,
SendTakerDepositPaymentRequest.class
PrepareDepositTx.class,
RequestDepositPayment.class
);
taskRunner.run();
}
@ -192,21 +192,23 @@ public class BuyerAsOffererProtocol {
TradeMessage tradeMessage = (TradeMessage) message;
nonEmptyStringOf(tradeMessage.getTradeId());
if (tradeMessage instanceof RequestTakeOfferMessage) {
handleRequestTakeOfferMessage((RequestTakeOfferMessage) tradeMessage, peer);
}
else if (tradeMessage instanceof TakeOfferFeePayedMessage) {
handleTakeOfferFeePayedMessage((TakeOfferFeePayedMessage) tradeMessage);
}
if (tradeMessage.getTradeId().equals(model.getOffer().getId())) {
if (tradeMessage instanceof RequestTakeOfferMessage) {
handleRequestTakeOfferMessage((RequestTakeOfferMessage) tradeMessage, peer);
}
else if (tradeMessage instanceof TakeOfferFeePayedMessage) {
handleTakeOfferFeePayedMessage((TakeOfferFeePayedMessage) tradeMessage);
}
else if (tradeMessage instanceof RequestOffererPublishDepositTxMessage) {
handleRequestOffererPublishDepositTxMessage((RequestOffererPublishDepositTxMessage) tradeMessage);
}
else if (tradeMessage instanceof PayoutTxPublishedMessage) {
handlePayoutTxPublishedMessage((PayoutTxPublishedMessage) tradeMessage);
}
else {
log.error("Incoming tradeMessage not supported. " + tradeMessage);
else if (tradeMessage instanceof RequestOffererPublishDepositTxMessage) {
handleRequestOffererPublishDepositTxMessage((RequestOffererPublishDepositTxMessage) tradeMessage);
}
else if (tradeMessage instanceof PayoutTxPublishedMessage) {
handlePayoutTxPublishedMessage((PayoutTxPublishedMessage) tradeMessage);
}
else {
log.error("Incoming tradeMessage not supported. " + tradeMessage);
}
}
}
}

View File

@ -20,26 +20,28 @@ package io.bitsquare.trade.protocol.trade.offerer.messages;
import io.bitsquare.bank.BankAccount;
import io.bitsquare.trade.protocol.trade.TradeMessage;
import org.bitcoinj.core.Transaction;
import java.io.Serializable;
public class TakerDepositPaymentRequestMessage implements Serializable, TradeMessage {
public class RequestDepositPaymentMessage implements Serializable, TradeMessage {
private static final long serialVersionUID = -3988720410493712913L;
private final String tradeId;
private final BankAccount bankAccount;
private final String accountID;
private final byte[] offererPubKey;
private final String preparedOffererDepositTxAsHex;
private final Transaction preparedDepositTx;
private final long offererTxOutIndex;
public TakerDepositPaymentRequestMessage(String tradeId, BankAccount bankAccount, String accountID,
byte[] offererPubKey, String preparedOffererDepositTxAsHex,
long offererTxOutIndex) {
public RequestDepositPaymentMessage(String tradeId, BankAccount bankAccount, String accountID,
byte[] offererPubKey, Transaction preparedDepositTx,
long offererTxOutIndex) {
this.tradeId = tradeId;
this.bankAccount = bankAccount;
this.accountID = accountID;
this.offererPubKey = offererPubKey;
this.preparedOffererDepositTxAsHex = preparedOffererDepositTxAsHex;
this.preparedDepositTx = preparedDepositTx;
this.offererTxOutIndex = offererTxOutIndex;
}
@ -60,8 +62,8 @@ public class TakerDepositPaymentRequestMessage implements Serializable, TradeMes
return offererPubKey;
}
public String getPreparedOffererDepositTxAsHex() {
return preparedOffererDepositTxAsHex;
public Transaction getPreparedDepositTx() {
return preparedDepositTx;
}
public long getOffererTxOutIndex() {

View File

@ -25,36 +25,33 @@ import io.bitsquare.util.taskrunner.TaskRunner;
import org.bitcoinj.core.Coin;
import org.bitcoinj.core.InsufficientMoneyException;
import org.bitcoinj.core.Transaction;
import org.bitcoinj.core.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CreateDepositTx extends Task<BuyerAsOffererModel> {
private static final Logger log = LoggerFactory.getLogger(CreateDepositTx.class);
public class PrepareDepositTx extends Task<BuyerAsOffererModel> {
private static final Logger log = LoggerFactory.getLogger(PrepareDepositTx.class);
public CreateDepositTx(TaskRunner taskHandler, BuyerAsOffererModel model) {
public PrepareDepositTx(TaskRunner taskHandler, BuyerAsOffererModel model) {
super(taskHandler, model);
}
@Override
protected void doRun() {
try {
byte[] offererPubKey = model.getWalletService().getAddressInfo(model.getTrade().getId()).getPubKey();
Coin offererInputAmount = model.getTrade().getSecurityDeposit().add(FeePolicy.TX_FEE);
Transaction transaction = model.getWalletService().offererCreatesMSTxAndAddPayment(
Transaction transaction = model.getWalletService().prepareDepositTx(
offererInputAmount,
offererPubKey,
model.getTakerPubKey(),
model.getArbitratorPubKey(),
model.getTrade().getId());
String preparedOffererDepositTxAsHex = Utils.HEX.encode(transaction.bitcoinSerialize());
long offererTxOutIndex = transaction.getInput(0).getOutpoint().getIndex();
model.setOffererPubKey(offererPubKey);
model.setPreparedOffererDepositTxAsHex(preparedOffererDepositTxAsHex);
model.setPreparedDepositTx(transaction);
model.setOffererTxOutIndex(offererTxOutIndex);
complete();

View File

@ -19,28 +19,28 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks;
import io.bitsquare.trade.listeners.SendMessageListener;
import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel;
import io.bitsquare.trade.protocol.trade.offerer.messages.TakerDepositPaymentRequestMessage;
import io.bitsquare.trade.protocol.trade.offerer.messages.RequestDepositPaymentMessage;
import io.bitsquare.util.taskrunner.Task;
import io.bitsquare.util.taskrunner.TaskRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SendTakerDepositPaymentRequest extends Task<BuyerAsOffererModel> {
private static final Logger log = LoggerFactory.getLogger(SendTakerDepositPaymentRequest.class);
public class RequestDepositPayment extends Task<BuyerAsOffererModel> {
private static final Logger log = LoggerFactory.getLogger(RequestDepositPayment.class);
public SendTakerDepositPaymentRequest(TaskRunner taskHandler, BuyerAsOffererModel model) {
public RequestDepositPayment(TaskRunner taskHandler, BuyerAsOffererModel model) {
super(taskHandler, model);
}
@Override
protected void doRun() {
TakerDepositPaymentRequestMessage tradeMessage = new TakerDepositPaymentRequestMessage(
RequestDepositPaymentMessage tradeMessage = new RequestDepositPaymentMessage(
model.getTrade().getId(),
model.getBankAccount(),
model.getAccountId(),
model.getOffererPubKey(),
model.getPreparedOffererDepositTxAsHex(),
model.getPreparedDepositTx(),
model.getOffererTxOutIndex());
model.getTradeMessageService().sendMessage(model.getTaker(), tradeMessage, new SendMessageListener() {

View File

@ -41,7 +41,7 @@ public class SignAndPublishDepositTx extends Task<BuyerAsOffererModel> {
@Override
protected void doRun() {
try {
model.getWalletService().offererSignAndPublishTx(model.getPreparedOffererDepositTxAsHex(),
model.getWalletService().offererSignAndPublishTx(model.getPreparedDepositTx(),
model.getSignedTakerDepositTxAsHex(),
model.getTxConnOutAsHex(),
model.getTxScriptSigAsHex(),

View File

@ -40,7 +40,7 @@ public class SellerAsTakerModel extends OfferSharedModel {
// written/read by task
private Peer offerer;
private String preparedOffererDepositTxAsHex;
private Transaction preparedDepositTx;
private String depositTxAsHex;
private Transaction signedTakerDepositTx;
private Transaction payoutTx;
@ -107,12 +107,12 @@ public class SellerAsTakerModel extends OfferSharedModel {
this.offererPubKey = offererPubKey;
}
public String getPreparedOffererDepositTxAsHex() {
return preparedOffererDepositTxAsHex;
public Transaction getPreparedDepositTx() {
return preparedDepositTx;
}
public void setPreparedOffererDepositTxAsHex(String preparedOffererDepositTxAsHex) {
this.preparedOffererDepositTxAsHex = preparedOffererDepositTxAsHex;
public void setPreparedDepositTx(Transaction preparedDepositTx) {
this.preparedDepositTx = preparedDepositTx;
}
public long getOffererTxOutIndex() {

View File

@ -24,16 +24,16 @@ import io.bitsquare.trade.handlers.MessageHandler;
import io.bitsquare.trade.protocol.trade.TradeMessage;
import io.bitsquare.trade.protocol.trade.offerer.messages.BankTransferStartedMessage;
import io.bitsquare.trade.protocol.trade.offerer.messages.DepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.offerer.messages.RequestDepositPaymentMessage;
import io.bitsquare.trade.protocol.trade.offerer.messages.RespondToTakeOfferRequestMessage;
import io.bitsquare.trade.protocol.trade.offerer.messages.TakerDepositPaymentRequestMessage;
import io.bitsquare.trade.protocol.trade.taker.tasks.CreateAndSignContract;
import io.bitsquare.trade.protocol.trade.taker.tasks.GetPeerAddress;
import io.bitsquare.trade.protocol.trade.taker.tasks.PayDeposit;
import io.bitsquare.trade.protocol.trade.taker.tasks.PayTakeOfferFee;
import io.bitsquare.trade.protocol.trade.taker.tasks.ProcessBankTransferInitedMessage;
import io.bitsquare.trade.protocol.trade.taker.tasks.ProcessDepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.taker.tasks.ProcessRequestDepositPaymentMessage;
import io.bitsquare.trade.protocol.trade.taker.tasks.ProcessRespondToTakeOfferRequestMessage;
import io.bitsquare.trade.protocol.trade.taker.tasks.ProcessTakerDepositPaymentRequestMessage;
import io.bitsquare.trade.protocol.trade.taker.tasks.RequestTakeOffer;
import io.bitsquare.trade.protocol.trade.taker.tasks.SendPayoutTxToOfferer;
import io.bitsquare.trade.protocol.trade.taker.tasks.SendSignedTakerDepositTxAsHex;
@ -114,7 +114,7 @@ public class SellerAsTakerProtocol {
taskRunner.run();
}
private void handleTakerDepositPaymentRequestMessage(TakerDepositPaymentRequestMessage tradeMessage) {
private void handleRequestDepositPaymentMessage(RequestDepositPaymentMessage tradeMessage) {
model.setTradeMessage(tradeMessage);
SellerAsTakerTaskRunner<SellerAsTakerModel> taskRunner = new SellerAsTakerTaskRunner<>(model,
@ -126,7 +126,7 @@ public class SellerAsTakerProtocol {
}
);
taskRunner.addTasks(
ProcessTakerDepositPaymentRequestMessage.class,
ProcessRequestDepositPaymentMessage.class,
VerifyOffererAccount.class,
CreateAndSignContract.class,
PayDeposit.class,
@ -201,21 +201,23 @@ public class SellerAsTakerProtocol {
if (message instanceof TradeMessage) {
TradeMessage tradeMessage = (TradeMessage) message;
nonEmptyStringOf(tradeMessage.getTradeId());
if (tradeMessage instanceof RespondToTakeOfferRequestMessage) {
handleRespondToTakeOfferRequestMessage((RespondToTakeOfferRequestMessage) tradeMessage);
}
else if (tradeMessage instanceof TakerDepositPaymentRequestMessage) {
handleTakerDepositPaymentRequestMessage((TakerDepositPaymentRequestMessage) tradeMessage);
}
else if (tradeMessage instanceof DepositTxPublishedMessage) {
handleDepositTxPublishedMessage((DepositTxPublishedMessage) tradeMessage);
}
else if (tradeMessage instanceof BankTransferStartedMessage) {
handleBankTransferInitedMessage((BankTransferStartedMessage) tradeMessage);
}
else {
log.error("Incoming message not supported. " + tradeMessage);
if (tradeMessage.getTradeId().equals(model.getOffer().getId())) {
if (tradeMessage instanceof RespondToTakeOfferRequestMessage) {
handleRespondToTakeOfferRequestMessage((RespondToTakeOfferRequestMessage) tradeMessage);
}
else if (tradeMessage instanceof RequestDepositPaymentMessage) {
handleRequestDepositPaymentMessage((RequestDepositPaymentMessage) tradeMessage);
}
else if (tradeMessage instanceof DepositTxPublishedMessage) {
handleDepositTxPublishedMessage((DepositTxPublishedMessage) tradeMessage);
}
else if (tradeMessage instanceof BankTransferStartedMessage) {
handleBankTransferInitedMessage((BankTransferStartedMessage) tradeMessage);
}
else {
log.error("Incoming message not supported. " + tradeMessage);
}
}
}
}

View File

@ -17,6 +17,7 @@
package io.bitsquare.trade.protocol.trade.taker.tasks;
import io.bitsquare.btc.FeePolicy;
import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel;
import io.bitsquare.util.taskrunner.Task;
import io.bitsquare.util.taskrunner.TaskRunner;
@ -39,14 +40,14 @@ public class PayDeposit extends Task<SellerAsTakerModel> {
protected void doRun() {
try {
Coin amountToPay = model.getTrade().getTradeAmount().add(model.getTrade().getSecurityDeposit());
Coin msOutputAmount = amountToPay.add(model.getTrade().getSecurityDeposit());
Coin msOutputAmount = amountToPay.add(model.getTrade().getSecurityDeposit()).add(FeePolicy.TX_FEE);
Transaction signedTakerDepositTx = model.getWalletService().takerAddPaymentAndSignTx(
amountToPay,
msOutputAmount,
model.getOffererPubKey(),
model.getTakerPubKey(),
model.getArbitratorPubKey(),
model.getPreparedOffererDepositTxAsHex(),
model.getPreparedDepositTx(),
model.getTrade().getId());
model.setSignedTakerDepositTx(signedTakerDepositTx);

View File

@ -17,7 +17,7 @@
package io.bitsquare.trade.protocol.trade.taker.tasks;
import io.bitsquare.trade.protocol.trade.offerer.messages.TakerDepositPaymentRequestMessage;
import io.bitsquare.trade.protocol.trade.offerer.messages.RequestDepositPaymentMessage;
import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel;
import io.bitsquare.util.taskrunner.Task;
import io.bitsquare.util.taskrunner.TaskRunner;
@ -28,10 +28,10 @@ import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
import static io.bitsquare.util.Validator.*;
public class ProcessTakerDepositPaymentRequestMessage extends Task<SellerAsTakerModel> {
private static final Logger log = LoggerFactory.getLogger(ProcessTakerDepositPaymentRequestMessage.class);
public class ProcessRequestDepositPaymentMessage extends Task<SellerAsTakerModel> {
private static final Logger log = LoggerFactory.getLogger(ProcessRequestDepositPaymentMessage.class);
public ProcessTakerDepositPaymentRequestMessage(TaskRunner taskHandler, SellerAsTakerModel model) {
public ProcessRequestDepositPaymentMessage(TaskRunner taskHandler, SellerAsTakerModel model) {
super(taskHandler, model);
}
@ -39,11 +39,11 @@ public class ProcessTakerDepositPaymentRequestMessage extends Task<SellerAsTaker
protected void doRun() {
try {
checkTradeId(model.getTrade().getId(), model.getTradeMessage());
TakerDepositPaymentRequestMessage message = (TakerDepositPaymentRequestMessage) model.getTradeMessage();
RequestDepositPaymentMessage message = (RequestDepositPaymentMessage) model.getTradeMessage();
model.setTakerAccountId(nonEmptyStringOf(message.getAccountId()));
model.setTakerBankAccount(checkNotNull(message.getBankAccount()));
model.setOffererPubKeyAsHex(checkNotNull(message.getOffererPubKey()));
model.setPreparedOffererDepositTxAsHex(nonEmptyStringOf(message.getPreparedOffererDepositTxAsHex()));
model.setPreparedDepositTx(checkNotNull(message.getPreparedDepositTx()));
model.setOffererTxOutIndex(nonNegativeLongOf(message.getOffererTxOutIndex()));
complete();