|
|
@ -247,7 +247,6 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, un |
|
|
|
|
|
|
|
CScript::const_iterator pc = script.begin(); |
|
|
|
CScript::const_iterator pend = script.end(); |
|
|
|
CScript::const_iterator pbegincodehash = script.begin(); |
|
|
|
opcodetype opcode; |
|
|
|
valtype vchPushValue; |
|
|
|
vector<bool> vfExec; |
|
|
@ -834,17 +833,11 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, un |
|
|
|
valtype& vchSig = stacktop(-2); |
|
|
|
valtype& vchPubKey = stacktop(-1); |
|
|
|
|
|
|
|
// Subset of script starting at the most recent codeseparator
|
|
|
|
CScript scriptCode(pbegincodehash, pend); |
|
|
|
|
|
|
|
// Drop the signature, since there's no way for a signature to sign itself
|
|
|
|
scriptCode.FindAndDelete(CScript(vchSig)); |
|
|
|
|
|
|
|
if (!CheckSignatureEncoding(vchSig, flags, serror) || !CheckPubKeyEncoding(vchPubKey, flags, serror)) { |
|
|
|
//serror is set
|
|
|
|
return false; |
|
|
|
} |
|
|
|
bool fSuccess = checker.CheckSig(vchSig, vchPubKey, scriptCode); |
|
|
|
bool fSuccess = checker.CheckSig(vchSig, vchPubKey, script); |
|
|
|
|
|
|
|
popstack(stack); |
|
|
|
popstack(stack); |
|
|
@ -887,16 +880,6 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, un |
|
|
|
if ((int)stack.size() < i) |
|
|
|
return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION); |
|
|
|
|
|
|
|
// Subset of script starting at the most recent codeseparator
|
|
|
|
CScript scriptCode(pbegincodehash, pend); |
|
|
|
|
|
|
|
// Drop the signatures, since there's no way for a signature to sign itself
|
|
|
|
for (int k = 0; k < nSigsCount; k++) |
|
|
|
{ |
|
|
|
valtype& vchSig = stacktop(-isig-k); |
|
|
|
scriptCode.FindAndDelete(CScript(vchSig)); |
|
|
|
} |
|
|
|
|
|
|
|
bool fSuccess = true; |
|
|
|
while (fSuccess && nSigsCount > 0) |
|
|
|
{ |
|
|
@ -912,7 +895,7 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, un |
|
|
|
} |
|
|
|
|
|
|
|
// Check signature
|
|
|
|
bool fOk = checker.CheckSig(vchSig, vchPubKey, scriptCode); |
|
|
|
bool fOk = checker.CheckSig(vchSig, vchPubKey, script); |
|
|
|
|
|
|
|
if (fOk) { |
|
|
|
isig++; |
|
|
|