mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-04-06 21:13:59 -04:00
Use Transaction instead of hex string for trade process
This commit is contained in:
parent
72ded8ad90
commit
1f041c520a
@ -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");
|
||||
|
@ -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,
|
||||
|
@ -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() {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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() {
|
@ -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();
|
@ -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() {
|
@ -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(),
|
||||
|
@ -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() {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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();
|
Loading…
x
Reference in New Issue
Block a user