Enum OpCode

Source
#[non_exhaustive]
#[repr(u8)]
pub enum OpCode {
Show 187 variants PushBytes0 = 0, PushBytes1 = 1, PushBytes2 = 2, PushBytes3 = 3, PushBytes4 = 4, PushBytes5 = 5, PushBytes6 = 6, PushBytes7 = 7, PushBytes8 = 8, PushBytes9 = 9, PushBytes10 = 10, PushBytes11 = 11, PushBytes12 = 12, PushBytes13 = 13, PushBytes14 = 14, PushBytes15 = 15, PushBytes16 = 16, PushBytes17 = 17, PushBytes18 = 18, PushBytes19 = 19, PushBytes20 = 20, PushBytes21 = 21, PushBytes22 = 22, PushBytes23 = 23, PushBytes24 = 24, PushBytes25 = 25, PushBytes26 = 26, PushBytes27 = 27, PushBytes28 = 28, PushBytes29 = 29, PushBytes30 = 30, PushBytes31 = 31, PushBytes32 = 32, PushBytes33 = 33, PushBytes34 = 34, PushBytes35 = 35, PushBytes36 = 36, PushBytes37 = 37, PushBytes38 = 38, PushBytes39 = 39, PushBytes40 = 40, PushBytes41 = 41, PushBytes42 = 42, PushBytes43 = 43, PushBytes44 = 44, PushBytes45 = 45, PushBytes46 = 46, PushBytes47 = 47, PushBytes48 = 48, PushBytes49 = 49, PushBytes50 = 50, PushBytes51 = 51, PushBytes52 = 52, PushBytes53 = 53, PushBytes54 = 54, PushBytes55 = 55, PushBytes56 = 56, PushBytes57 = 57, PushBytes58 = 58, PushBytes59 = 59, PushBytes60 = 60, PushBytes61 = 61, PushBytes62 = 62, PushBytes63 = 63, PushBytes64 = 64, PushBytes65 = 65, PushBytes66 = 66, PushBytes67 = 67, PushBytes68 = 68, PushBytes69 = 69, PushBytes70 = 70, PushBytes71 = 71, PushBytes72 = 72, PushBytes73 = 73, PushByte764 = 74, PushBytes75 = 75, PushData1 = 76, PushData2 = 77, PushData4 = 78, PushNumNeg1 = 79, Reserved = 80, PushNum1 = 81, PushNum2 = 82, PushNum3 = 83, PushNum4 = 84, PushNum5 = 85, PushNum6 = 86, PushNum7 = 87, PushNum8 = 88, PushNum9 = 89, PushNum10 = 90, PushNum11 = 91, PushNum12 = 92, PushNum13 = 93, PushNum14 = 94, PushNum15 = 95, PushNum16 = 96, Nop = 97, Ver = 98, If = 99, NotIf = 100, VerIf = 101, VerNotIf = 102, Else = 103, EndIf = 104, Verify = 105, Return = 106, ToAltStack = 107, FromAltStack = 108, Drop2 = 109, Dup2 = 110, Dup3 = 111, Over2 = 112, Rot2 = 113, Swap2 = 114, IfDup = 115, Depth = 116, Drop = 117, Dup = 118, Nip = 119, Over = 120, Pick = 121, Roll = 122, Rot = 123, Swap = 124, Tuck = 125, Cat = 126, SubStr = 127, Left = 128, Right = 129, Size = 130, Invert = 131, And = 132, Or = 133, Xor = 134, Equal = 135, EqualVerify = 136, Reserved1 = 137, Reserved2 = 138, Add1 = 139, Sub1 = 140, Mul2 = 141, Div2 = 142, Negate = 143, Abs = 144, Not = 145, NotEqual0 = 146, Add = 147, Sub = 148, Mul = 149, Div = 150, Mod = 151, LShift = 152, RShift = 153, BoolAnd = 154, BoolOr = 155, NumEqual = 156, NumEqualVerify = 157, NumNotEqual = 158, LessThan = 159, GreaterThan = 160, LessThanOrEqual = 161, GreaterThanOrEqual = 162, Min = 163, Max = 164, Within = 165, Ripemd160 = 166, Sha1 = 167, Sha256 = 168, Hash160 = 169, Hash256 = 170, CodeSeparator = 171, CheckSig = 172, CheckSigVerify = 173, CheckMultiSig = 174, CheckMultisigVerify = 175, Nop1 = 176, Cltv = 177, Csv = 178, Nop4 = 179, Nop5 = 180, Nop6 = 181, Nop7 = 182, Nop8 = 183, Nop9 = 184, Nop10 = 185, InvalidOpCode = 255,
}

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

