Bitcoin ABC 0.30.5
P2P Digital Currency
|
#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>
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 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.
enum opcodetype |
Script opcodes.
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.
std::string GetOpName | ( | opcodetype | opcode | ) |
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.
std::vector< uint8_t > ToByteVector | ( | const T & | in | ) |
|
static |