ScriptBuilder: Add createP2WSHOutputScript() helpers.

This commit is contained in:
Andreas Schildbach
2019-01-30 02:25:08 +01:00
parent a8129b68f9
commit 8d6f562181
2 changed files with 19 additions and 7 deletions

View File

@@ -23,6 +23,7 @@ import org.bitcoinj.core.Address;
import org.bitcoinj.core.LegacyAddress;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.SegwitAddress;
import org.bitcoinj.core.Sha256Hash;
import org.bitcoinj.core.Transaction;
import org.bitcoinj.core.Utils;
import org.bitcoinj.crypto.TransactionSignature;
@@ -485,6 +486,22 @@ public class ScriptBuilder {
return ScriptBuilder.createP2SHOutputScript(hash);
}
/**
* Creates a segwit scriptPubKey that sends to the given script hash.
*/
public static Script createP2WSHOutputScript(byte[] hash) {
checkArgument(hash.length == SegwitAddress.WITNESS_PROGRAM_LENGTH_SH);
return new ScriptBuilder().smallNum(0).data(hash).build();
}
/**
* Creates a segwit scriptPubKey for the given redeem script.
*/
public static Script createP2WSHOutputScript(Script redeemScript) {
byte[] hash = Sha256Hash.hash(redeemScript.getProgram());
return ScriptBuilder.createP2WSHOutputScript(hash);
}
/**
* Creates a P2SH output script with given public keys and threshold. Given public keys will be placed in
* redeem script in the lexicographical sorting order.

View File

@@ -19,11 +19,7 @@ package org.bitcoinj.script;
import com.google.common.collect.Lists;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.core.SegwitAddress;
import org.bitcoinj.core.Sha256Hash;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.params.MainNetParams;
import org.junit.Test;
import java.math.BigInteger;
@@ -33,7 +29,6 @@ import static org.junit.Assert.assertTrue;
public class ScriptPatternTest {
private List<ECKey> keys = Lists.newArrayList(new ECKey(), new ECKey(), new ECKey());
private static final NetworkParameters MAINNET = MainNetParams.get();
@Test
public void testCommonScripts() {
@@ -47,10 +42,10 @@ public class ScriptPatternTest {
ScriptBuilder.createOutputScript(keys.get(0))
));
assertTrue(ScriptPattern.isPayToWitnessPubKeyHash(
ScriptBuilder.createOutputScript(SegwitAddress.fromHash(MAINNET, keys.get(0).getPubKeyHash()))
ScriptBuilder.createP2WPKHOutputScript(keys.get(0))
));
assertTrue(ScriptPattern.isPayToWitnessScriptHash(
ScriptBuilder.createOutputScript(SegwitAddress.fromHash(MAINNET, Sha256Hash.hash(new byte[0])))
ScriptBuilder.createP2WSHOutputScript(new ScriptBuilder().build())
));
assertTrue(ScriptPattern.isSentToMultisig(
ScriptBuilder.createMultiSigOutputScript(2, keys)