mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-04-06 21:13:59 -04:00
Replace other hex with tx
This commit is contained in:
parent
1f041c520a
commit
2803eff14d
@ -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);
|
||||
|
@ -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() {
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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()));
|
||||
|
@ -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(),
|
||||
|
@ -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() {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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(),
|
||||
|
Loading…
x
Reference in New Issue
Block a user