Bitcoin ABC  0.29.4
P2P Digital Currency
Classes | Typedefs | Enumerations | Functions | Variables
script.h File Reference
#include <attributes.h>
#include <crypto/common.h>
#include <prevector.h>
#include <serialize.h>
#include <cassert>
#include <climits>
#include <cstdint>
#include <cstring>
#include <limits>
#include <stdexcept>
#include <string>
#include <vector>
Include dependency graph for script.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  scriptnum_error
 
class  CScriptNum
 
class  CScript
 Serialized script, used inside transaction inputs and outputs. More...
 

Typedefs

typedef prevector< 28, uint8_t > CScriptBase
 We use a prevector for the script to reduce the considerable memory overhead of vectors in cases where they normally contain a small number of small elements. More...
 

Enumerations

enum  opcodetype {
  OP_0 = 0x00 , OP_FALSE = OP_0 , OP_PUSHDATA1 = 0x4c , OP_PUSHDATA2 = 0x4d ,
  OP_PUSHDATA4 = 0x4e , OP_1NEGATE = 0x4f , OP_RESERVED = 0x50 , OP_1 = 0x51 ,
  OP_TRUE = OP_1 , OP_2 = 0x52 , OP_3 = 0x53 , OP_4 = 0x54 ,
  OP_5 = 0x55 , OP_6 = 0x56 , OP_7 = 0x57 , OP_8 = 0x58 ,
  OP_9 = 0x59 , OP_10 = 0x5a , OP_11 = 0x5b , OP_12 = 0x5c ,
  OP_13 = 0x5d , OP_14 = 0x5e , OP_15 = 0x5f , OP_16 = 0x60 ,
  OP_NOP = 0x61 , OP_VER = 0x62 , OP_IF = 0x63 , OP_NOTIF = 0x64 ,
  OP_VERIF = 0x65 , OP_VERNOTIF = 0x66 , OP_ELSE = 0x67 , OP_ENDIF = 0x68 ,
  OP_VERIFY = 0x69 , OP_RETURN = 0x6a , OP_TOALTSTACK = 0x6b , OP_FROMALTSTACK = 0x6c ,
  OP_2DROP = 0x6d , OP_2DUP = 0x6e , OP_3DUP = 0x6f , OP_2OVER = 0x70 ,
  OP_2ROT = 0x71 , OP_2SWAP = 0x72 , OP_IFDUP = 0x73 , OP_DEPTH = 0x74 ,
  OP_DROP = 0x75 , OP_DUP = 0x76 , OP_NIP = 0x77 , OP_OVER = 0x78 ,
  OP_PICK = 0x79 , OP_ROLL = 0x7a , OP_ROT = 0x7b , OP_SWAP = 0x7c ,
  OP_TUCK = 0x7d , OP_CAT = 0x7e , OP_SPLIT = 0x7f , OP_NUM2BIN = 0x80 ,
  OP_BIN2NUM = 0x81 , OP_SIZE = 0x82 , OP_INVERT = 0x83 , OP_AND = 0x84 ,
  OP_OR = 0x85 , OP_XOR = 0x86 , OP_EQUAL = 0x87 , OP_EQUALVERIFY = 0x88 ,
  OP_RESERVED1 = 0x89 , OP_RESERVED2 = 0x8a , OP_1ADD = 0x8b , OP_1SUB = 0x8c ,
  OP_2MUL = 0x8d , OP_2DIV = 0x8e , OP_NEGATE = 0x8f , OP_ABS = 0x90 ,
  OP_NOT = 0x91 , OP_0NOTEQUAL = 0x92 , OP_ADD = 0x93 , OP_SUB = 0x94 ,
  OP_MUL = 0x95 , OP_DIV = 0x96 , OP_MOD = 0x97 , OP_LSHIFT = 0x98 ,
  OP_RSHIFT = 0x99 , OP_BOOLAND = 0x9a , OP_BOOLOR = 0x9b , OP_NUMEQUAL = 0x9c ,
  OP_NUMEQUALVERIFY = 0x9d , OP_NUMNOTEQUAL = 0x9e , OP_LESSTHAN = 0x9f , OP_GREATERTHAN = 0xa0 ,
  OP_LESSTHANOREQUAL = 0xa1 , OP_GREATERTHANOREQUAL = 0xa2 , OP_MIN = 0xa3 , OP_MAX = 0xa4 ,
  OP_WITHIN = 0xa5 , OP_RIPEMD160 = 0xa6 , OP_SHA1 = 0xa7 , OP_SHA256 = 0xa8 ,
  OP_HASH160 = 0xa9 , OP_HASH256 = 0xaa , OP_CODESEPARATOR = 0xab , OP_CHECKSIG = 0xac ,
  OP_CHECKSIGVERIFY = 0xad , OP_CHECKMULTISIG = 0xae , OP_CHECKMULTISIGVERIFY = 0xaf , OP_NOP1 = 0xb0 ,
  OP_CHECKLOCKTIMEVERIFY = 0xb1 , OP_NOP2 = OP_CHECKLOCKTIMEVERIFY , OP_CHECKSEQUENCEVERIFY = 0xb2 , OP_NOP3 = OP_CHECKSEQUENCEVERIFY ,
  OP_NOP4 = 0xb3 , OP_NOP5 = 0xb4 , OP_NOP6 = 0xb5 , OP_NOP7 = 0xb6 ,
  OP_NOP8 = 0xb7 , OP_NOP9 = 0xb8 , OP_NOP10 = 0xb9 , OP_CHECKDATASIG = 0xba ,
  OP_CHECKDATASIGVERIFY = 0xbb , OP_REVERSEBYTES = 0xbc , FIRST_UNDEFINED_OP_VALUE , OP_PREFIX_BEGIN = 0xf0 ,
  OP_PREFIX_END = 0xf7 , OP_INVALIDOPCODE = 0xff
}
 Script opcodes. More...
 

