Client and backend. This class is shared: the same code is compiled into your app and into your server, so everything on this page works in both.
public final class Script
- Object
- Script
A Bitcoin script: the locking scriptPubKey of an output, or the scriptSig, redeem and
witness scripts that unlock one. Immutable.
The standard output templates have factories (p2pkh, p2wpkh, p2tr…) and
matching tests; builder writes anything else with minimal pushes.
Nested types
class Script.Builder | Appends opcodes and pushes to a script. |
Fields
public static final int OP_0 = 0 | OP_0, also the empty push. |
public static final int OP_PUSHDATA1 = 76 | OP_PUSHDATA1. |
public static final int OP_PUSHDATA2 = 77 | OP_PUSHDATA2. |
public static final int OP_PUSHDATA4 = 78 | OP_PUSHDATA4. |
public static final int OP_1NEGATE = 79 | OP_1NEGATE. |
public static final int OP_1 = 81 | OP_1; OP_2..OP_16 follow it. |
public static final int OP_16 = 96 | OP_16. |
public static final int OP_RETURN = 106 | OP_RETURN. |
public static final int OP_DUP = 118 | OP_DUP. |
public static final int OP_EQUAL = 135 | OP_EQUAL. |
public static final int OP_EQUALVERIFY = 136 | OP_EQUALVERIFY. |
public static final int OP_HASH160 = 169 | OP_HASH160. |
public static final int OP_CHECKSIG = 172 | OP_CHECKSIG. |
public static final int OP_CHECKMULTISIG = 174 | OP_CHECKMULTISIG. |
public static final int OP_CHECKLOCKTIMEVERIFY = 177 | OP_CHECKLOCKTIMEVERIFY. |
public static final int OP_CHECKSEQUENCEVERIFY = 178 | OP_CHECKSEQUENCEVERIFY. |
public static final int OP_CHECKSIGADD = 186 | OP_CHECKSIGADD, the Tapscript multisig opcode. |
Methods
public static Script empty() | The empty script. |
public static Script of(byte[] program) | Wraps serialized script bytes. |
public static Script fromHex(String hex) | Wraps script bytes given in hex. |
public static Script p2pkh(byte[] pubKeyHash20) | OP_DUP OP_HASH160 <hash> OP_EQUALVERIFY OP_CHECKSIG. |
public static Script p2sh(byte[] scriptHash20) | OP_HASH160 <hash> OP_EQUAL. |
public static Script p2wpkh(byte[] pubKeyHash20) | OP_0 <hash>, native SegWit v0 key hash. |
public static Script p2wsh(byte[] scriptHash32) | OP_0 <sha256(witnessScript)>, native SegWit v0 script hash. |
public static Script p2tr(byte[] outputKey32) | OP_1 <x-only key>, Taproot. |
public static Script witness(int version, byte[] program) | A witness output of any version (0 to 16) and program. |
public static Script opReturn(byte[] data) | OP_RETURN <data>, a provably unspendable data carrier. |
public static Script multisig(int m, byte[][] publicKeys) | m <pubkey>... n OP_CHECKMULTISIG, the bare multisig redeem or witness script. |
public static Script.Builder builder() | A builder that appends opcodes and minimal pushes. |
public boolean isP2pkh() | Tells whether this is a P2PKH output. |
public boolean isP2sh() | Tells whether this is a P2SH output. |
public boolean isP2wpkh() | Tells whether this is a P2WPKH output. |
public boolean isP2wsh() | Tells whether this is a P2WSH output. |
public boolean isP2tr() | Tells whether this is a Taproot output. |
public int getWitnessVersion() | The witness version of a SegWit output, or -1 when this is not one. |
public byte[] getWitnessProgram() | The witness program of a SegWit output, or null. |
public byte[] getDestinationHash() | The 20-byte hash a P2PKH or P2SH output commits to, the 20 or 32-byte program of a SegWit output, or null for any other script. |
public byte[] toBytes() | A copy of the serialized script. |
public int length() | The script length in bytes. |
public String toHex() | The serialized script in hex. |
public String toString() | Returns a string representation of the object. |
public boolean equals(Object o) | Indicates whether some other object is “equal to” this one. |
public int hashCode() | Returns a hash code value for the object. |
Inherited methods
Field details
OP_0
public static final int OP_0 = 0OP_0, also the empty push.OP_PUSHDATA1
public static final int OP_PUSHDATA1 = 76OP_PUSHDATA1.OP_PUSHDATA2
public static final int OP_PUSHDATA2 = 77OP_PUSHDATA2.OP_PUSHDATA4
public static final int OP_PUSHDATA4 = 78OP_PUSHDATA4.OP_1NEGATE
public static final int OP_1NEGATE = 79OP_1NEGATE.OP_1
public static final int OP_1 = 81OP_1; OP_2..OP_16 follow it.OP_16
public static final int OP_16 = 96OP_16.OP_RETURN
public static final int OP_RETURN = 106OP_RETURN.OP_DUP
public static final int OP_DUP = 118OP_DUP.OP_EQUAL
public static final int OP_EQUAL = 135OP_EQUAL.OP_EQUALVERIFY
public static final int OP_EQUALVERIFY = 136OP_EQUALVERIFY.OP_HASH160
public static final int OP_HASH160 = 169OP_HASH160.OP_CHECKSIG
public static final int OP_CHECKSIG = 172OP_CHECKSIG.OP_CHECKMULTISIG
public static final int OP_CHECKMULTISIG = 174OP_CHECKMULTISIG.OP_CHECKLOCKTIMEVERIFY
public static final int OP_CHECKLOCKTIMEVERIFY = 177OP_CHECKLOCKTIMEVERIFY.OP_CHECKSEQUENCEVERIFY
public static final int OP_CHECKSEQUENCEVERIFY = 178OP_CHECKSEQUENCEVERIFY.OP_CHECKSIGADD
public static final int OP_CHECKSIGADD = 186OP_CHECKSIGADD, the Tapscript multisig opcode.Method details
empty
public static Script empty()The empty script.
of
public static Script of(byte[] program)Wraps serialized script bytes.
fromHex
public static Script fromHex(String hex)Wraps script bytes given in hex.
p2pkh
public static Script p2pkh(byte[] pubKeyHash20)OP_DUP OP_HASH160 <hash> OP_EQUALVERIFY OP_CHECKSIG.p2sh
public static Script p2sh(byte[] scriptHash20)OP_HASH160 <hash> OP_EQUAL.p2wpkh
public static Script p2wpkh(byte[] pubKeyHash20)OP_0 <hash>, native SegWit v0 key hash.p2wsh
public static Script p2wsh(byte[] scriptHash32)OP_0 <sha256(witnessScript)>, native SegWit v0 script hash.p2tr
public static Script p2tr(byte[] outputKey32)OP_1 <x-only key>, Taproot.witness
public static Script witness(int version, byte[] program)A witness output of any version (0 to 16) and program.
opReturn
public static Script opReturn(byte[] data)OP_RETURN <data>, a provably unspendable data carrier.multisig
public static Script multisig(int m, byte[][] publicKeys)m <pubkey>... n OP_CHECKMULTISIG, the bare multisig redeem or witness script.builder
public static Script.Builder builder()A builder that appends opcodes and minimal pushes.
isP2pkh
public boolean isP2pkh()Tells whether this is a P2PKH output.
isP2sh
public boolean isP2sh()Tells whether this is a P2SH output.
isP2wpkh
public boolean isP2wpkh()Tells whether this is a P2WPKH output.
isP2wsh
public boolean isP2wsh()Tells whether this is a P2WSH output.
isP2tr
public boolean isP2tr()Tells whether this is a Taproot output.
getWitnessVersion
public int getWitnessVersion()The witness version of a SegWit output, or -1 when this is not one.
getWitnessProgram
public byte[] getWitnessProgram()The witness program of a SegWit output, or
null.getDestinationHash
public byte[] getDestinationHash()The 20-byte hash a P2PKH or P2SH output commits to, the 20 or 32-byte program of a
SegWit output, or
null for any other script.toBytes
public byte[] toBytes()A copy of the serialized script.
length
public int length()The script length in bytes.
toHex
public String toHex()The serialized script in hex.
toString
public String toString()Returns a string representation of the object. In general, the toString method returns a string that “textually represents” this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@’, and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
equals
public boolean equals(Object o)Indicates whether some other object is “equal to” this one.
The equals method implements an equivalence relation: It is reflexive: for any reference value x, x.equals(x) should return true. It is symmetric: for any reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true. It is transitive: for any reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true. It is consistent: for any reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the object is modified. For any non-null reference value x, x.equals(null) should return false.
The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).
hashCode
public int hashCode()Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable.
The general contract of hashCode is: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result. It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables.
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)