Bitcoin Core 28.99.0
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 <uint256.h>
#include <util/hash_type.h>
#include <cassert>
#include <cstdint>
#include <cstring>
#include <limits>
#include <span>
#include <stdexcept>
#include <string>
#include <type_traits>
#include <utility>
#include <vector>
Include dependency graph for script.h:

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...
 
struct  CScriptWitness
 
class  CScriptID
 A reference to a CScript: the Hash160 of its serialization. More...
 

Typedefs

typedef prevector< 28, unsigned char > 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_SUBSTR = 0x7f , OP_LEFT = 0x80 ,
  OP_RIGHT = 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_CHECKSIGADD = 0xba ,
  OP_INVALIDOPCODE = 0xff
}
 Script opcodes. More...
 

Functions

template<typename T >
std::vector< unsigned char > ToByteVector (const T &in)
 
std::string GetOpName (opcodetype opcode)
 
bool GetScriptOp (CScriptBase::const_iterator &pc, CScriptBase::const_iterator end, opcodetype &opcodeRet, std::vector< unsigned char > *pvchRet)
 
bool IsOpSuccess (const opcodetype &opcode)
 Test for OP_SUCCESSx opcodes as defined by BIP342. More...
 
bool CheckMinimalPush (const std::vector< unsigned char > &data, opcodetype opcode)
 
template<typename... Ts>
CScript BuildScript (Ts &&... inputs)
 Build a script by concatenating other scripts, or any argument accepted by CScript::operator<<. More...
 

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 constexpr unsigned int MAX_PUBKEYS_PER_MULTI_A = 999
 The limit of keys in OP_CHECKSIGADD-based scripts. More...
 
static const int MAX_SCRIPT_SIZE = 10000
 
static const int MAX_STACK_SIZE = 1000
 
static const unsigned int LOCKTIME_THRESHOLD = 500000000
 
static const uint32_t LOCKTIME_MAX = 0xFFFFFFFFU
 
static constexpr unsigned int ANNEX_TAG = 0x50
 
static constexpr int64_t VALIDATION_WEIGHT_PER_SIGOP_PASSED {50}
 
static constexpr int64_t VALIDATION_WEIGHT_OFFSET {50}
 
static const unsigned int MAX_OPCODE = OP_NOP10
 

Typedef Documentation

◆ CScriptBase

typedef prevector<28, unsigned char> 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 409 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_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_CHECKLOCKTIMEVERIFY 
OP_NOP2 
OP_CHECKSEQUENCEVERIFY 
OP_NOP3 
OP_NOP4 
OP_NOP5 
OP_NOP6 
OP_NOP7 
OP_NOP8 
OP_NOP9 
OP_NOP10 
OP_CHECKSIGADD 
OP_INVALIDOPCODE 

Definition at line 73 of file script.h.

Function Documentation

◆ BuildScript()

template<typename... Ts>
CScript BuildScript ( Ts &&...  inputs)

Build a script by concatenating other scripts, or any argument accepted by CScript::operator<<.

Definition at line 616 of file script.h.

Here is the caller graph for this function:

◆ CheckMinimalPush()

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

Definition at line 366 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 18 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< unsigned char > *  pvchRet 
)

Definition at line 306 of file script.cpp.

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

◆ IsOpSuccess()

bool IsOpSuccess ( const opcodetype opcode)

Test for OP_SUCCESSx opcodes as defined by BIP342.

Definition at line 358 of file script.cpp.

Here is the caller graph for this function:

◆ ToByteVector()

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

Definition at line 67 of file script.h.

Here is the caller graph for this function:

Variable Documentation

◆ ANNEX_TAG

constexpr unsigned int ANNEX_TAG = 0x50
staticconstexpr

Definition at line 58 of file script.h.

◆ LOCKTIME_MAX

const uint32_t LOCKTIME_MAX = 0xFFFFFFFFU
static

Definition at line 53 of file script.h.

◆ LOCKTIME_THRESHOLD

const unsigned int LOCKTIME_THRESHOLD = 500000000
static

Definition at line 47 of file script.h.

◆ MAX_OPCODE

const unsigned int MAX_OPCODE = OP_NOP10
static

Definition at line 216 of file script.h.

◆ MAX_OPS_PER_SCRIPT

const int MAX_OPS_PER_SCRIPT = 201
static

Definition at line 31 of file script.h.

◆ MAX_PUBKEYS_PER_MULTI_A

constexpr unsigned int MAX_PUBKEYS_PER_MULTI_A = 999
staticconstexpr

The limit of keys in OP_CHECKSIGADD-based scripts.

It is due to the stack limit in BIP342.

Definition at line 37 of file script.h.

◆ MAX_PUBKEYS_PER_MULTISIG

const int MAX_PUBKEYS_PER_MULTISIG = 20
static

Definition at line 34 of file script.h.

◆ MAX_SCRIPT_ELEMENT_SIZE

const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520
static

Definition at line 28 of file script.h.

◆ MAX_SCRIPT_SIZE

const int MAX_SCRIPT_SIZE = 10000
static

Definition at line 40 of file script.h.

◆ MAX_STACK_SIZE

const int MAX_STACK_SIZE = 1000
static

Definition at line 43 of file script.h.

◆ VALIDATION_WEIGHT_OFFSET

constexpr int64_t VALIDATION_WEIGHT_OFFSET {50}
staticconstexpr

Definition at line 64 of file script.h.

◆ VALIDATION_WEIGHT_PER_SIGOP_PASSED

constexpr int64_t VALIDATION_WEIGHT_PER_SIGOP_PASSED {50}
staticconstexpr

Definition at line 61 of file script.h.