ppad-script-0.2.1: Primitive Script support.
Copyright(c) 2025 Jared Tobin
LicenseMIT
MaintainerJared Tobin <jared@ppad.tech>
Safe HaskellNone
LanguageHaskell2010

Bitcoin.Prim.Script

Description

Representations for Script, including abstract syntax, ByteArray, and base16-encoded ByteString versions, as well as fast conversion utilities for working with them.

Synopsis

Script and Script Terms

newtype Script Source #

A Script program, represented as a ByteArray.

>>> from_base16 "0014b472a266d0bd89c13706a4132ccfb16f7c3b9fcb"
Just (Script
  [ 0x00, 0x14, 0xb4, 0x72, 0xa2, 0x66, 0xd0, 0xbd, 0x89, 0xc1, 0x37
  , 0x06, 0xa4, 0x13, 0x2c, 0xcf, 0xb1, 0x6f, 0x7c, 0x3b, 0x9f, 0xcb])

Constructors

Script ByteArray 

Instances

Instances details
Show Script Source # 
Instance details

Defined in Bitcoin.Prim.Script

Eq Script Source # 
Instance details

Defined in Bitcoin.Prim.Script

Methods

(==) :: Script -> Script -> Bool #

(/=) :: Script -> Script -> Bool #

data Term Source #

Terms of the Script language, each being an Opcode or Word8 byte.

>>> OPCODE OP_RETURN
OP_RETURN
>>> BYTE 0x00
0x00

Constructors

OPCODE !Opcode 
BYTE !Word8 

Instances

Instances details
Show Term Source # 
Instance details

Defined in Bitcoin.Prim.Script

Methods

showsPrec :: Int -> Term -> ShowS #

show :: Term -> String #

showList :: [Term] -> ShowS #

Eq Term Source # 
Instance details

Defined in Bitcoin.Prim.Script

Methods

(==) :: Term -> Term -> Bool #

(/=) :: Term -> Term -> Bool #

data Opcode Source #

Primitive opcodes.

See, for example opcodeexplained for detail on each.

Constructors

