opcode == OP_DIV ||
opcode == OP_MOD ||
opcode == OP_LSHIFT ||
- opcode == OP_RSHIFT)
+ opcode == OP_RSHIFT ||
+ opcode == OP_CODESEPARATOR)
return set_error(serror, SCRIPT_ERR_DISABLED_OPCODE); // Disabled opcodes.
if (fExec && 0 <= opcode && opcode <= OP_PUSHDATA4) {
popstack(stack);
stack.push_back(vchHash);
}
- break;
-
- case OP_CODESEPARATOR:
- {
- // Hash starts after the code separator
- pbegincodehash = pc;
- }
break;
case OP_CHECKSIG:
fHashSingle((nHashTypeIn & 0x1f) == SIGHASH_SINGLE),
fHashNone((nHashTypeIn & 0x1f) == SIGHASH_NONE) {}
- /** Serialize the passed scriptCode, skipping OP_CODESEPARATORs */
+ /** Serialize the passed scriptCode */
template<typename S>
void SerializeScriptCode(S &s, int nType, int nVersion) const {
- CScript::const_iterator it = scriptCode.begin();
- CScript::const_iterator itBegin = it;
- opcodetype opcode;
- unsigned int nCodeSeparators = 0;
- while (scriptCode.GetOp(it, opcode)) {
- if (opcode == OP_CODESEPARATOR)
- nCodeSeparators++;
- }
- ::WriteCompactSize(s, scriptCode.size() - nCodeSeparators);
- it = itBegin;
- while (scriptCode.GetOp(it, opcode)) {
- if (opcode == OP_CODESEPARATOR) {
- s.write((char*)&itBegin[0], it-itBegin-1);
- itBegin = it;
- }
- }
- if (itBegin != scriptCode.end())
- s.write((char*)&itBegin[0], it-itBegin);
+ auto size = scriptCode.size();
+ ::WriteCompactSize(s, size);
+ s.write((char*)&scriptCode.begin()[0], size);
}
/** Serialize an input of txTo */