Replace other hex with tx

This commit is contained in:
Manfred Karrer 2015-03-14 21:25:46 +01:00
parent 1f041c520a
commit 2803eff14d
8 changed files with 49 additions and 51 deletions

View file

@ -601,12 +601,12 @@ public class WalletService {
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
// 1. step: deposit tx // 1. step: deposit tx
// Offerer creates the 2of3 multiSig deposit tx with his unsigned input and change output // Offerer creates the temporary 2of3 multiSig deposit tx with his unsigned input and change output
public Transaction prepareDepositTx(Coin offererInputAmount, public Transaction offererPreparesDepositTx(Coin offererInputAmount,
byte[] offererPubKey, String tradeId,
byte[] takerPubKey, byte[] offererPubKey,
byte[] arbitratorPubKey, byte[] takerPubKey,
String tradeId) throws InsufficientMoneyException { byte[] arbitratorPubKey) throws InsufficientMoneyException {
log.debug("offererCreatesMSTxAndAddPayment"); log.debug("offererCreatesMSTxAndAddPayment");
log.trace("inputs: "); log.trace("inputs: ");
log.trace("offererInputAmount=" + offererInputAmount.toFriendlyString()); log.trace("offererInputAmount=" + offererInputAmount.toFriendlyString());
@ -656,6 +656,7 @@ public class WalletService {
log.trace("Check if wallet is consistent: result=" + wallet.isConsistent()); log.trace("Check if wallet is consistent: result=" + wallet.isConsistent());
printInputs("offererCreatesMSTxAndAddPayment", tx); printInputs("offererCreatesMSTxAndAddPayment", tx);
log.debug("tx = " + tx); log.debug("tx = " + tx);
return 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 // Taker adds his input and change output, changes the multiSig amount to the correct value and sign his input
public Transaction takerAddPaymentAndSignTx(Coin takerInputAmount, public Transaction takerAddPaymentAndSignTx(Coin takerInputAmount,
Coin msOutputAmount, Coin msOutputAmount,
Transaction preparedDepositTx,
String tradeId,
byte[] offererPubKey, byte[] offererPubKey,
byte[] takerPubKey, byte[] takerPubKey,
byte[] arbitratorPubKey, byte[] arbitratorPubKey) throws InsufficientMoneyException {
Transaction preparedDepositTransaction,
String tradeId) throws InsufficientMoneyException {
log.debug("takerAddPaymentAndSignTx"); log.debug("takerAddPaymentAndSignTx");
log.trace("inputs: "); log.trace("inputs: ");
log.trace("takerInputAmount=" + takerInputAmount.toFriendlyString()); log.trace("takerInputAmount=" + takerInputAmount.toFriendlyString());
@ -675,7 +676,7 @@ public class WalletService {
log.trace("offererPubKey=" + offererPubKey); log.trace("offererPubKey=" + offererPubKey);
log.trace("takerPubKey=" + takerPubKey); log.trace("takerPubKey=" + takerPubKey);
log.trace("arbitratorPubKey=" + arbitratorPubKey); log.trace("arbitratorPubKey=" + arbitratorPubKey);
log.trace("preparedDepositTransaction=" + preparedDepositTransaction); log.trace("preparedDepositTransaction=" + preparedDepositTx);
log.trace("tradeId=" + tradeId); log.trace("tradeId=" + tradeId);
// We pay the btc tx fee 2 times to the deposit tx: // 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 // 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: // The serialized offerers tx looks like:
/* /*
@ -780,7 +781,7 @@ public class WalletService {
// 3. step: deposit tx // 3. step: deposit tx
// Offerer signs tx and publishes it // Offerer signs tx and publishes it
public void offererSignAndPublishTx(Transaction preparedDepositTx, public void offererSignAndPublishTx(Transaction preparedDepositTx,
String takersSignedTxAsHex, Transaction takersSignedDepositTx,
String takersSignedConnOutAsHex, String takersSignedConnOutAsHex,
String takersSignedScriptSigAsHex, String takersSignedScriptSigAsHex,
long offererTxOutIndex, long offererTxOutIndex,
@ -789,7 +790,7 @@ public class WalletService {
log.debug("offererSignAndPublishTx"); log.debug("offererSignAndPublishTx");
log.trace("inputs: "); log.trace("inputs: ");
log.trace("preparedDepositTx=" + preparedDepositTx); log.trace("preparedDepositTx=" + preparedDepositTx);
log.trace("takersSignedTxAsHex=" + takersSignedTxAsHex); log.trace("takersSignedTxAsHex=" + takersSignedDepositTx);
log.trace("takersSignedConnOutAsHex=" + takersSignedConnOutAsHex); log.trace("takersSignedConnOutAsHex=" + takersSignedConnOutAsHex);
log.trace("takersSignedScriptSigAsHex=" + takersSignedScriptSigAsHex); log.trace("takersSignedScriptSigAsHex=" + takersSignedScriptSigAsHex);
log.trace("callback=" + callback); log.trace("callback=" + callback);
@ -806,21 +807,16 @@ public class WalletService {
// add input // add input
Transaction offerersFirstTxConnOut = wallet.getTransaction(offerersFirstTx.getInput(0).getOutpoint().getHash()); Transaction offerersFirstTxConnOut = wallet.getTransaction(offerersFirstTx.getInput(0).getOutpoint().getHash());
TransactionOutPoint offerersFirstTxOutPoint = TransactionOutPoint offerersFirstTxOutPoint = new TransactionOutPoint(params, offererTxOutIndex, offerersFirstTxConnOut);
new TransactionOutPoint(params, offererTxOutIndex, offerersFirstTxConnOut);
//TransactionInput offerersFirstTxInput = new TransactionInput(params, tx,
// offerersFirstTx.getInput(0).getScriptBytes(), offerersFirstTxOutPoint); // pass that around!
// getScriptBytes =
// empty bytes array
TransactionInput offerersFirstTxInput = new TransactionInput(params, tx, new byte[]{}, offerersFirstTxOutPoint); TransactionInput offerersFirstTxInput = new TransactionInput(params, tx, new byte[]{}, offerersFirstTxOutPoint);
offerersFirstTxInput.setParent(tx); offerersFirstTxInput.setParent(tx);
tx.addInput(offerersFirstTxInput); tx.addInput(offerersFirstTxInput);
// takers signed tx // takers signed tx
Transaction takersSignedTx = new Transaction(params, Utils.parseAsHexOrBase58(takersSignedTxAsHex)); takersSignedDepositTx = new Transaction(params, takersSignedDepositTx.bitcoinSerialize());
printInputs("takersSignedTxInput", takersSignedTx); printInputs("takersSignedTxInput", takersSignedDepositTx);
log.trace("takersSignedTx = " + takersSignedTx); log.trace("takersSignedTx = " + takersSignedDepositTx);
// add input // add input
Transaction takersSignedTxConnOut = new Transaction(params, Utils.parseAsHexOrBase58(takersSignedConnOutAsHex)); Transaction takersSignedTxConnOut = new Transaction(params, Utils.parseAsHexOrBase58(takersSignedConnOutAsHex));
@ -831,14 +827,13 @@ public class WalletService {
takersSignedTxInput.setParent(tx); takersSignedTxInput.setParent(tx);
tx.addInput(takersSignedTxInput); tx.addInput(takersSignedTxInput);
//TODO onResult non change output cases
// add outputs from takers tx, they are already correct // add outputs from takers tx, they are already correct
tx.addOutput(takersSignedTx.getOutput(0)); tx.addOutput(takersSignedDepositTx.getOutput(0));
if (takersSignedTx.getOutputs().size() > 1) { if (takersSignedDepositTx.getOutputs().size() > 1) {
tx.addOutput(takersSignedTx.getOutput(1)); tx.addOutput(takersSignedDepositTx.getOutput(1));
} }
if (takersSignedTx.getOutputs().size() == 3) { if (takersSignedDepositTx.getOutputs().size() == 3) {
tx.addOutput(takersSignedTx.getOutput(2)); tx.addOutput(takersSignedDepositTx.getOutput(2));
} }
printInputs("tx", tx); printInputs("tx", tx);

View file

@ -59,7 +59,7 @@ public class BuyerAsOffererModel extends OfferSharedModel {
private PublicKey takerMessagePublicKey; private PublicKey takerMessagePublicKey;
private String takerContractAsJson; private String takerContractAsJson;
private String signedTakerDepositTxAsHex; private Transaction takersSignedDepositTx;
private String txConnOutAsHex; private String txConnOutAsHex;
private String txScriptSigAsHex; private String txScriptSigAsHex;
@ -178,12 +178,12 @@ public class BuyerAsOffererModel extends OfferSharedModel {
this.takerContractAsJson = takerContractAsJson; this.takerContractAsJson = takerContractAsJson;
} }
public String getSignedTakerDepositTxAsHex() { public Transaction getTakersSignedDepositTx() {
return signedTakerDepositTxAsHex; return takersSignedDepositTx;
} }
public void setSignedTakerDepositTxAsHex(String signedTakerDepositTxAsHex) { public void setTakersSignedDepositTx(Transaction takersSignedDepositTx) {
this.signedTakerDepositTxAsHex = signedTakerDepositTxAsHex; this.takersSignedDepositTx = takersSignedDepositTx;
} }
public String getTxConnOutAsHex() { public String getTxConnOutAsHex() {

View file

@ -41,12 +41,12 @@ public class PrepareDepositTx extends Task<BuyerAsOffererModel> {
try { try {
byte[] offererPubKey = model.getWalletService().getAddressInfo(model.getTrade().getId()).getPubKey(); byte[] offererPubKey = model.getWalletService().getAddressInfo(model.getTrade().getId()).getPubKey();
Coin offererInputAmount = model.getTrade().getSecurityDeposit().add(FeePolicy.TX_FEE); Coin offererInputAmount = model.getTrade().getSecurityDeposit().add(FeePolicy.TX_FEE);
Transaction transaction = model.getWalletService().prepareDepositTx( Transaction transaction = model.getWalletService().offererPreparesDepositTx(
offererInputAmount, offererInputAmount,
model.getTrade().getId(),
offererPubKey, offererPubKey,
model.getTakerPubKey(), model.getTakerPubKey(),
model.getArbitratorPubKey(), model.getArbitratorPubKey());
model.getTrade().getId());
long offererTxOutIndex = transaction.getInput(0).getOutpoint().getIndex(); long offererTxOutIndex = transaction.getInput(0).getOutpoint().getIndex();

View file

@ -46,7 +46,7 @@ public class ProcessRequestOffererPublishDepositTxMessage extends Task<BuyerAsOf
model.setTakerBankAccount(checkNotNull(message.getTakerBankAccount())); model.setTakerBankAccount(checkNotNull(message.getTakerBankAccount()));
model.setTakerMessagePublicKey(checkNotNull(message.getTakerMessagePublicKey())); model.setTakerMessagePublicKey(checkNotNull(message.getTakerMessagePublicKey()));
model.setTakerContractAsJson(nonEmptyStringOf(message.getTakerContractAsJson())); model.setTakerContractAsJson(nonEmptyStringOf(message.getTakerContractAsJson()));
model.setSignedTakerDepositTxAsHex(nonEmptyStringOf(message.getSignedTakerDepositTxAsHex())); model.setTakersSignedDepositTx(checkNotNull(message.getTakersSignedDepositTx()));
model.setTxConnOutAsHex(nonEmptyStringOf(message.getTxConnOutAsHex())); model.setTxConnOutAsHex(nonEmptyStringOf(message.getTxConnOutAsHex()));
model.setTxScriptSigAsHex(nonEmptyStringOf(message.getTxScriptSigAsHex())); model.setTxScriptSigAsHex(nonEmptyStringOf(message.getTxScriptSigAsHex()));
model.setTakerTxOutIndex(nonNegativeLongOf(message.getTakerTxOutIndex())); model.setTakerTxOutIndex(nonNegativeLongOf(message.getTakerTxOutIndex()));

View file

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

View file

@ -20,6 +20,8 @@ package io.bitsquare.trade.protocol.trade.taker.messages;
import io.bitsquare.bank.BankAccount; import io.bitsquare.bank.BankAccount;
import io.bitsquare.trade.protocol.trade.TradeMessage; import io.bitsquare.trade.protocol.trade.TradeMessage;
import org.bitcoinj.core.Transaction;
import java.io.Serializable; import java.io.Serializable;
import java.security.PublicKey; import java.security.PublicKey;
@ -30,7 +32,7 @@ public class RequestOffererPublishDepositTxMessage implements Serializable, Trad
private final BankAccount bankAccount; private final BankAccount bankAccount;
private final String accountID; private final String accountID;
private final PublicKey takerMessagePublicKey; private final PublicKey takerMessagePublicKey;
private final String signedTakerDepositTxAsHex; private final Transaction takersSignedDepositTx;
private final String txScriptSigAsHex; private final String txScriptSigAsHex;
private final String txConnOutAsHex; private final String txConnOutAsHex;
private final String contractAsJson; private final String contractAsJson;
@ -45,7 +47,7 @@ public class RequestOffererPublishDepositTxMessage implements Serializable, Trad
BankAccount bankAccount, BankAccount bankAccount,
String accountID, String accountID,
PublicKey takerMessagePublicKey, PublicKey takerMessagePublicKey,
String signedTakerDepositTxAsHex, Transaction takersSignedDepositTx,
String txScriptSigAsHex, String txScriptSigAsHex,
String txConnOutAsHex, String txConnOutAsHex,
String contractAsJson, String contractAsJson,
@ -58,7 +60,7 @@ public class RequestOffererPublishDepositTxMessage implements Serializable, Trad
this.bankAccount = bankAccount; this.bankAccount = bankAccount;
this.accountID = accountID; this.accountID = accountID;
this.takerMessagePublicKey = takerMessagePublicKey; this.takerMessagePublicKey = takerMessagePublicKey;
this.signedTakerDepositTxAsHex = signedTakerDepositTxAsHex; this.takersSignedDepositTx = takersSignedDepositTx;
this.txScriptSigAsHex = txScriptSigAsHex; this.txScriptSigAsHex = txScriptSigAsHex;
this.txConnOutAsHex = txConnOutAsHex; this.txConnOutAsHex = txConnOutAsHex;
this.contractAsJson = contractAsJson; this.contractAsJson = contractAsJson;
@ -90,8 +92,8 @@ public class RequestOffererPublishDepositTxMessage implements Serializable, Trad
return takerMessagePublicKey; return takerMessagePublicKey;
} }
public String getSignedTakerDepositTxAsHex() { public Transaction getTakersSignedDepositTx() {
return signedTakerDepositTxAsHex; return takersSignedDepositTx;
} }
public String getTxScriptSigAsHex() { public String getTxScriptSigAsHex() {

View file

@ -44,11 +44,11 @@ public class PayDeposit extends Task<SellerAsTakerModel> {
Transaction signedTakerDepositTx = model.getWalletService().takerAddPaymentAndSignTx( Transaction signedTakerDepositTx = model.getWalletService().takerAddPaymentAndSignTx(
amountToPay, amountToPay,
msOutputAmount, msOutputAmount,
model.getPreparedDepositTx(),
model.getTrade().getId(),
model.getOffererPubKey(), model.getOffererPubKey(),
model.getTakerPubKey(), model.getTakerPubKey(),
model.getArbitratorPubKey(), model.getArbitratorPubKey());
model.getPreparedDepositTx(),
model.getTrade().getId());
model.setSignedTakerDepositTx(signedTakerDepositTx); model.setSignedTakerDepositTx(signedTakerDepositTx);

View file

@ -38,7 +38,7 @@ public class SendSignedTakerDepositTxAsHex extends Task<SellerAsTakerModel> {
@Override @Override
protected void doRun() { protected void doRun() {
Transaction signedTakerDepositTx = model.getSignedTakerDepositTx(); Transaction takersSignedDepositTx = model.getSignedTakerDepositTx();
long takerTxOutIndex = model.getSignedTakerDepositTx().getInput(1).getOutpoint().getIndex(); long takerTxOutIndex = model.getSignedTakerDepositTx().getInput(1).getOutpoint().getIndex();
RequestOffererPublishDepositTxMessage tradeMessage = new RequestOffererPublishDepositTxMessage( RequestOffererPublishDepositTxMessage tradeMessage = new RequestOffererPublishDepositTxMessage(
@ -46,9 +46,9 @@ public class SendSignedTakerDepositTxAsHex extends Task<SellerAsTakerModel> {
model.getBankAccount(), model.getBankAccount(),
model.getAccountId(), model.getAccountId(),
model.getMessagePublicKey(), model.getMessagePublicKey(),
Utils.HEX.encode(signedTakerDepositTx.bitcoinSerialize()), takersSignedDepositTx,
Utils.HEX.encode(signedTakerDepositTx.getInput(1).getScriptBytes()), Utils.HEX.encode(takersSignedDepositTx.getInput(1).getScriptBytes()),
Utils.HEX.encode(signedTakerDepositTx.getInput(1).getConnectedOutput().getParentTransaction().bitcoinSerialize()), Utils.HEX.encode(takersSignedDepositTx.getInput(1).getConnectedOutput().getParentTransaction().bitcoinSerialize()),
model.getTrade().getContractAsJson(), model.getTrade().getContractAsJson(),
model.getTrade().getTakerContractSignature(), model.getTrade().getTakerContractSignature(),
model.getWalletService().getAddressInfo(model.getTrade().getId()).getAddressString(), model.getWalletService().getAddressInfo(model.getTrade().getId()).getAddressString(),