PushBytes0 = 0

Push an empty array onto the stack.

Also, a synonym for OP_0 and OP_FALSE.

§

PushBytes1 = 1

Push the next byte as an array onto the stack.

§

PushBytes2 = 2

Push the next 2 bytes as an array onto the stack.

§

PushBytes3 = 3

Push the next 3 bytes as an array onto the stack.

§

PushBytes4 = 4

Push the next 4 bytes as an array onto the stack.

§

PushBytes5 = 5

Push the next 5 bytes as an array onto the stack.

§

PushBytes6 = 6

Push the next 6 bytes as an array onto the stack.

§

PushBytes7 = 7

Push the next 7 bytes as an array onto the stack.

§

PushBytes8 = 8

Push the next 8 bytes as an array onto the stack.

§

PushBytes9 = 9

Push the next 9 bytes as an array onto the stack.

§

PushBytes10 = 10

Push the next 10 bytes as an array onto the stack.

§

PushBytes11 = 11

Push the next 11 bytes as an array onto the stack.

§

PushBytes12 = 12

Push the next 12 bytes as an array onto the stack.

§

PushBytes13 = 13

Push the next 13 bytes as an array onto the stack.

§

PushBytes14 = 14

Push the next 14 bytes as an array onto the stack.

§

PushBytes15 = 15

Push the next 15 bytes as an array onto the stack.

§

PushBytes16 = 16

Push the next 16 bytes as an array onto the stack.

§

PushBytes17 = 17

Push the next 17 bytes as an array onto the stack.

§

PushBytes18 = 18

Push the next 18 bytes as an array onto the stack.

§

PushBytes19 = 19

Push the next 19 bytes as an array onto the stack.

§

PushBytes20 = 20

Push the next 20 bytes as an array onto the stack.

§

PushBytes21 = 21

Push the next 21 bytes as an array onto the stack.

§

PushBytes22 = 22

Push the next 22 bytes as an array onto the stack.

§

PushBytes23 = 23

Push the next 23 bytes as an array onto the stack.

§

PushBytes24 = 24

Push the next 24 bytes as an array onto the stack.

§

PushBytes25 = 25

Push the next 25 bytes as an array onto the stack.

§

PushBytes26 = 26

Push the next 26 bytes as an array onto the stack.

§

PushBytes27 = 27

Push the next 27 bytes as an array onto the stack.

§

PushBytes28 = 28

Push the next 28 bytes as an array onto the stack.

§

PushBytes29 = 29

Push the next 29 bytes as an array onto the stack.

§

PushBytes30 = 30

Push the next 30 bytes as an array onto the stack.

§

PushBytes31 = 31

Push the next 31 byte as an array onto the stack.

§

PushBytes32 = 32

Push the next 32 bytes as an array onto the stack.

§

PushBytes33 = 33

Push the next 33 bytes as an array onto the stack.

§

PushBytes34 = 34

Push the next 34 bytes as an array onto the stack.

§

PushBytes35 = 35

Push the next 35 bytes as an array onto the stack.

§

PushBytes36 = 36

Push the next 36 bytes as an array onto the stack.

§

PushBytes37 = 37

Push the next 37 bytes as an array onto the stack.

§

PushBytes38 = 38

Push the next 38 bytes as an array onto the stack.

§

PushBytes39 = 39

Push the next 39 bytes as an array onto the stack.

§

PushBytes40 = 40

Push the next 40 bytes as an array onto the stack.

§

PushBytes41 = 41

Push the next 41 bytes as an array onto the stack.

§

PushBytes42 = 42

Push the next 42 bytes as an array onto the stack.

§

PushBytes43 = 43

Push the next 43 bytes as an array onto the stack.

§

PushBytes44 = 44

Push the next 44 bytes as an array onto the stack.

§

PushBytes45 = 45

Push the next 45 bytes as an array onto the stack.

§

PushBytes46 = 46

Push the next 46 bytes as an array onto the stack.

§

PushBytes47 = 47

Push the next 47 bytes as an array onto the stack.

§

PushBytes48 = 48

Push the next 48 bytes as an array onto the stack.

§

PushBytes49 = 49

Push the next 49 bytes as an array onto the stack.

§

PushBytes50 = 50

Push the next 50 bytes as an array onto the stack.

§

PushBytes51 = 51

Push the next 51 bytes as an array onto the stack.

§

PushBytes52 = 52

Push the next 52 bytes as an array onto the stack.

§

PushBytes53 = 53

Push the next 53 bytes as an array onto the stack.

§

PushBytes54 = 54

Push the next 54 bytes as an array onto the stack.

§

PushBytes55 = 55

Push the next 55 bytes as an array onto the stack.

§

PushBytes56 = 56

Push the next 56 bytes as an array onto the stack.

§

PushBytes57 = 57

Push the next 57 bytes as an array onto the stack.

§

PushBytes58 = 58

Push the next 58 bytes as an array onto the stack.

§

PushBytes59 = 59

Push the next 59 bytes as an array onto the stack.

§

PushBytes60 = 60

Push the next 60 bytes as an array onto the stack.

§

PushBytes61 = 61

Push the next 61 bytes as an array onto the stack.

§

PushBytes62 = 62

Push the next 62 bytes as an array onto the stack.

§

PushBytes63 = 63

Push the next 63 bytes as an array onto the stack.

§

PushBytes64 = 64

Push the next 64 bytes as an array onto the stack.

§

PushBytes65 = 65

Push the next 65 bytes as an array onto the stack.

§

PushBytes66 = 66

Push the next 66 bytes as an array onto the stack.

§

PushBytes67 = 67

Push the next 67 bytes as an array onto the stack.

§

PushBytes68 = 68

Push the next 68 bytes as an array onto the stack.

§

PushBytes69 = 69

Push the next 69 bytes as an array onto the stack.

§

PushBytes70 = 70

Push the next 70 bytes as an array onto the stack.

§

PushBytes71 = 71

Push the next 71 bytes as an array onto the stack.

§

PushBytes72 = 72

Push the next 72 bytes as an array onto the stack.

§

PushBytes73 = 73

Push the next 73 bytes as an array onto the stack.

§

PushByte764 = 74

Push the next 74 bytes as an array onto the stack.

§

PushBytes75 = 75

Push the next 75 bytes as an array onto the stack.

§

PushData1 = 76

Read the next byte as N; push the next N bytes as an array onto the stack.

§

PushData2 = 77

Read the next 2 bytes as N; push the next N bytes as an array onto the stack.

§

PushData4 = 78

Read the next 4 bytes as N; push the next N bytes as an array onto the stack.

§

PushNumNeg1 = 79

Push the array 0x81 onto the stack.

§

Reserved = 80

Synonym for OP_RETURN.

§

PushNum1 = 81

Push the array 0x01 onto the stack.

Also, a synonym for OP_1 and OP_TRUE.

§

PushNum2 = 82

Push the array 0x02 onto the stack.

§

PushNum3 = 83

Push the array 0x03 onto the stack.

§

PushNum4 = 84

Push the array 0x04 onto the stack.

§

PushNum5 = 85

Push the array 0x05 onto the stack.

§

PushNum6 = 86

Push the array 0x06 onto the stack.

§

PushNum7 = 87

Push the array 0x07 onto the stack.

§

PushNum8 = 88

Push the array 0x08 onto the stack.

§

PushNum9 = 89

Push the array 0x09 onto the stack.

§

PushNum10 = 90

Push the array 0x0A onto the stack.

§

PushNum11 = 91

Push the array 0x0B onto the stack.

§

PushNum12 = 92

Push the array 0x0C onto the stack.

§

PushNum13 = 93

Push the array 0x0D onto the stack.

§

PushNum14 = 94

Push the array 0x0E onto the stack.

§

PushNum15 = 95

Push the array 0x0F onto the stack.

§

PushNum16 = 96

Push the array 0x10 onto the stack.

§

Nop = 97

Does nothing.

§

Ver = 98

Synonym for OP_RETURN.

§

If = 99

Pop and execute the next statements if a nonzero element was popped.

§

NotIf = 100

Pop and execute the next statements if a zero element was popped.

§

VerIf = 101

Fail the script unconditionally, does not even need to be executed.

§

VerNotIf = 102

Fail the script unconditionally, does not even need to be executed.

§

Else = 103

Execute statements if those after the previous OP_IF were not, and vice versa. If there is no previous OP_IF, this acts as an OP_RETURN.

§

EndIf = 104

Pop and execute the next statements if a zero element was popped.

§

Verify = 105

If the top value is zero or the stack is empty, fail; otherwise, pop the stack.

§

Return = 106

Fail the script immediately.

§

ToAltStack = 107

§

FromAltStack = 108

Pop one element from the alt stack onto the main stack.

§

Drop2 = 109

Drops the top two stack items.

§

Dup2 = 110

Duplicates the top two stack items as AB -> ABAB.

§

Dup3 = 111

Duplicates the two three stack items as ABC -> ABCABC.

§

Over2 = 112

Copies the two stack items of items two spaces back to the front, as xxAB -> ABxxAB.

§

Rot2 = 113

Moves the two stack items four spaces back to the front, as xxxxAB -> ABxxxx.

§

Swap2 = 114

Swaps the top two pairs, as ABCD -> CDAB.

§

IfDup = 115

Duplicate the top stack element unless it is zero.

§

Depth = 116

Push the current number of stack items onto the stack.

§

Drop = 117

Drops the top stack item.

§

Dup = 118

Duplicates the top stack item.

§

Nip = 119

Drops the second-to-top stack item.

§

Over = 120

Copies the second-to-top stack item, as xA -> AxA.

§

Pick = 121

Pop the top stack element as N. Copy the Nth stack element to the top.

§

Roll = 122

Pop the top stack element as N. Move the Nth stack element to the top.

§

Rot = 123

Rotate the top three stack items, as [top next1 next2] -> [next2 top next1].

§

Swap = 124

Swap the top two stack items.

§

Tuck = 125

Copy the top stack item to before the second item, as [top next] -> [top next top].

§

Cat = 126

Fail the script unconditionally, does not even need to be executed.

§

SubStr = 127

Fail the script unconditionally, does not even need to be executed.

§

Left = 128

Fail the script unconditionally, does not even need to be executed.

§

Right = 129

Fail the script unconditionally, does not even need to be executed.

§

Size = 130

Pushes the length of the top stack item onto the stack.

§

Invert = 131

Fail the script unconditionally, does not even need to be executed.

§

And = 132

Fail the script unconditionally, does not even need to be executed.

§

Or = 133

Fail the script unconditionally, does not even need to be executed.

§

Xor = 134

Fail the script unconditionally, does not even need to be executed.

§

Equal = 135

Pushes 1 if the inputs are exactly equal, 0 otherwise.

§

EqualVerify = 136

Returns success if the inputs are exactly equal, failure otherwise.

§

Reserved1 = 137

Synonym for OP_RETURN.

§

Reserved2 = 138

Synonym for OP_RETURN.

§

Add1 = 139

Increment the top stack element in place.

§

Sub1 = 140

Decrement the top stack element in place.

§

Mul2 = 141

Fail the script unconditionally, does not even need to be executed.

§

Div2 = 142

Fail the script unconditionally, does not even need to be executed.

§

Negate = 143

Multiply the top stack item by -1 in place.

§

Abs = 144

Absolute value the top stack item in place.

§

Not = 145

Map 0 to 1 and everything else to 0, in place.

§

NotEqual0 = 146

Map 0 to 0 and everything else to 1, in place.

§

Add = 147

Pop two stack items and push their sum.

§

Sub = 148

Pop two stack items and push the second minus the top.

§

Mul = 149

Fail the script unconditionally, does not even need to be executed.

§

Div = 150

Fail the script unconditionally, does not even need to be executed.

§

Mod = 151

Fail the script unconditionally, does not even need to be executed.

§

LShift = 152

Fail the script unconditionally, does not even need to be executed.

§

RShift = 153

Fail the script unconditionally, does not even need to be executed.

§

BoolAnd = 154

Pop the top two stack items and push 1 if both are nonzero, else push 0.

§

BoolOr = 155

