1111#include < span.h>
1212#include < primitives/transaction.h>
1313
14+ #include < optional>
1415#include < vector>
1516#include < stdint.h>
1617
@@ -215,6 +216,9 @@ struct ScriptExecutionData
215216 bool m_validation_weight_left_init = false ;
216217 // ! How much validation weight is left (decremented for every successful non-empty signature check).
217218 int64_t m_validation_weight_left;
219+
220+ // ! The hash of the corresponding output
221+ std::optional<uint256> m_output_hash;
218222};
219223
220224/* * Signature hash sizes */
@@ -244,7 +248,7 @@ class BaseSignatureChecker
244248 return false ;
245249 }
246250
247- virtual bool CheckSchnorrSignature (Span<const unsigned char > sig, Span<const unsigned char > pubkey, SigVersion sigversion, const ScriptExecutionData& execdata, ScriptError* serror = nullptr ) const
251+ virtual bool CheckSchnorrSignature (Span<const unsigned char > sig, Span<const unsigned char > pubkey, SigVersion sigversion, ScriptExecutionData& execdata, ScriptError* serror = nullptr ) const
248252 {
249253 return false ;
250254 }
@@ -272,7 +276,7 @@ enum class MissingDataBehavior
272276};
273277
274278template <typename T>
275- bool SignatureHashSchnorr (uint256& hash_out, const ScriptExecutionData& execdata, const T& tx_to, uint32_t in_pos, uint8_t hash_type, SigVersion sigversion, const PrecomputedTransactionData& cache, MissingDataBehavior mdb);
279+ bool SignatureHashSchnorr (uint256& hash_out, ScriptExecutionData& execdata, const T& tx_to, uint32_t in_pos, uint8_t hash_type, SigVersion sigversion, const PrecomputedTransactionData& cache, MissingDataBehavior mdb);
276280
277281template <class T >
278282class GenericTransactionSignatureChecker : public BaseSignatureChecker
@@ -292,7 +296,7 @@ class GenericTransactionSignatureChecker : public BaseSignatureChecker
292296 GenericTransactionSignatureChecker (const T* txToIn, unsigned int nInIn, const CAmount& amountIn, MissingDataBehavior mdb) : txTo(txToIn), m_mdb(mdb), nIn(nInIn), amount(amountIn), txdata(nullptr ) {}
293297 GenericTransactionSignatureChecker (const T* txToIn, unsigned int nInIn, const CAmount& amountIn, const PrecomputedTransactionData& txdataIn, MissingDataBehavior mdb) : txTo(txToIn), m_mdb(mdb), nIn(nInIn), amount(amountIn), txdata(&txdataIn) {}
294298 bool CheckECDSASignature (const std::vector<unsigned char >& scriptSig, const std::vector<unsigned char >& vchPubKey, const CScript& scriptCode, SigVersion sigversion) const override ;
295- bool CheckSchnorrSignature (Span<const unsigned char > sig, Span<const unsigned char > pubkey, SigVersion sigversion, const ScriptExecutionData& execdata, ScriptError* serror = nullptr ) const override ;
299+ bool CheckSchnorrSignature (Span<const unsigned char > sig, Span<const unsigned char > pubkey, SigVersion sigversion, ScriptExecutionData& execdata, ScriptError* serror = nullptr ) const override ;
296300 bool CheckLockTime (const CScriptNum& nLockTime) const override ;
297301 bool CheckSequence (const CScriptNum& nSequence) const override ;
298302};
@@ -313,7 +317,7 @@ class DeferringSignatureChecker : public BaseSignatureChecker
313317 return m_checker.CheckECDSASignature (scriptSig, vchPubKey, scriptCode, sigversion);
314318 }
315319
316- bool CheckSchnorrSignature (Span<const unsigned char > sig, Span<const unsigned char > pubkey, SigVersion sigversion, const ScriptExecutionData& execdata, ScriptError* serror = nullptr ) const override
320+ bool CheckSchnorrSignature (Span<const unsigned char > sig, Span<const unsigned char > pubkey, SigVersion sigversion, ScriptExecutionData& execdata, ScriptError* serror = nullptr ) const override
317321 {
318322 return m_checker.CheckSchnorrSignature (sig, pubkey, sigversion, execdata, serror);
319323 }
0 commit comments