[MOVEONLY] Turn CScript::GetOp2 into a function and move to cpp
This commit is contained in:
parent
6a7456ad60
commit
54a5a21158
3 changed files with 57 additions and 54 deletions
|
@ -34,7 +34,7 @@ std::string FormatScript(const CScript& script)
|
||||||
while (it != script.end()) {
|
while (it != script.end()) {
|
||||||
CScript::const_iterator it2 = it;
|
CScript::const_iterator it2 = it;
|
||||||
std::vector<unsigned char> vch;
|
std::vector<unsigned char> vch;
|
||||||
if (script.GetOp2(it, op, &vch)) {
|
if (script.GetOp(it, op, vch)) {
|
||||||
if (op == OP_0) {
|
if (op == OP_0) {
|
||||||
ret += "0 ";
|
ret += "0 ";
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -280,3 +280,55 @@ bool CScript::HasValidOps() const
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GetScriptOp(CScriptBase::const_iterator& pc, CScriptBase::const_iterator end, opcodetype& opcodeRet, std::vector<unsigned char>* pvchRet)
|
||||||
|
{
|
||||||
|
opcodeRet = OP_INVALIDOPCODE;
|
||||||
|
if (pvchRet)
|
||||||
|
pvchRet->clear();
|
||||||
|
if (pc >= end)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Read instruction
|
||||||
|
if (end - pc < 1)
|
||||||
|
return false;
|
||||||
|
unsigned int opcode = *pc++;
|
||||||
|
|
||||||
|
// Immediate operand
|
||||||
|
if (opcode <= OP_PUSHDATA4)
|
||||||
|
{
|
||||||
|
unsigned int nSize = 0;
|
||||||
|
if (opcode < OP_PUSHDATA1)
|
||||||
|
{
|
||||||
|
nSize = opcode;
|
||||||
|
}
|
||||||
|
else if (opcode == OP_PUSHDATA1)
|
||||||
|
{
|
||||||
|
if (end - pc < 1)
|
||||||
|
return false;
|
||||||
|
nSize = *pc++;
|
||||||
|
}
|
||||||
|
else if (opcode == OP_PUSHDATA2)
|
||||||
|
{
|
||||||
|
if (end - pc < 2)
|
||||||
|
return false;
|
||||||
|
nSize = ReadLE16(&pc[0]);
|
||||||
|
pc += 2;
|
||||||
|
}
|
||||||
|
else if (opcode == OP_PUSHDATA4)
|
||||||
|
{
|
||||||
|
if (end - pc < 4)
|
||||||
|
return false;
|
||||||
|
nSize = ReadLE32(&pc[0]);
|
||||||
|
pc += 4;
|
||||||
|
}
|
||||||
|
if (end - pc < 0 || (unsigned int)(end - pc) < nSize)
|
||||||
|
return false;
|
||||||
|
if (pvchRet)
|
||||||
|
pvchRet->assign(pc, pc + nSize);
|
||||||
|
pc += nSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
opcodeRet = static_cast<opcodetype>(opcode);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -385,6 +385,8 @@ private:
|
||||||
*/
|
*/
|
||||||
typedef prevector<28, unsigned char> CScriptBase;
|
typedef prevector<28, unsigned char> CScriptBase;
|
||||||
|
|
||||||
|
bool GetScriptOp(CScriptBase::const_iterator& pc, CScriptBase::const_iterator end, opcodetype& opcodeRet, std::vector<unsigned char>* pvchRet);
|
||||||
|
|
||||||
/** Serialized script, used inside transaction inputs and outputs */
|
/** Serialized script, used inside transaction inputs and outputs */
|
||||||
class CScript : public CScriptBase
|
class CScript : public CScriptBase
|
||||||
{
|
{
|
||||||
|
@ -495,65 +497,14 @@ public:
|
||||||
|
|
||||||
bool GetOp(const_iterator& pc, opcodetype& opcodeRet, std::vector<unsigned char>& vchRet) const
|
bool GetOp(const_iterator& pc, opcodetype& opcodeRet, std::vector<unsigned char>& vchRet) const
|
||||||
{
|
{
|
||||||
return GetOp2(pc, opcodeRet, &vchRet);
|
return GetScriptOp(pc, end(), opcodeRet, &vchRet);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GetOp(const_iterator& pc, opcodetype& opcodeRet) const
|
bool GetOp(const_iterator& pc, opcodetype& opcodeRet) const
|
||||||
{
|
{
|
||||||
return GetOp2(pc, opcodeRet, nullptr);
|
return GetScriptOp(pc, end(), opcodeRet, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GetOp2(const_iterator& pc, opcodetype& opcodeRet, std::vector<unsigned char>* pvchRet) const
|
|
||||||
{
|
|
||||||
opcodeRet = OP_INVALIDOPCODE;
|
|
||||||
if (pvchRet)
|
|
||||||
pvchRet->clear();
|
|
||||||
if (pc >= end())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// Read instruction
|
|
||||||
if (end() - pc < 1)
|
|
||||||
return false;
|
|
||||||
unsigned int opcode = *pc++;
|
|
||||||
|
|
||||||
// Immediate operand
|
|
||||||
if (opcode <= OP_PUSHDATA4)
|
|
||||||
{
|
|
||||||
unsigned int nSize = 0;
|
|
||||||
if (opcode < OP_PUSHDATA1)
|
|
||||||
{
|
|
||||||
nSize = opcode;
|
|
||||||
}
|
|
||||||
else if (opcode == OP_PUSHDATA1)
|
|
||||||
{
|
|
||||||
if (end() - pc < 1)
|
|
||||||
return false;
|
|
||||||
nSize = *pc++;
|
|
||||||
}
|
|
||||||
else if (opcode == OP_PUSHDATA2)
|
|
||||||
{
|
|
||||||
if (end() - pc < 2)
|
|
||||||
return false;
|
|
||||||
nSize = ReadLE16(&pc[0]);
|
|
||||||
pc += 2;
|
|
||||||
}
|
|
||||||
else if (opcode == OP_PUSHDATA4)
|
|
||||||
{
|
|
||||||
if (end() - pc < 4)
|
|
||||||
return false;
|
|
||||||
nSize = ReadLE32(&pc[0]);
|
|
||||||
pc += 4;
|
|
||||||
}
|
|
||||||
if (end() - pc < 0 || (unsigned int)(end() - pc) < nSize)
|
|
||||||
return false;
|
|
||||||
if (pvchRet)
|
|
||||||
pvchRet->assign(pc, pc + nSize);
|
|
||||||
pc += nSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
opcodeRet = static_cast<opcodetype>(opcode);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Encode/decode small integers: */
|
/** Encode/decode small integers: */
|
||||||
static int DecodeOP_N(opcodetype opcode)
|
static int DecodeOP_N(opcodetype opcode)
|
||||||
|
|
Loading…
Add table
Reference in a new issue