Pop the top two stack items and push 1 if either is nonzero, else push 0.

§

NumEqual = 156

Pop the top two stack items and push 1 if both are numerically equal, else push 0.

§

NumEqualVerify = 157

Pop the top two stack items and return success if both are numerically equal, else return failure.

§

NumNotEqual = 158

Pop the top two stack items and push 0 if both are numerically equal, else push 1.

§

LessThan = 159

Pop the top two items; push 1 if the second is less than the top, 0 otherwise.

§

GreaterThan = 160

Pop the top two items; push 1 if the second is greater than the top, 0 otherwise.

§

LessThanOrEqual = 161

Pop the top two items; push 1 if the second is <= the top, 0 otherwise.

§

GreaterThanOrEqual = 162

Pop the top two items; push 1 if the second is >= the top, 0 otherwise.

§

Min = 163

Pop the top two items; push the smaller.

§

Max = 164

Pop the top two items; push the larger.

§

Within = 165

Pop the top three items; if the top is >= the second and < the third, push 1, otherwise push 0.

§

Ripemd160 = 166

Pop the top stack item and push its RIPEMD160 hash.

§

Sha1 = 167

Pop the top stack item and push its SHA1 hash.

§

Sha256 = 168

Pop the top stack item and push its SHA256 hash.

§

Hash160 = 169

Pop the top stack item and push its RIPEMD(SHA256) hash.

§

Hash256 = 170

Pop the top stack item and push its SHA256(SHA256) hash.

§

CodeSeparator = 171

Ignore this and everything preceding when deciding what to sign when signature-checking.

§

CheckSig = 172

https://en.bitcoin.it/wiki/OP_CHECKSIG pushing 1/0 for success/failure.

§

CheckSigVerify = 173

https://en.bitcoin.it/wiki/OP_CHECKSIG returning success/failure.

§

CheckMultiSig = 174

Pop N, N pubkeys, M, M signatures, a dummy (due to bug in reference code), and verify that all M signatures are valid. Push 1 for ‘all valid’, 0 otherwise.

§

CheckMultisigVerify = 175

Like the above but return success/failure.

§

Nop1 = 176

Does nothing.

§

Cltv = 177

§

Csv = 178

§

Nop4 = 179

Does nothing.

§

Nop5 = 180

Does nothing.

§

Nop6 = 181

Does nothing.

§

Nop7 = 182

Does nothing.

§

Nop8 = 183

Does nothing.

§

Nop9 = 184

Does nothing.

§

Nop10 = 185

Does nothing.

§

InvalidOpCode = 255

Synonym for OP_RETURN.

Trait Implementations§

Source§

impl Clone for OpCode

Source§

fn clone(&self) -> OpCode

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for OpCode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Display for OpCode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Hash for OpCode

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for OpCode

Source§

fn eq(&self, other: &OpCode) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StrictDecode for OpCode

Source§

impl StrictDumb for OpCode

Source§

impl StrictEncode for OpCode

Source§

fn strict_encode<W>(&self, writer: W) -> Result<W, Error>
where W: TypedWrite,

Source§

fn strict_write(&self, writer: impl WriteRaw) -> Result<(), Error>

Source§

impl StrictEnum for OpCode

Source§

impl StrictSum for OpCode

Source§

impl StrictType for OpCode

Source§

const STRICT_LIB_NAME: &'static str = LIB_NAME_BITCOIN

Source§

fn strict_name() -> Option<TypeName>

Source§

impl TryFrom<u8> for OpCode

Source§

type Error = VariantError<u8>

The type returned in the event of a conversion error.
Source§

fn try_from(value: u8) -> Result<OpCode, <OpCode as TryFrom<u8>>::Error>

Performs the conversion.
Source§

impl Copy for OpCode

Source§

impl Eq for OpCode

Source§

impl StructuralPartialEq for OpCode

Auto Trait Implementations§

§

impl Freeze for OpCode

§

impl RefUnwindSafe for OpCode

§

impl Send for OpCode

§

impl Sync for OpCode

§

impl Unpin for OpCode

§

impl UnwindSafe for OpCode

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> VerifyEq for T
where T: Eq,

Source§

fn verify_eq(&self, other: &T) -> bool

Verifies commit-equivalence of two instances of the same type.