@@ -151,13 +151,13 @@ static CScript PushAll(const std::vector<valtype>& values)
151151 return result;
152152}
153153
154- bool ProduceSignature (const BaseSignatureCreator& creator, const CScript& fromPubKey, SignatureData& sigdata, bool fColdStake , ScriptError* serror)
154+ bool ProduceSignature (const BaseSignatureCreator& creator, const CScript& fromPubKey, SignatureData& sigdata, SigVersion sigversion, bool fColdStake , ScriptError* serror)
155155{
156156 CScript script = fromPubKey;
157157 bool solved = true ;
158158 std::vector<valtype> result;
159159 txnouttype whichType;
160- solved = SignStep (creator, script, result, whichType, SIGVERSION_BASE , fColdStake );
160+ solved = SignStep (creator, script, result, whichType, sigversion , fColdStake );
161161 CScript subscript;
162162
163163 if (solved && whichType == TX_SCRIPTHASH)
@@ -166,14 +166,14 @@ bool ProduceSignature(const BaseSignatureCreator& creator, const CScript& fromPu
166166 // the final scriptSig is the signatures from that
167167 // and then the serialized subscript:
168168 script = subscript = CScript (result[0 ].begin (), result[0 ].end ());
169- solved = solved && SignStep (creator, script, result, whichType, SIGVERSION_BASE , fColdStake ) && whichType != TX_SCRIPTHASH;
169+ solved = solved && SignStep (creator, script, result, whichType, sigversion , fColdStake ) && whichType != TX_SCRIPTHASH;
170170 result.emplace_back (subscript.begin (), subscript.end ());
171171 }
172172
173173 sigdata.scriptSig = PushAll (result);
174174
175175 // Test solution
176- return solved && VerifyScript (sigdata.scriptSig , fromPubKey, STANDARD_SCRIPT_VERIFY_FLAGS, creator.Checker (), serror);
176+ return solved && VerifyScript (sigdata.scriptSig , fromPubKey, STANDARD_SCRIPT_VERIFY_FLAGS, creator.Checker (), sigversion, serror);
177177}
178178
179179SignatureData DataFromTransaction (const CMutableTransaction& tx, unsigned int nIn)
@@ -198,7 +198,7 @@ bool SignSignature(const CKeyStore &keystore, const CScript& fromPubKey, CMutabl
198198 TransactionSignatureCreator creator (&keystore, &txToConst, nIn, amount, nHashType);
199199
200200 SignatureData sigdata;
201- bool ret = ProduceSignature (creator, fromPubKey, sigdata, fColdStake );
201+ bool ret = ProduceSignature (creator, fromPubKey, sigdata, txToConst. GetRequiredSigVersion (), fColdStake );
202202 UpdateTransaction (txTo, nIn, sigdata);
203203 return ret;
204204}
@@ -276,8 +276,8 @@ struct Stacks
276276
277277 Stacks () {}
278278 explicit Stacks (const std::vector<valtype>& scriptSigStack_) : script(scriptSigStack_) {}
279- explicit Stacks (const SignatureData& data) {
280- EvalScript (script, data.scriptSig , SCRIPT_VERIFY_STRICTENC, BaseSignatureChecker (), SIGVERSION_BASE );
279+ explicit Stacks (const SignatureData& data, SigVersion sigversion ) {
280+ EvalScript (script, data.scriptSig , SCRIPT_VERIFY_STRICTENC, BaseSignatureChecker (), sigversion );
281281 }
282282
283283 SignatureData Output () const {
@@ -342,7 +342,7 @@ SignatureData CombineSignatures(const CScript& scriptPubKey, const BaseSignature
342342 std::vector<std::vector<unsigned char > > vSolutions;
343343 Solver (scriptPubKey, txType, vSolutions);
344344
345- return CombineSignatures (scriptPubKey, checker, txType, vSolutions, Stacks (scriptSig1), Stacks (scriptSig2), SIGVERSION_BASE).Output ();
345+ return CombineSignatures (scriptPubKey, checker, txType, vSolutions, Stacks (scriptSig1, SIGVERSION_BASE ), Stacks (scriptSig2, SIGVERSION_BASE ), SIGVERSION_BASE).Output ();
346346}
347347
348348namespace {
@@ -388,9 +388,9 @@ bool IsSolvable(const CKeyStore& store, const CScript& script, bool fColdStaking
388388 // if found in a transaction, we would still accept and relay that transaction. In particular,
389389 DummySignatureCreator creator (&store);
390390 SignatureData sigs;
391- if (ProduceSignature (creator, script, sigs, fColdStaking )) {
391+ if (ProduceSignature (creator, script, sigs, SIGVERSION_BASE, fColdStaking )) {
392392 // VerifyScript check is just defensive, and should never fail.
393- assert (VerifyScript (sigs.scriptSig , script, STANDARD_SCRIPT_VERIFY_FLAGS, creator.Checker ()));
393+ assert (VerifyScript (sigs.scriptSig , script, STANDARD_SCRIPT_VERIFY_FLAGS, creator.Checker (), SIGVERSION_BASE ));
394394 return true ;
395395 }
396396 return false ;
0 commit comments