mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-09-26 03:20:55 -04:00
Replace other hex with tx
This commit is contained in:
parent
1f041c520a
commit
2803eff14d
8 changed files with 49 additions and 51 deletions
|
@ -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);
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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()));
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue