6 #ifndef BITCOIN_SCRIPT_SCRIPT_H 7 #define BITCOIN_SCRIPT_SCRIPT_H 50 return std::vector<unsigned char>(in.begin(), in.end());
223 explicit CScriptNum(
const std::vector<unsigned char>& vch,
bool fRequireMinimal,
226 if (vch.size() > nMaxNumSize) {
229 if (fRequireMinimal && vch.size() > 0) {
236 if ((vch.back() & 0x7f) == 0) {
242 if (vch.size() <= 1 || (vch[vch.size() - 2] & 0x80) == 0) {
279 assert(
m_value != std::numeric_limits<int64_t>::min());
291 assert(rhs == 0 || (rhs > 0 &&
m_value <= std::numeric_limits<int64_t>::max() - rhs) ||
292 (rhs < 0 && m_value >= std::numeric_limits<int64_t>::min() - rhs));
299 assert(rhs == 0 || (rhs > 0 &&
m_value >= std::numeric_limits<int64_t>::min() + rhs) ||
300 (rhs < 0 &&
m_value <= std::numeric_limits<int64_t>::max() + rhs));
313 if (
m_value > std::numeric_limits<int>::max())
314 return std::numeric_limits<int>::max();
315 else if (
m_value < std::numeric_limits<int>::min())
316 return std::numeric_limits<int>::min();
320 std::vector<unsigned char>
getvch()
const 328 return std::vector<unsigned char>();
330 std::vector<unsigned char> result;
331 const bool neg = value < 0;
332 uint64_t absvalue = neg ? -value : value;
336 result.push_back(absvalue & 0xff);
350 if (result.back() & 0x80)
351 result.push_back(neg ? 0x80 : 0);
353 result.back() |= 0x80;
365 for (
size_t i = 0; i != vch.size(); ++i)
366 result |= static_cast<int64_t>(vch[i]) << 8*i;
370 if (vch.back() & 0x80)
371 return -((
int64_t)(result & ~(0x80ULL << (8 * (vch.size() - 1)))));
395 if (n == -1 || (n >= 1 && n <= 16))
412 CScript(std::vector<unsigned char>::const_iterator pbegin, std::vector<unsigned char>::const_iterator pend) :
CScriptBase(pbegin, pend) { }
417 template <
typename Stream,
typename Operation>
442 explicit CScript(
const std::vector<unsigned char>& b) =
delete;
449 if (opcode < 0 || opcode > 0xff)
450 throw std::runtime_error(
"CScript::operator<<(): invalid opcode");
467 else if (b.size() <= 0xff)
472 else if (b.size() <= 0xffff)
477 insert(
end(), _data, _data +
sizeof(_data));
484 insert(
end(), _data, _data +
sizeof(_data));
494 assert(!
"Warning: Pushing a CScript onto a CScript with << is probably not intended, use + to concatenate!");
515 assert(opcode >=
OP_1 && opcode <=
OP_16);
516 return (
int)opcode - (int)(
OP_1 - 1);
520 assert(n >= 0 && n <= 16);
543 bool IsWitnessProgram(
int& version, std::vector<unsigned char>& program)
const;
574 std::vector<std::vector<unsigned char> >
stack;
586 #endif // BITCOIN_SCRIPT_SCRIPT_H
CScript & operator<<(const std::vector< unsigned char > &b)
Definition: script.h:461
unsigned int GetSigOpCount(bool fAccurate) const
Definition: script.cpp:148
CScriptNum operator-(const CScriptNum &rhs) const
Definition: script.h:267
int64_t m_value
Definition: script.h:376
static const int MAX_PUBKEYS_PER_MULTISIG
Definition: script.h:29
CScriptNum operator &(const int64_t &rhs) const
Definition: script.h:272
CScript(const unsigned char *pbegin, const unsigned char *pend)
Definition: script.h:413
void SetNull()
Definition: script.h:581
void shrink_to_fit()
Definition: prevector.h:334
iterator insert(iterator pos, const T &value)
Definition: prevector.h:342
static const unsigned int MAX_OPCODE
Definition: script.h:194
void clear()
Definition: prevector.h:338
static void WriteLE16(unsigned char *ptr, uint16_t x)
Definition: common.h:38
bool operator>(const int64_t &rhs) const
Definition: script.h:255
end
Definition: optimize-pngs.py:40
static std::vector< unsigned char > serialize(const int64_t &value)
Definition: script.h:325
bool IsNull() const
Definition: script.h:579
static void WriteLE32(unsigned char *ptr, uint32_t x)
Definition: common.h:44
void SerializationOp(Stream &s, Operation ser_action)
Definition: script.h:418
CScriptNum operator+(const int64_t &rhs) const
Definition: script.h:264
bool operator!=(const int64_t &rhs) const
Definition: script.h:251
bool operator==(const int64_t &rhs) const
Definition: script.h:250
CScriptNum(const std::vector< unsigned char > &vch, bool fRequireMinimal, const size_t nMaxNumSize=nDefaultMaxNumSize)
Definition: script.h:223
CScript & operator<<(const CScriptNum &b)
Definition: script.h:455
Definition: prevector.h:99
CScript & operator<<(int64_t b)
Definition: script.h:445
bool operator!=(const CScriptNum &rhs) const
Definition: script.h:258
bool IsPushOnly() const
Definition: script.cpp:248
unsigned char uint8_t
Definition: stdint.h:19
static const unsigned int MAX_SCRIPT_ELEMENT_SIZE
Definition: script.h:23
std::vector< unsigned char > getvch() const
Definition: script.h:320
#define READWRITEAS(type, obj)
Definition: serialize.h:185
CScript(const_iterator pbegin, const_iterator pend)
Definition: script.h:411
static const int MAX_OPS_PER_SCRIPT
Definition: script.h:26
const char * GetOpName(opcodetype opcode)
Definition: script.cpp:10
CScriptNum & operator&=(const int64_t &rhs)
Definition: script.h:305
CScriptWitness()
Definition: script.h:577
CScriptNum & operator=(const int64_t &rhs)
Definition: script.h:283
CScriptNum & operator-=(const CScriptNum &rhs)
Definition: script.h:270
bool IsUnspendable() const
Definition: script.h:557
iterator end()
Definition: prevector.h:287
void push_back(const T &value)
Definition: prevector.h:422
opcodetype
Definition: script.h:54
friend CScript operator+(const CScript &a, const CScript &b)
Definition: script.h:429
bool operator==(const CScriptNum &rhs) const
Definition: script.h:257
bool operator>=(const CScriptNum &rhs) const
Definition: script.h:261
unsigned int uint32_t
Definition: stdint.h:21
prevector< 28, unsigned char > CScriptBase
Definition: script.h:385
std::vector< std::vector< unsigned char > > stack
Definition: script.h:574
unsigned long long uint64_t
Definition: stdint.h:22
bool operator<(const int64_t &rhs) const
Definition: script.h:253
bool IsWitnessProgram(int &version, std::vector< unsigned char > &program) const
Definition: script.cpp:215
bool operator<=(const CScriptNum &rhs) const
Definition: script.h:259
scriptnum_error(const std::string &str)
Definition: script.h:201
CScript()
Definition: script.h:410
bool IsPayToScriptHash() const
Definition: script.cpp:196
CScript & operator<<(const CScript &b)
Definition: script.h:490
ADD_SERIALIZE_METHODS
Definition: script.h:415
bool GetOp(const_iterator &pc, opcodetype &opcodeRet) const
Definition: script.h:504
static const int MAX_SCRIPT_SIZE
Definition: script.h:32
static const int MAX_STACK_SIZE
Definition: script.h:35
Definition: prevector.h:38
CScript(int64_t b)
Definition: script.h:436
bool GetScriptOp(CScriptBase::const_iterator &pc, CScriptBase::const_iterator end, opcodetype &opcodeRet, std::vector< unsigned char > *pvchRet)
Definition: script.cpp:278
CScript & operator<<(opcodetype opcode)
Definition: script.h:447
void reserve(size_type new_capacity)
Definition: prevector.h:328
CScriptNum operator+(const CScriptNum &rhs) const
Definition: script.h:266
CScriptNum(const int64_t &n)
Definition: script.h:216
CScript(opcodetype b)
Definition: script.h:438
int getint() const
Definition: script.h:311
CScriptNum operator-(const int64_t &rhs) const
Definition: script.h:265
bool operator<=(const int64_t &rhs) const
Definition: script.h:252
CScriptNum & operator+=(const CScriptNum &rhs)
Definition: script.h:269
bool HasValidOps() const
Definition: script.cpp:265
CScript & operator+=(const CScript &b)
Definition: script.h:422
CScriptNum operator-() const
Definition: script.h:277
iterator begin()
Definition: prevector.h:285
CScriptNum & operator&=(const CScriptNum &rhs)
Definition: script.h:275
signed long long int64_t
Definition: stdint.h:18
size_type size() const
Definition: prevector.h:277
CScript(const CScriptNum &b)
Definition: script.h:439
CScriptNum & operator+=(const int64_t &rhs)
Definition: script.h:289
bool operator>=(const int64_t &rhs) const
Definition: script.h:254
CScript & push_int64(int64_t n)
Definition: script.h:393
std::string ToString() const
Definition: script.cpp:253
bool IsPayToWitnessScriptHash() const
Definition: script.cpp:205
static const unsigned int LOCKTIME_THRESHOLD
Definition: script.h:39
CScript(std::vector< unsigned char >::const_iterator pbegin, std::vector< unsigned char >::const_iterator pend)
Definition: script.h:412
void clear()
Definition: script.h:562
static int DecodeOP_N(opcodetype opcode)
Definition: script.h:511
static const uint32_t LOCKTIME_MAX
Definition: script.h:45
CScriptNum & operator-=(const int64_t &rhs)
Definition: script.h:297
static opcodetype EncodeOP_N(int n)
Definition: script.h:518
static const size_t nDefaultMaxNumSize
Definition: script.h:221
static int64_t set_vch(const std::vector< unsigned char > &vch)
Definition: script.h:359
std::vector< unsigned char > ToByteVector(const T &in)
Definition: script.h:48
bool GetOp(const_iterator &pc, opcodetype &opcodeRet, std::vector< unsigned char > &vchRet) const
Definition: script.h:499