script

package
v0.0.0-...-942cd0b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 30, 2021 License: MIT Imports: 13 Imported by: 0

Documentation

Overview

Implementation of Bitcoin's Script language. Reference: https://en.bitcoin.it/wiki/Script

Index

Constants

View Source
const (
	//
	// Constants:
	OP_0 = opcode(iota)
	// 1-75: serve as elements
	OP_PUSHDATA1 = opcode(iota + 75)
	OP_PUSHDATA2
	OP_PUSHDATA4
	OP_1NEGATE
	// 80: reserved
	OP_1 = opcode(iota + 76)
	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
	//
	// Flow control:
	OP_NOP
	// 98: reserved
	OP_IF = opcode(iota + 77)
	OP_NOTIF
	// 101: reserved
	// 102: reserved
	OP_ELSE = opcode(iota + 79)
	OP_ENDIF
	OP_VERIFY
	OP_RETURN
	//
	// Stack:
	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
	//
	// Splice:
	// 126-129: disabled
	OP_SIZE = opcode(iota + 83)
	//
	// Bitwise logic:
	// 131-134: disabled
	OP_EQUAL = opcode(iota + 87)
	OP_EQUALVERIFY
	// 137: reserved
	// 138: reserved
	//
	// Arithmetic:
	OP_1ADD = opcode(iota + 89)
	OP_1SUB
	// 141: disabled
	// 142: disabled
	OP_NEGATE = opcode(iota + 91)
	OP_ABS
	OP_NOT
	OP_0NOTEQUAL
	OP_ADD
	OP_SUB
	// 149-153: disabled
	OP_BOOLAND = opcode(iota + 96)
	OP_BOOLOR
	OP_NUMEQUAL
	OP_NUMEQUALVERIFY
	OP_NUMNOTEQUAL
	OP_LESSTHAN
	OP_GREATERTHAN
	OP_LESSTHANOREQUAL
	OP_GREATERTHANOREQUAL
	OP_MIN
	OP_MAX
	OP_WITHIN
	//
	// Crypto:
	OP_RIPEMD160
	OP_SHA1
	OP_SHA256
	OP_HASH160
	OP_HASH256
	OP_CODESEPARATOR
	OP_CHECKSIG
	OP_CHECKSIGVERIFY
	OP_CHECKMULTISIG
	OP_CHECKMULTISIGVERIFY
	//
	// NOP:
	OP_NOP1
	//
	// Locktime:
	OP_CHECKLOCKTIMEVERIFY // previously OP_NOP2
	OP_CHECKSEQUENCEVERIFY // previouslu OP_NOP3
	//
	// NOP:
	OP_NOP4
	OP_NOP5
	OP_NOP6
	OP_NOP7
	OP_NOP8
	OP_NOP9
	OP_NOP10
)

Variables

