Package org.bitcoinj.script
Class ScriptBuilder
- java.lang.Object
-
- org.bitcoinj.script.ScriptBuilder
-
public class ScriptBuilder extends java.lang.Object
Tools for the construction of commonly used script types. You don't normally need this as it's hidden behind convenience methods on
Transaction
, but they are useful when working with the protocol at a lower level.
-
-
Constructor Summary
Constructors Constructor Description ScriptBuilder()
Creates a fresh ScriptBuilder with an empty program.ScriptBuilder(Script template)
Creates a fresh ScriptBuilder with the given program as the starting point.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description ScriptBuilder
addChunk(int index, ScriptChunk chunk)
Adds the given chunk at the given index in the programScriptBuilder
addChunk(ScriptChunk chunk)
Adds the given chunk to the end of the programprotected ScriptBuilder
bigNum(int index, long num)
Adds the given number as a push data chunk to the given index in the program.protected ScriptBuilder
bigNum(long num)
Adds the given number as a push data chunk.Script
build()
Creates a new immutable Script based on the state of the builder.static Script
createEmpty()
Creates an empty script.static Script
createInputScript(TransactionSignature signature)
Creates a scriptSig that can redeem a P2PK output.static Script
createInputScript(TransactionSignature signature, ECKey pubKey)
Creates a scriptSig that can redeem a P2PKH output.static Script
createMultiSigInputScript(java.util.List<TransactionSignature> signatures)
Create a program that satisfies an OP_CHECKMULTISIG program.static Script
createMultiSigInputScript(TransactionSignature... signatures)
Create a program that satisfies an OP_CHECKMULTISIG program.static Script
createMultiSigInputScriptBytes(java.util.List<byte[]> signatures)
Create a program that satisfies an OP_CHECKMULTISIG program, using pre-encoded signatures.static Script
createMultiSigInputScriptBytes(java.util.List<byte[]> signatures, byte[] multisigProgramBytes)
Create a program that satisfies an OP_CHECKMULTISIG program, using pre-encoded signatures.static Script
createMultiSigOutputScript(int threshold, java.util.List<ECKey> pubkeys)
Creates a program that requires at least N of the given keys to sign, using OP_CHECKMULTISIG.static Script
createOpReturnScript(byte[] data)
Creates a script of the form OP_RETURN [data].static Script
createOutputScript(Address to)
Creates a scriptPubKey that encodes payment to the given address.static Script
createOutputScript(Address to, java.time.Instant creationTime)
Creates a scriptPubKey that encodes payment to the given address.static Script
createP2PKHOutputScript(byte[] hash)
Creates a scriptPubKey that sends to the given public key hash.static Script
createP2PKHOutputScript(ECKey key)
Creates a scriptPubKey that sends to the given public key.static Script
createP2PKOutputScript(byte[] pubKey)
Creates a scriptPubKey that encodes payment to the given raw public key.static Script
createP2PKOutputScript(ECKey pubKey)
Creates a scriptPubKey that encodes payment to the given raw public key.static Script
createP2SHMultiSigInputScript(java.util.List<TransactionSignature> signatures, Script multisigProgram)
Create a program that satisfies a P2SH OP_CHECKMULTISIG program.static Script
createP2SHOutputScript(byte[] hash)
Creates a scriptPubKey that sends to the given script hash.static Script
createP2SHOutputScript(int threshold, java.util.List<ECKey> pubkeys)
Creates a P2SH output script for n-of-m multisig with given public keys and threshold.static Script
createP2SHOutputScript(Script redeemScript)
Creates a scriptPubKey for a given redeem script.static Script
createP2WPKHOutputScript(byte[] hash)
Creates a segwit scriptPubKey that sends to the given public key hash.static Script
createP2WPKHOutputScript(ECKey key)
Creates a segwit scriptPubKey that sends to the given public key.static Script
createP2WSHOutputScript(byte[] hash)
Creates a segwit scriptPubKey that sends to the given script hash.static Script
createP2WSHOutputScript(Script redeemScript)
Creates a segwit scriptPubKey for the given redeem script.static Script
createRedeemScript(int threshold, java.util.List<ECKey> pubkeys)
Creates an n-of-m multisig redeem script with given public keys and threshold.ScriptBuilder
creationTime(java.time.Instant creationTime)
Sets the creation time to build the script with.ScriptBuilder
data(byte[] data)
Adds a copy of the given byte array as a data element (i.e.ScriptBuilder
data(int index, byte[] data)
Adds a copy of the given byte array as a data element (i.e.ScriptBuilder
number(int index, long num)
Adds the given number to the given index in the program.ScriptBuilder
number(long num)
Adds the given number to the end of the program.ScriptBuilder
op(int opcode)
Adds the given opcode to the end of the program.ScriptBuilder
op(int index, int opcode)
Adds the given opcode to the given index in the programScriptBuilder
opFalse()
Adds false to the end of the program.ScriptBuilder
opFalse(int index)
Adds false to the given index in the program.ScriptBuilder
opTrue()
Adds true to the end of the program.ScriptBuilder
opTrue(int index)
Adds true to the given index in the program.ScriptBuilder
smallNum(int num)
Adds the given number as a OP_N opcode to the end of the program.ScriptBuilder
smallNum(int index, int num)
Adds the given number as a OP_N opcode to the given index in the program.static Script
updateScriptWithSignature(Script scriptSig, byte[] signature, int targetIndex, int sigsPrefixCount, int sigsSuffixCount)
Returns a copy of the given scriptSig with the signature inserted in the given position.
-
-
-
Constructor Detail
-
ScriptBuilder
public ScriptBuilder()
Creates a fresh ScriptBuilder with an empty program.
-
ScriptBuilder
public ScriptBuilder(Script template)
Creates a fresh ScriptBuilder with the given program as the starting point.
-
-
Method Detail
-
creationTime
public ScriptBuilder creationTime(java.time.Instant creationTime)
Sets the creation time to build the script with. If this is not set, the current time is used by the builder.- Parameters:
creationTime
- creation time to build the script with- Returns:
- this builder
-
addChunk
public ScriptBuilder addChunk(ScriptChunk chunk)
Adds the given chunk to the end of the program
-
addChunk
public ScriptBuilder addChunk(int index, ScriptChunk chunk)
Adds the given chunk at the given index in the program
-
op
public ScriptBuilder op(int opcode)
Adds the given opcode to the end of the program.
-
op
public ScriptBuilder op(int index, int opcode)
Adds the given opcode to the given index in the program
-
data
public ScriptBuilder data(byte[] data)
Adds a copy of the given byte array as a data element (i.e. PUSHDATA) at the end of the program.
-
data
public ScriptBuilder data(int index, byte[] data)
Adds a copy of the given byte array as a data element (i.e. PUSHDATA) at the given index in the program.
-
number
public ScriptBuilder number(long num)
Adds the given number to the end of the program. Automatically uses shortest encoding possible.
-
number
public ScriptBuilder number(int index, long num)
Adds the given number to the given index in the program. Automatically uses shortest encoding possible.
-
smallNum
public ScriptBuilder smallNum(int num)
Adds the given number as a OP_N opcode to the end of the program. Only handles values 0-16 inclusive.- See Also:
number(long)
-
bigNum
protected ScriptBuilder bigNum(long num)
Adds the given number as a push data chunk. This is intended to use for negative numbers or values greater than 16, and although it will accept numbers in the range 0-16 inclusive, the encoding would be considered non-standard.- See Also:
number(long)
-
smallNum
public ScriptBuilder smallNum(int index, int num)
Adds the given number as a OP_N opcode to the given index in the program. Only handles values 0-16 inclusive.- See Also:
number(long)
-
bigNum
protected ScriptBuilder bigNum(int index, long num)
Adds the given number as a push data chunk to the given index in the program. This is intended to use for negative numbers or values greater than 16, and although it will accept numbers in the range 0-16 inclusive, the encoding would be considered non-standard.- See Also:
number(long)
-
opTrue
public ScriptBuilder opTrue()
Adds true to the end of the program.- Returns:
- this
-
opTrue
public ScriptBuilder opTrue(int index)
Adds true to the given index in the program.- Parameters:
index
- at which insert true- Returns:
- this
-
opFalse
public ScriptBuilder opFalse()
Adds false to the end of the program.- Returns:
- this
-
opFalse
public ScriptBuilder opFalse(int index)
Adds false to the given index in the program.- Parameters:
index
- at which insert true- Returns:
- this
-
build
public Script build()
Creates a new immutable Script based on the state of the builder.
-
createEmpty
public static Script createEmpty()
Creates an empty script.
-
createOutputScript
public static Script createOutputScript(Address to, java.time.Instant creationTime)
Creates a scriptPubKey that encodes payment to the given address.- Parameters:
to
- address to send payment tocreationTime
- creation time of the scriptPubKey- Returns:
- scriptPubKey
-
createOutputScript
public static Script createOutputScript(Address to)
Creates a scriptPubKey that encodes payment to the given address. The creation time will be the current time.- Parameters:
to
- address to send payment to- Returns:
- scriptPubKey
-
createInputScript
public static Script createInputScript(@Nullable TransactionSignature signature, ECKey pubKey)
Creates a scriptSig that can redeem a P2PKH output. If given signature is null, incomplete scriptSig will be created with OP_0 instead of signature
-
createInputScript
public static Script createInputScript(@Nullable TransactionSignature signature)
Creates a scriptSig that can redeem a P2PK output. If given signature is null, incomplete scriptSig will be created with OP_0 instead of signature
-
createMultiSigOutputScript
public static Script createMultiSigOutputScript(int threshold, java.util.List<ECKey> pubkeys)
Creates a program that requires at least N of the given keys to sign, using OP_CHECKMULTISIG.
-
createMultiSigInputScript
public static Script createMultiSigInputScript(java.util.List<TransactionSignature> signatures)
Create a program that satisfies an OP_CHECKMULTISIG program.
-
createMultiSigInputScript
public static Script createMultiSigInputScript(TransactionSignature... signatures)
Create a program that satisfies an OP_CHECKMULTISIG program.
-
createMultiSigInputScriptBytes
public static Script createMultiSigInputScriptBytes(java.util.List<byte[]> signatures)
Create a program that satisfies an OP_CHECKMULTISIG program, using pre-encoded signatures.
-
createP2SHMultiSigInputScript
public static Script createP2SHMultiSigInputScript(@Nullable java.util.List<TransactionSignature> signatures, Script multisigProgram)
Create a program that satisfies a P2SH OP_CHECKMULTISIG program. If given signature list is null, incomplete scriptSig will be created with OP_0 instead of signatures
-
createMultiSigInputScriptBytes
public static Script createMultiSigInputScriptBytes(java.util.List<byte[]> signatures, @Nullable byte[] multisigProgramBytes)
Create a program that satisfies an OP_CHECKMULTISIG program, using pre-encoded signatures. Optionally, appends the script program bytes if spending a P2SH output.
-
updateScriptWithSignature
public static Script updateScriptWithSignature(Script scriptSig, byte[] signature, int targetIndex, int sigsPrefixCount, int sigsSuffixCount)
Returns a copy of the given scriptSig with the signature inserted in the given position. This function assumes that any missing sigs have OP_0 placeholders. If given scriptSig already has all the signatures in place, IllegalArgumentException will be thrown.- Parameters:
targetIndex
- where to insert the signaturesigsPrefixCount
- how many items to copy verbatim (e.g. initial OP_0 for multisig)sigsSuffixCount
- how many items to copy verbatim at end (e.g. redeemScript for P2SH)
-
createP2PKOutputScript
public static Script createP2PKOutputScript(byte[] pubKey)
Creates a scriptPubKey that encodes payment to the given raw public key.
-
createP2PKOutputScript
public static Script createP2PKOutputScript(ECKey pubKey)
Creates a scriptPubKey that encodes payment to the given raw public key.
-
createP2PKHOutputScript
public static Script createP2PKHOutputScript(byte[] hash)
Creates a scriptPubKey that sends to the given public key hash.
-
createP2PKHOutputScript
public static Script createP2PKHOutputScript(ECKey key)
Creates a scriptPubKey that sends to the given public key.
-
createP2WPKHOutputScript
public static Script createP2WPKHOutputScript(byte[] hash)
Creates a segwit scriptPubKey that sends to the given public key hash.
-
createP2WPKHOutputScript
public static Script createP2WPKHOutputScript(ECKey key)
Creates a segwit scriptPubKey that sends to the given public key.
-
createP2SHOutputScript
public static Script createP2SHOutputScript(byte[] hash)
Creates a scriptPubKey that sends to the given script hash. Read BIP 16 to learn more about this kind of script.- Parameters:
hash
- The hash of the redeem script- Returns:
- an output script that sends to the redeem script
-
createP2SHOutputScript
public static Script createP2SHOutputScript(Script redeemScript)
Creates a scriptPubKey for a given redeem script.- Parameters:
redeemScript
- The redeem script- Returns:
- an output script that sends to the redeem script
-
createP2WSHOutputScript
public static Script createP2WSHOutputScript(byte[] hash)
Creates a segwit scriptPubKey that sends to the given script hash.
-
createP2WSHOutputScript
public static Script createP2WSHOutputScript(Script redeemScript)
Creates a segwit scriptPubKey for the given redeem script.
-
createP2SHOutputScript
public static Script createP2SHOutputScript(int threshold, java.util.List<ECKey> pubkeys)
Creates a P2SH output script for n-of-m multisig with given public keys and threshold. Given public keys will be placed in redeem script in the lexicographical sorting order.- Parameters:
threshold
- The threshold number of keys that must sign (n)pubkeys
- A list of m public keys- Returns:
- The P2SH multisig output script
-
createRedeemScript
public static Script createRedeemScript(int threshold, java.util.List<ECKey> pubkeys)
Creates an n-of-m multisig redeem script with given public keys and threshold. Given public keys will be placed in redeem script in the lexicographical sorting order.- Parameters:
threshold
- The threshold number of keys that must sign (n)pubkeys
- A list of m public keys- Returns:
- The P2SH multisig redeem script
-
createOpReturnScript
public static Script createOpReturnScript(byte[] data)
Creates a script of the form OP_RETURN [data]. This feature allows you to attach a small piece of data (like a hash of something stored elsewhere) to a zero valued output which can never be spent and thus does not pollute the ledger.
-
-