Skip to content

Instantly share code, notes, and snippets.

@oscarguindzberg
Created October 19, 2020 23:31
Show Gist options
  • Save oscarguindzberg/1ad0db7cdd571a10f4f40678c3f8c98f to your computer and use it in GitHub Desktop.
Save oscarguindzberg/1ad0db7cdd571a10f4f40678c3f8c98f to your computer and use it in GitHub Desktop.
package org.bitcoinj.examples;
import org.bitcoinj.core.*;
import org.bitcoinj.crypto.TransactionSignature;
import org.bitcoinj.params.RegTestParams;
import org.bitcoinj.script.Script;
import org.bitcoinj.script.ScriptBuilder;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SingleSigSize {
public static void main(String[] args) {
boolean segwit = true;
Logger logger = Logger.getLogger("");
logger.setLevel(Level.WARNING);
NetworkParameters params = RegTestParams.get();
String address;
if (segwit) {
address = "bcrt1qzc946ljn7x6evaeddn7s6zdlqy0mg49n069gwa";
} else {
address = "mu45HfNNCtVDA2guPKpcbGrVyrufroeHr8";
}
Transaction fundingTx = new Transaction(params);
fundingTx.addOutput(Coin.COIN, Address.fromString(params, address));
fundingTx.addOutput(Coin.COIN, Address.fromString(params, address));
TransactionOutput fundingOutput0 = fundingTx.getOutput(0);
Transaction spendTx = new Transaction(params);
spendTx.addOutput(Coin.CENT, Address.fromString(params, "mu45HfNNCtVDA2guPKpcbGrVyrufroeHr8")); // Pay bisq fee in btc
spendTx.addOutput(Coin.CENT, Address.fromString(params, address)); // Reserved for trade
spendTx.addOutput(Coin.CENT, Address.fromString(params, address)); // Change to user
TransactionInput spendInput0 = spendTx.addInput(fundingOutput0);
ECKey sigKey0 = new ECKey();
if (segwit) {
Script scriptCode = ScriptBuilder.createP2PKHOutputScript(sigKey0);
Coin value = spendInput0.getValue();
TransactionSignature txSig = spendTx.calculateWitnessSignature(0, sigKey0, scriptCode, value,
Transaction.SigHash.ALL, false);
spendInput0.setScriptSig(ScriptBuilder.createEmpty());
spendInput0.setWitness(TransactionWitness.redeemP2WPKH(txSig, sigKey0));
} else {
Sha256Hash hash0 = spendTx.hashForSignature(0, fundingOutput0.getScriptPubKey(), Transaction.SigHash.ALL, false);
ECKey.ECDSASignature signature0 = sigKey0.sign(hash0,null);
TransactionSignature txSig0 = new TransactionSignature(signature0, Transaction.SigHash.ALL, false);
spendInput0.setScriptSig(ScriptBuilder.createInputScript(txSig0, sigKey0));
}
System.out.println("spendTx = " + spendTx);
// Expected 260 for P2PKH, 175 for P2WPKH
System.out.println("spendTx vsize = " + spendTx.getVsize());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment