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
// 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);

View File

@ -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() {

View File

@ -41,12 +41,12 @@ public class PrepareDepositTx extends Task<BuyerAsOffererModel> {
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();

View File

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

View File

@ -41,8 +41,9 @@ public class SignAndPublishDepositTx extends Task<BuyerAsOffererModel> {
@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(),

View File

@ -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() {

View File

@ -44,11 +44,11 @@ public class PayDeposit extends Task<SellerAsTakerModel> {
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);

View File

@ -38,7 +38,7 @@ public class SendSignedTakerDepositTxAsHex extends Task<SellerAsTakerModel> {
@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<SellerAsTakerModel> {
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(),