|
|
|
@ -1807,16 +1807,16 @@ bool GenericTransactionSignatureChecker<T>::CheckSequence(const CScriptNum& nSeq
|
|
|
|
|
template class GenericTransactionSignatureChecker<CTransaction>;
|
|
|
|
|
template class GenericTransactionSignatureChecker<CMutableTransaction>;
|
|
|
|
|
|
|
|
|
|
static bool ExecuteWitnessScript(const Span<const valtype>& stack_span, const CScript& scriptPubKey, unsigned int flags, SigVersion sigversion, const BaseSignatureChecker& checker, ScriptExecutionData& execdata, ScriptError* serror)
|
|
|
|
|
static bool ExecuteWitnessScript(const Span<const valtype>& stack_span, const CScript& exec_script, unsigned int flags, SigVersion sigversion, const BaseSignatureChecker& checker, ScriptExecutionData& execdata, ScriptError* serror)
|
|
|
|
|
{
|
|
|
|
|
std::vector<valtype> stack{stack_span.begin(), stack_span.end()};
|
|
|
|
|
|
|
|
|
|
if (sigversion == SigVersion::TAPSCRIPT) {
|
|
|
|
|
// OP_SUCCESSx processing overrides everything, including stack element size limits
|
|
|
|
|
CScript::const_iterator pc = scriptPubKey.begin();
|
|
|
|
|
while (pc < scriptPubKey.end()) {
|
|
|
|
|
CScript::const_iterator pc = exec_script.begin();
|
|
|
|
|
while (pc < exec_script.end()) {
|
|
|
|
|
opcodetype opcode;
|
|
|
|
|
if (!scriptPubKey.GetOp(pc, opcode)) {
|
|
|
|
|
if (!exec_script.GetOp(pc, opcode)) {
|
|
|
|
|
// Note how this condition would not be reached if an unknown OP_SUCCESSx was found
|
|
|
|
|
return set_error(serror, SCRIPT_ERR_BAD_OPCODE);
|
|
|
|
|
}
|
|
|
|
@ -1839,7 +1839,7 @@ static bool ExecuteWitnessScript(const Span<const valtype>& stack_span, const CS
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Run the script interpreter.
|
|
|
|
|
if (!EvalScript(stack, scriptPubKey, flags, checker, sigversion, execdata, serror)) return false;
|
|
|
|
|
if (!EvalScript(stack, exec_script, flags, checker, sigversion, execdata, serror)) return false;
|
|
|
|
|
|
|
|
|
|
// Scripts inside witness implicitly require cleanstack behaviour
|
|
|
|
|
if (stack.size() != 1) return set_error(serror, SCRIPT_ERR_CLEANSTACK);
|
|
|
|
|