OP_PUSHBYTES_0 
OP_PUSHBYTES_1 
OP_PUSHBYTES_2 
OP_PUSHBYTES_3 
OP_PUSHBYTES_4 
OP_PUSHBYTES_5 
OP_PUSHBYTES_6 
OP_PUSHBYTES_7 
OP_PUSHBYTES_8 
OP_PUSHBYTES_9 
OP_PUSHBYTES_10 
OP_PUSHBYTES_11 
OP_PUSHBYTES_12 
OP_PUSHBYTES_13 
OP_PUSHBYTES_14 
OP_PUSHBYTES_15 
OP_PUSHBYTES_16 
OP_PUSHBYTES_17 
OP_PUSHBYTES_18 
OP_PUSHBYTES_19 
OP_PUSHBYTES_20 
OP_PUSHBYTES_21 
OP_PUSHBYTES_22 
OP_PUSHBYTES_23 
OP_PUSHBYTES_24 
OP_PUSHBYTES_25 
OP_PUSHBYTES_26 
OP_PUSHBYTES_27 
OP_PUSHBYTES_28 
OP_PUSHBYTES_29 
OP_PUSHBYTES_30 
OP_PUSHBYTES_31 
OP_PUSHBYTES_32 
OP_PUSHBYTES_33 
OP_PUSHBYTES_34 
OP_PUSHBYTES_35 
OP_PUSHBYTES_36 
OP_PUSHBYTES_37 
OP_PUSHBYTES_38 
OP_PUSHBYTES_39 
OP_PUSHBYTES_40 
OP_PUSHBYTES_41 
OP_PUSHBYTES_42 
OP_PUSHBYTES_43 
OP_PUSHBYTES_44 
OP_PUSHBYTES_45 
OP_PUSHBYTES_46 
OP_PUSHBYTES_47 
OP_PUSHBYTES_48 
OP_PUSHBYTES_49 
OP_PUSHBYTES_50 
OP_PUSHBYTES_51 
OP_PUSHBYTES_52 
OP_PUSHBYTES_53 
OP_PUSHBYTES_54 
OP_PUSHBYTES_55 
OP_PUSHBYTES_56 
OP_PUSHBYTES_57 
OP_PUSHBYTES_58 
OP_PUSHBYTES_59 
OP_PUSHBYTES_60 
OP_PUSHBYTES_61 
OP_PUSHBYTES_62 
OP_PUSHBYTES_63 
OP_PUSHBYTES_64 
OP_PUSHBYTES_65 
OP_PUSHBYTES_66 
OP_PUSHBYTES_67 
OP_PUSHBYTES_68 
OP_PUSHBYTES_69 
OP_PUSHBYTES_70 
OP_PUSHBYTES_71 
OP_PUSHBYTES_72 
OP_PUSHBYTES_73 
OP_PUSHBYTES_74 
OP_PUSHBYTES_75 
OP_PUSHDATA1 
OP_PUSHDATA2 
OP_PUSHDATA4 
OP_1NEGATE 
OP_RESERVED 
OP_1 
OP_2 
OP_3 
OP_4 
OP_5 
OP_6 
OP_7 
OP_8 
OP_9 
OP_10 
OP_11 
OP_12 
OP_13 
OP_14 
OP_15 
OP_16 
OP_NOP 
OP_VER 
OP_IF 
OP_NOTIF 
OP_VERIF 
OP_VERNOTIF 
OP_ELSE 
OP_ENDIF 
OP_VERIFY 
OP_RETURN 
OP_TOALTSTACK 
OP_FROMALTSTACK 
OP_2DROP 
OP_2DUP 
OP_3DUP 
OP_2OVER 
OP_2ROT 
OP_2SWAP 
OP_IFDUP 
OP_DEPTH 
OP_DROP 
OP_DUP 
OP_NIP 
OP_OVER 
OP_PICK 
OP_ROLL 
OP_ROT 
OP_SWAP 
OP_TUCK 
OP_CAT 
OP_SUBSTR 
OP_LEFT 
OP_RIGHT 
OP_SIZE 
OP_INVERT 
OP_AND 
OP_OR 
OP_XOR 
OP_EQUAL 
OP_EQUALVERIFY 
OP_RESERVED1 
OP_RESERVED2 
OP_1ADD 
OP_1SUB 
OP_2MUL 
OP_2DIV 
OP_NEGATE 
OP_ABS 
OP_NOT 
OP_0NOTEQUAL 
OP_ADD 
OP_SUB 
OP_MUL 
OP_DIV 
OP_MOD 
OP_LSHIFT 
OP_RSHIFT 
OP_BOOLAND 
OP_BOOLOR 
OP_NUMEQUAL 
OP_NUMEQUALVERIFY 
OP_NUMNOTEQUAL 
OP_LESSTHAN 
OP_GREATERTHAN 
OP_LESSTHANOREQUAL 
OP_GREATERTHANOREQUAL 
OP_MIN 
OP_MAX 
OP_WITHIN 
OP_RIPEMD160 
OP_SHA1 
OP_SHA256 
OP_HASH160 
OP_HASH256 
OP_CODESEPARATOR 
OP_CHECKSIG 
OP_CHECKSIGVERIFY 
OP_CHECKMULTISIG 
OP_CHECKMULTISIGVERIFY 
OP_NOP1 
OP_CLTV 
OP_CSV 
OP_NOP4 
OP_NOP5 
OP_NOP6 
OP_NOP7 
OP_NOP8 
OP_NOP9 
OP_NOP10 
OP_CHECKSIGADD 
OP_RETURN_187 
OP_RETURN_188 
OP_RETURN_189 
OP_RETURN_190 
OP_RETURN_191 
OP_RETURN_192 
OP_RETURN_193 
OP_RETURN_194 
OP_RETURN_195 
OP_RETURN_196 
OP_RETURN_197 
OP_RETURN_198 
OP_RETURN_199 
OP_RETURN_200 
OP_RETURN_201 
OP_RETURN_202 
OP_RETURN_203 
OP_RETURN_204 
OP_RETURN_205 
OP_RETURN_206 
OP_RETURN_207 
OP_RETURN_208 
OP_RETURN_209 
OP_RETURN_210 
OP_RETURN_211 
OP_RETURN_212 
OP_RETURN_213 
OP_RETURN_214 
OP_RETURN_215 
OP_RETURN_216 
OP_RETURN_217 
OP_RETURN_218 
OP_RETURN_219 
OP_RETURN_220 
OP_RETURN_221 
OP_RETURN_222 
OP_RETURN_223 
OP_RETURN_224 
OP_RETURN_225 
OP_RETURN_226 
OP_RETURN_227 
OP_RETURN_228 
OP_RETURN_229 
OP_RETURN_230 
OP_RETURN_231 
OP_RETURN_232 
OP_RETURN_233 
OP_RETURN_234 
OP_RETURN_235 
OP_RETURN_236 
OP_RETURN_237 
OP_RETURN_238 
OP_RETURN_239 
OP_RETURN_240 
OP_RETURN_241 
OP_RETURN_242 
OP_RETURN_243 
OP_RETURN_244 
OP_RETURN_245 
OP_RETURN_246 
OP_RETURN_247 
OP_RETURN_248 
OP_RETURN_249 
OP_RETURN_250 
OP_RETURN_251 
OP_RETURN_252 
OP_RETURN_253 
OP_RETURN_254 
OP_INVALIDOPCODE 

Instances

Instances details
Enum Opcode Source # 
Instance details

Defined in Bitcoin.Prim.Script

Show Opcode Source # 
Instance details

Defined in Bitcoin.Prim.Script

Eq Opcode Source # 
Instance details

Defined in Bitcoin.Prim.Script

Methods

(==) :: Opcode -> Opcode -> Bool #

(/=) :: Opcode -> Opcode -> Bool #

Conversion Utilities

to_base16 :: Script -> ByteString Source #

Convert a Script to a base16-encoded ByteString.

>>> let script = to_script [OPCODE OP_1, OPCODE OP_2, OPCODE OP_ADD]
>>> to_base16 script
  "515293"

from_base16 :: ByteString -> Maybe Script Source #

Convert a base16-encoded ByteString to a Script.

>>> from_base16 "515293"
Just (Script [0x51, 0x52, 0x93])

to_script :: [Term] -> Script Source #

Pack a list of Script terms into a Script.

>>> to_script [OPCODE OP_1, OPCODE OP_2, OPCODE OP_ADD]
Script [0x51, 0x52, 0x93]

from_script :: Script -> [Term] Source #

Unpack a Script into a list of Script terms.

>>> let Just script = from_base16 "515293"
>>> from_script script
[OP_1, OP_2, OP_ADD]