View Source
var OpcodeFunctions = map[opcode]operation{
	OP_0: op0,

	OP_VERIFY: opVerify,

	OP_DUP: opDup,

	OP_EQUAL:       opEqual,
	OP_EQUALVERIFY: opEqualverify,

	OP_HASH160: opHash160,

	OP_CHECKSIG: opChecksig,
}
View Source
var OpcodeNames = map[opcode]string{

	OP_0: "OP_0",

	OP_PUSHDATA1: "OP_PUSHDATA1",
	OP_PUSHDATA2: "OP_PUSHDATA2",
	OP_PUSHDATA4: "OP_PUSHDATA4",
	OP_1NEGATE:   "OP_1NEGATE",

	81: "OP_1",
	82: "OP_2",
	83: "OP_3",
	84: "OP_4",
	85: "OP_5",
	86: "OP_6",
	87: "OP_7",
	88: "OP_8",
	89: "OP_9",
	90: "OP_10",
	91: "OP_11",
	92: "OP_12",
	93: "OP_13",
	94: "OP_14",
	95: "OP_15",
	96: "OP_16",

	97: "OP_NOP",

	99:  "OP_IF",
	100: "OP_NOTIF",

	103:       "OP_ELSE",
	104:       "OP_ENDIF",
	OP_VERIFY: "OP_VERIFY",
	106:       "OP_RETURN",

	107:    "OP_TOALTSTACK",
	108:    "OP_FROMALTSTACK",
	109:    "OP_2DROP",
	110:    "OP_2DUP",
	111:    "OP_3DUP",
	112:    "OP_2OVER",
	113:    "OP_2ROT",
	114:    "OP_2SWAP",
	115:    "OP_IFDUP",
	116:    "OP_DEPTH",
	117:    "OP_DROP",
	OP_DUP: "OP_DUP",
	119:    "OP_NIP",
	120:    "OP_OVER",
	121:    "OP_PICK",
	122:    "OP_ROLL",
	123:    "OP_ROT",
	124:    "OP_SWAP",
	125:    "OP_TUCK",

	130: "OP_SIZE",

	OP_EQUAL:       "OP_EQUAL",
	OP_EQUALVERIFY: "OP_EQUALVERIFY",

	139: "OP_1ADD",
	140: "OP_1SUB",

	143: "OP_NEGATE",
	144: "OP_ABS",
	145: "OP_NOT",
	146: "OP_0NOTEQUAL",
	147: "OP_ADD",
	148: "OP_SUB",

	154: "OP_BOOLAND",
	155: "OP_BOOLOR",
	156: "OP_NUMEQUAL",
	157: "OP_NUMEQUALVERIFY",
	158: "OP_NUMNOTEQUAL",
	159: "OP_LESSTHAN",
	160: "OP_GREATERTHAN",
	161: "OP_LESSTHANOREQUAL",
	162: "OP_GREATERTHANOREQUAL",
	163: "OP_MIN",
	164: "OP_MAX",
	165: "OP_WITHIN",

	166:         "OP_RIPEMD160",
	167:         "OP_SHA1",
	168:         "OP_SHA256",
	OP_HASH160:  "OP_HASH160",
	170:         "OP_HASH256",
	171:         "OP_CODESEPARATOR",
	OP_CHECKSIG: "OP_CHECKSIG",
	173:         "OP_CHECKSIGVERIFY",
	174:         "OP_CHECKMULTISIG",
	175:         "OP_CHECKMULTISIGVERIFY",

	176: "OP_NOP1",

	177: "OP_CHECKLOCKTIMEVERIFY",
	178: "OP_CHECKSEQUENCEVERIFY",

	179: "OP_NOP4",
	180: "OP_NOP5",
	181: "OP_NOP6",
	182: "OP_NOP7",
	183: "OP_NOP8",
	184: "OP_NOP9",
	185: "OP_NOP10",
}

Functions

This section is empty.

Types

type Script

type Script []command

Script is simply a slice of commands.

func NewP2PKHScript

func NewP2PKHScript(h160 [20]byte) Script

NewP2PKHScript returns a Pay-to-PubkeyHash Script

func NewP2WPKHScript

func NewP2WPKHScript(h160 [20]byte) Script

NewP2WPKHScript returns a Pay-to-Witness-PubkeyHash Script

func (*Script) Add

func (s *Script) Add(cmds ...command) Script

func (*Script) AddBytes

func (s *Script) AddBytes(b ...[]byte) Script

func (*Script) Eval

func (s *Script) Eval(sighash []byte, witness [][]byte) bool

func (*Script) GetBytes

func (s *Script) GetBytes(index int) []byte

func (*Script) IsP2PKH

func (s *Script) IsP2PKH() bool

IsP2PKH returns whether this follows the:

`OP_DUP OP_HASH160 <20 byte hash> OP_EQUALVERIFY OP_CHECKSIG` pattern

func (*Script) IsP2WPKH

func (s *Script) IsP2WPKH() bool

IsP2WPKH returns whether this follows the:

`OP_0 <20 byte hash>` pattern

func (*Script) Marshal

func (s *Script) Marshal() ([]byte, error)

func (*Script) Unmarshal

func (s *Script) Unmarshal(r io.Reader) *Script

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL