diff --git a/core/src/main/java/io/bitsquare/btc/WalletService.java b/core/src/main/java/io/bitsquare/btc/WalletService.java index 93b8556977..77c4c9dbe9 100644 --- a/core/src/main/java/io/bitsquare/btc/WalletService.java +++ b/core/src/main/java/io/bitsquare/btc/WalletService.java @@ -601,12 +601,12 @@ public class WalletService { /////////////////////////////////////////////////////////////////////////////////////////// // 1. step: deposit tx - // Offerer creates the 2of3 multiSig deposit tx with his unsigned input and change output - public Transaction prepareDepositTx(Coin offererInputAmount, - byte[] offererPubKey, - byte[] takerPubKey, - byte[] arbitratorPubKey, - String tradeId) throws InsufficientMoneyException { + // Offerer creates the temporary 2of3 multiSig deposit tx with his unsigned input and change output + public Transaction offererPreparesDepositTx(Coin offererInputAmount, + String tradeId, + byte[] offererPubKey, + byte[] takerPubKey, + byte[] arbitratorPubKey) throws InsufficientMoneyException { log.debug("offererCreatesMSTxAndAddPayment"); log.trace("inputs: "); log.trace("offererInputAmount=" + offererInputAmount.toFriendlyString()); @@ -656,6 +656,7 @@ public class WalletService { log.trace("Check if wallet is consistent: result=" + wallet.isConsistent()); printInputs("offererCreatesMSTxAndAddPayment", tx); log.debug("tx = " + tx); + return tx; } @@ -663,11 +664,11 @@ public class WalletService { // 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, + Transaction preparedDepositTx, + String tradeId, byte[] offererPubKey, byte[] takerPubKey, - byte[] arbitratorPubKey, - Transaction preparedDepositTransaction, - String tradeId) throws InsufficientMoneyException { + byte[] arbitratorPubKey) throws InsufficientMoneyException { log.debug("takerAddPaymentAndSignTx"); log.trace("inputs: "); log.trace("takerInputAmount=" + takerInputAmount.toFriendlyString()); @@ -675,7 +676,7 @@ public class WalletService { log.trace("offererPubKey=" + offererPubKey); log.trace("takerPubKey=" + takerPubKey); log.trace("arbitratorPubKey=" + arbitratorPubKey); - log.trace("preparedDepositTransaction=" + preparedDepositTransaction); + log.trace("preparedDepositTransaction=" + preparedDepositTx); log.trace("tradeId=" + tradeId); // We pay the btc tx fee 2 times to the deposit tx: @@ -711,7 +712,7 @@ public class WalletService { */ // Now we construct the real 2of3 multiSig tx from the serialized offerers tx - Transaction tx = new Transaction(params, preparedDepositTransaction.bitcoinSerialize()); + Transaction tx = new Transaction(params, preparedDepositTx.bitcoinSerialize()); // The serialized offerers tx looks like: /* @@ -780,7 +781,7 @@ public class WalletService { // 3. step: deposit tx // Offerer signs tx and publishes it public void offererSignAndPublishTx(Transaction preparedDepositTx, - String takersSignedTxAsHex, + Transaction takersSignedDepositTx, String takersSignedConnOutAsHex, String takersSignedScriptSigAsHex, long offererTxOutIndex, @@ -789,7 +790,7 @@ public class WalletService { log.debug("offererSignAndPublishTx"); log.trace("inputs: "); log.trace("preparedDepositTx=" + preparedDepositTx); - log.trace("takersSignedTxAsHex=" + takersSignedTxAsHex); + log.trace("takersSignedTxAsHex=" + takersSignedDepositTx); log.trace("takersSignedConnOutAsHex=" + takersSignedConnOutAsHex); log.trace("takersSignedScriptSigAsHex=" + takersSignedScriptSigAsHex); log.trace("callback=" + callback); @@ -806,21 +807,16 @@ public class WalletService { // add input Transaction offerersFirstTxConnOut = wallet.getTransaction(offerersFirstTx.getInput(0).getOutpoint().getHash()); - TransactionOutPoint offerersFirstTxOutPoint = - new TransactionOutPoint(params, offererTxOutIndex, offerersFirstTxConnOut); - //TransactionInput offerersFirstTxInput = new TransactionInput(params, tx, - // offerersFirstTx.getInput(0).getScriptBytes(), offerersFirstTxOutPoint); // pass that around! - // getScriptBytes = - // empty bytes array + TransactionOutPoint offerersFirstTxOutPoint = new TransactionOutPoint(params, offererTxOutIndex, offerersFirstTxConnOut); TransactionInput offerersFirstTxInput = new TransactionInput(params, tx, new byte[]{}, offerersFirstTxOutPoint); offerersFirstTxInput.setParent(tx); tx.addInput(offerersFirstTxInput); // takers signed tx - Transaction takersSignedTx = new Transaction(params, Utils.parseAsHexOrBase58(takersSignedTxAsHex)); + takersSignedDepositTx = new Transaction(params, takersSignedDepositTx.bitcoinSerialize()); - printInputs("takersSignedTxInput", takersSignedTx); - log.trace("takersSignedTx = " + takersSignedTx); + printInputs("takersSignedTxInput", takersSignedDepositTx); + log.trace("takersSignedTx = " + takersSignedDepositTx); // add input Transaction takersSignedTxConnOut = new Transaction(params, Utils.parseAsHexOrBase58(takersSignedConnOutAsHex)); @@ -831,14 +827,13 @@ public class WalletService { takersSignedTxInput.setParent(tx); tx.addInput(takersSignedTxInput); - //TODO onResult non change output cases // add outputs from takers tx, they are already correct - tx.addOutput(takersSignedTx.getOutput(0)); - if (takersSignedTx.getOutputs().size() > 1) { - tx.addOutput(takersSignedTx.getOutput(1)); + tx.addOutput(takersSignedDepositTx.getOutput(0)); + if (takersSignedDepositTx.getOutputs().size() > 1) { + tx.addOutput(takersSignedDepositTx.getOutput(1)); } - if (takersSignedTx.getOutputs().size() == 3) { - tx.addOutput(takersSignedTx.getOutput(2)); + if (takersSignedDepositTx.getOutputs().size() == 3) { + tx.addOutput(takersSignedDepositTx.getOutput(2)); } printInputs("tx", tx); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererModel.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererModel.java index f1ed313bbf..3a6d9c943a 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererModel.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererModel.java @@ -59,7 +59,7 @@ public class BuyerAsOffererModel extends OfferSharedModel { private PublicKey takerMessagePublicKey; private String takerContractAsJson; - private String signedTakerDepositTxAsHex; + private Transaction takersSignedDepositTx; private String txConnOutAsHex; private String txScriptSigAsHex; @@ -178,12 +178,12 @@ public class BuyerAsOffererModel extends OfferSharedModel { this.takerContractAsJson = takerContractAsJson; } - public String getSignedTakerDepositTxAsHex() { - return signedTakerDepositTxAsHex; + public Transaction getTakersSignedDepositTx() { + return takersSignedDepositTx; } - public void setSignedTakerDepositTxAsHex(String signedTakerDepositTxAsHex) { - this.signedTakerDepositTxAsHex = signedTakerDepositTxAsHex; + public void setTakersSignedDepositTx(Transaction takersSignedDepositTx) { + this.takersSignedDepositTx = takersSignedDepositTx; } public String getTxConnOutAsHex() { diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/PrepareDepositTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/PrepareDepositTx.java index f20fc0eb5d..24a0a3131e 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/PrepareDepositTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/PrepareDepositTx.java @@ -41,12 +41,12 @@ public class PrepareDepositTx extends Task { try { byte[] offererPubKey = model.getWalletService().getAddressInfo(model.getTrade().getId()).getPubKey(); Coin offererInputAmount = model.getTrade().getSecurityDeposit().add(FeePolicy.TX_FEE); - Transaction transaction = model.getWalletService().prepareDepositTx( + Transaction transaction = model.getWalletService().offererPreparesDepositTx( offererInputAmount, + model.getTrade().getId(), offererPubKey, model.getTakerPubKey(), - model.getArbitratorPubKey(), - model.getTrade().getId()); + model.getArbitratorPubKey()); long offererTxOutIndex = transaction.getInput(0).getOutpoint().getIndex(); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java index 479d30d505..0f1739ca27 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java @@ -46,7 +46,7 @@ public class ProcessRequestOffererPublishDepositTxMessage extends Task { @Override protected void doRun() { try { - model.getWalletService().offererSignAndPublishTx(model.getPreparedDepositTx(), - model.getSignedTakerDepositTxAsHex(), + model.getWalletService().offererSignAndPublishTx( + model.getPreparedDepositTx(), + model.getTakersSignedDepositTx(), model.getTxConnOutAsHex(), model.getTxScriptSigAsHex(), model.getOffererTxOutIndex(), diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/messages/RequestOffererPublishDepositTxMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/messages/RequestOffererPublishDepositTxMessage.java index 5ca74bd14f..9553a7fd92 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/messages/RequestOffererPublishDepositTxMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/messages/RequestOffererPublishDepositTxMessage.java @@ -20,6 +20,8 @@ package io.bitsquare.trade.protocol.trade.taker.messages; import io.bitsquare.bank.BankAccount; import io.bitsquare.trade.protocol.trade.TradeMessage; +import org.bitcoinj.core.Transaction; + import java.io.Serializable; import java.security.PublicKey; @@ -30,7 +32,7 @@ public class RequestOffererPublishDepositTxMessage implements Serializable, Trad private final BankAccount bankAccount; private final String accountID; private final PublicKey takerMessagePublicKey; - private final String signedTakerDepositTxAsHex; + private final Transaction takersSignedDepositTx; private final String txScriptSigAsHex; private final String txConnOutAsHex; private final String contractAsJson; @@ -45,7 +47,7 @@ public class RequestOffererPublishDepositTxMessage implements Serializable, Trad BankAccount bankAccount, String accountID, PublicKey takerMessagePublicKey, - String signedTakerDepositTxAsHex, + Transaction takersSignedDepositTx, String txScriptSigAsHex, String txConnOutAsHex, String contractAsJson, @@ -58,7 +60,7 @@ public class RequestOffererPublishDepositTxMessage implements Serializable, Trad this.bankAccount = bankAccount; this.accountID = accountID; this.takerMessagePublicKey = takerMessagePublicKey; - this.signedTakerDepositTxAsHex = signedTakerDepositTxAsHex; + this.takersSignedDepositTx = takersSignedDepositTx; this.txScriptSigAsHex = txScriptSigAsHex; this.txConnOutAsHex = txConnOutAsHex; this.contractAsJson = contractAsJson; @@ -90,8 +92,8 @@ public class RequestOffererPublishDepositTxMessage implements Serializable, Trad return takerMessagePublicKey; } - public String getSignedTakerDepositTxAsHex() { - return signedTakerDepositTxAsHex; + public Transaction getTakersSignedDepositTx() { + return takersSignedDepositTx; } public String getTxScriptSigAsHex() { diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java index ffea77b8fa..0e4b83a2ee 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java @@ -44,11 +44,11 @@ public class PayDeposit extends Task { Transaction signedTakerDepositTx = model.getWalletService().takerAddPaymentAndSignTx( amountToPay, msOutputAmount, + model.getPreparedDepositTx(), + model.getTrade().getId(), model.getOffererPubKey(), model.getTakerPubKey(), - model.getArbitratorPubKey(), - model.getPreparedDepositTx(), - model.getTrade().getId()); + model.getArbitratorPubKey()); model.setSignedTakerDepositTx(signedTakerDepositTx); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java index 2b3e3ac95f..3704c81b95 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java @@ -38,7 +38,7 @@ public class SendSignedTakerDepositTxAsHex extends Task { @Override protected void doRun() { - Transaction signedTakerDepositTx = model.getSignedTakerDepositTx(); + Transaction takersSignedDepositTx = model.getSignedTakerDepositTx(); long takerTxOutIndex = model.getSignedTakerDepositTx().getInput(1).getOutpoint().getIndex(); RequestOffererPublishDepositTxMessage tradeMessage = new RequestOffererPublishDepositTxMessage( @@ -46,9 +46,9 @@ public class SendSignedTakerDepositTxAsHex extends Task { model.getBankAccount(), model.getAccountId(), model.getMessagePublicKey(), - Utils.HEX.encode(signedTakerDepositTx.bitcoinSerialize()), - Utils.HEX.encode(signedTakerDepositTx.getInput(1).getScriptBytes()), - Utils.HEX.encode(signedTakerDepositTx.getInput(1).getConnectedOutput().getParentTransaction().bitcoinSerialize()), + takersSignedDepositTx, + Utils.HEX.encode(takersSignedDepositTx.getInput(1).getScriptBytes()), + Utils.HEX.encode(takersSignedDepositTx.getInput(1).getConnectedOutput().getParentTransaction().bitcoinSerialize()), model.getTrade().getContractAsJson(), model.getTrade().getTakerContractSignature(), model.getWalletService().getAddressInfo(model.getTrade().getId()).getAddressString(),