Functions

template<typename T >
std::vector< uint8_t > ToByteVector (const T &in)
 
std::string GetOpName (opcodetype opcode)
 
bool CheckMinimalPush (const std::vector< uint8_t > &data, opcodetype opcode)
 Check whether the given stack element data would be minimally pushed using the given opcode. More...
 
bool GetScriptOp (CScriptBase::const_iterator &pc, CScriptBase::const_iterator end, opcodetype &opcodeRet, std::vector< uint8_t > *pvchRet)
 

Variables

static const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520
 
static const int MAX_OPS_PER_SCRIPT = 201
 
static const int MAX_PUBKEYS_PER_MULTISIG = 20
 
static const int MAX_SCRIPT_SIZE = 10000
 
static const int MAX_STACK_SIZE = 1000
 
static const unsigned int LOCKTIME_THRESHOLD = 500000000
 
static const unsigned int MAX_OPCODE = FIRST_UNDEFINED_OP_VALUE - 1
 

Typedef Documentation

◆ CScriptBase

typedef prevector<28, uint8_t> CScriptBase

We use a prevector for the script to reduce the considerable memory overhead of vectors in cases where they normally contain a small number of small elements.

Tests in October 2015 showed use of this reduced dbcache memory usage by 23% and made an initial sync 13% faster.

Definition at line 424 of file script.h.

Enumeration Type Documentation

◆ opcodetype

enum opcodetype

Script opcodes.

Enumerator
OP_0 
OP_FALSE 
OP_PUSHDATA1 
OP_PUSHDATA2 
OP_PUSHDATA4 
OP_1NEGATE 
OP_RESERVED 
OP_1 
OP_TRUE 
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_SPLIT 
OP_NUM2BIN 
OP_BIN2NUM 
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_CHECKLOCKTIMEVERIFY 
OP_NOP2 
OP_CHECKSEQUENCEVERIFY 
OP_NOP3 
OP_NOP4 
OP_NOP5 
OP_NOP6 
OP_NOP7 
OP_NOP8 
OP_NOP9 
OP_NOP10 
OP_CHECKDATASIG 
OP_CHECKDATASIGVERIFY 
OP_REVERSEBYTES 
FIRST_UNDEFINED_OP_VALUE 
OP_PREFIX_BEGIN 
OP_PREFIX_END 
OP_INVALIDOPCODE 

Definition at line 47 of file script.h.

Function Documentation

◆ CheckMinimalPush()

bool CheckMinimalPush ( const std::vector< uint8_t > &  data,
opcodetype  opcode 
)

Check whether the given stack element data would be minimally pushed using the given opcode.

Definition at line 268 of file script.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetOpName()

std::string GetOpName ( opcodetype  opcode)

Definition at line 14 of file script.cpp.

Here is the caller graph for this function:

◆ GetScriptOp()

bool GetScriptOp ( CScriptBase::const_iterator pc,
CScriptBase::const_iterator  end,
opcodetype opcodeRet,
std::vector< uint8_t > *  pvchRet 
)

Definition at line 426 of file script.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ToByteVector()

template<typename T >
std::vector<uint8_t> ToByteVector ( const T &  in)

Definition at line 42 of file script.h.

Here is the caller graph for this function:

Variable Documentation

◆ LOCKTIME_THRESHOLD

const unsigned int LOCKTIME_THRESHOLD = 500000000
static

Definition at line 40 of file script.h.

◆ MAX_OPCODE

const unsigned int MAX_OPCODE = FIRST_UNDEFINED_OP_VALUE - 1
static

Definition at line 200 of file script.h.

◆ MAX_OPS_PER_SCRIPT

const int MAX_OPS_PER_SCRIPT = 201
static

Definition at line 27 of file script.h.

◆ MAX_PUBKEYS_PER_MULTISIG

const int MAX_PUBKEYS_PER_MULTISIG = 20
static

Definition at line 30 of file script.h.

◆ MAX_SCRIPT_ELEMENT_SIZE

const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520
static

Definition at line 24 of file script.h.

◆ MAX_SCRIPT_SIZE

const int MAX_SCRIPT_SIZE = 10000
static

Definition at line 33 of file script.h.

◆ MAX_STACK_SIZE

const int MAX_STACK_SIZE = 1000
static

Definition at line 36 of file script.h.