extend script_builder
This commit is contained in:
parent
30717b73ae
commit
9842a11846
2 changed files with 21 additions and 6 deletions
|
|
@ -12,14 +12,23 @@ script_builder& script_builder::operator<<( op opcode )
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
script_builder& script_builder::operator<<( uint8_t number )
|
script_builder& script_builder::operator<<( uint32_t number )
|
||||||
{
|
{
|
||||||
FC_ASSERT( 0 <= number && number <= 16 );
|
if ( number == 0 ) {
|
||||||
|
|
||||||
if ( number == 0 )
|
|
||||||
script.push_back( static_cast<uint8_t>( op::_0 ) );
|
script.push_back( static_cast<uint8_t>( op::_0 ) );
|
||||||
else
|
} else if ( number <= 16) {
|
||||||
script.push_back( static_cast<uint8_t>( op::_1 ) + number - 1 );
|
script.push_back( static_cast<uint8_t>( op::_1 ) + number - 1 );
|
||||||
|
} else {
|
||||||
|
while (number) {
|
||||||
|
script.push_back(number & 0xff);
|
||||||
|
number >>= 8;
|
||||||
|
}
|
||||||
|
// - If the most significant byte is >= 0x80 and the value is positive, push a
|
||||||
|
// new zero-byte to make the significant byte < 0x80 again. So, the result can
|
||||||
|
// be 5 bytes max.
|
||||||
|
if (script.back() & 0x80)
|
||||||
|
script.push_back(0);
|
||||||
|
}
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,14 +25,20 @@ enum class op {
|
||||||
_16 = 0x60,
|
_16 = 0x60,
|
||||||
|
|
||||||
// control
|
// control
|
||||||
|
IF = 0x63,
|
||||||
|
ENDIF = 0x68,
|
||||||
RETURN = 0x6a,
|
RETURN = 0x6a,
|
||||||
|
|
||||||
// stack ops
|
// stack ops
|
||||||
DUP = 0x76,
|
DUP = 0x76,
|
||||||
|
SWAP = 0x7c,
|
||||||
|
|
||||||
// bit logic
|
// bit logic
|
||||||
EQUAL = 0x87,
|
EQUAL = 0x87,
|
||||||
EQUALVERIFY = 0x88,
|
EQUALVERIFY = 0x88,
|
||||||
|
ADD = 0x93,
|
||||||
|
GREATERTHAN = 0xa0,
|
||||||
|
GREATERTHANOREQUAL = 0xa2,
|
||||||
|
|
||||||
// crypto
|
// crypto
|
||||||
HASH160 = 0xa9,
|
HASH160 = 0xa9,
|
||||||
|
|
@ -46,7 +52,7 @@ public:
|
||||||
|
|
||||||
script_builder& operator<<( op opcode );
|
script_builder& operator<<( op opcode );
|
||||||
|
|
||||||
script_builder& operator<<( uint8_t number );
|
script_builder& operator<<( uint32_t number );
|
||||||
|
|
||||||
script_builder& operator<<( size_t size );
|
script_builder& operator<<( size_t size );
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue