Skip to content

Commit 61b5152

Browse files
committed
Expose transaction data via BaseSignatureChecker
1 parent 007912e commit 61b5152

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

src/script/interpreter.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <script/interpreter.h>
77

8+
#include <consensus/consensus.h>
89
#include <crypto/ripemd160.h>
910
#include <crypto/sha1.h>
1011
#include <crypto/sha256.h>
@@ -2398,6 +2399,49 @@ bool GenericTransactionSignatureChecker<T>::CheckSequence(const CScriptNum& nSeq
23982399
return true;
23992400
}
24002401

2402+
template <class T>
2403+
uint32_t GenericTransactionSignatureChecker<T>::GetLockTime() const
2404+
{
2405+
return txTo->nLockTime;
2406+
}
2407+
2408+
template <class T>
2409+
int32_t GenericTransactionSignatureChecker<T>::GetTxVersion() const
2410+
{
2411+
return txTo->nVersion;
2412+
}
2413+
2414+
template <class T>
2415+
const std::vector<CTxIn>* GenericTransactionSignatureChecker<T>::GetTxvIn() const
2416+
{
2417+
return &(txTo->vin);
2418+
}
2419+
2420+
template <class T>
2421+
const std::vector<CTxOut>* GenericTransactionSignatureChecker<T>::GetTxvOut() const
2422+
{
2423+
return &(txTo->vout);
2424+
}
2425+
2426+
template <class T>
2427+
uint64_t GenericTransactionSignatureChecker<T>::GetTxWeight() const
2428+
{
2429+
// line copied from GetTransactionWeight() in src/consensus/validation.h
2430+
return ::GetSerializeSize(*txTo, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) * (WITNESS_SCALE_FACTOR - 1) + ::GetSerializeSize(*txTo, PROTOCOL_VERSION);
2431+
}
2432+
2433+
template <class T>
2434+
const PrecomputedTransactionData* GenericTransactionSignatureChecker<T>::GetPrecomputedTransactionData() const
2435+
{
2436+
return txdata;
2437+
}
2438+
2439+
template <class T>
2440+
uint32_t GenericTransactionSignatureChecker<T>::GetnIn() const
2441+
{
2442+
return nIn;
2443+
}
2444+
24012445
// explicit instantiation
24022446
template class GenericTransactionSignatureChecker<CTransaction>;
24032447
template class GenericTransactionSignatureChecker<CMutableTransaction>;

src/script/interpreter.h

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,41 @@ class BaseSignatureChecker
269269
return false;
270270
}
271271

272+
virtual const std::vector<CTxIn>* GetTxvIn() const
273+
{
274+
return nullptr;
275+
}
276+
277+
virtual const std::vector<CTxOut>* GetTxvOut() const
278+
{
279+
return nullptr;
280+
}
281+
282+
virtual uint32_t GetLockTime() const
283+
{
284+
return 0;
285+
}
286+
287+
virtual int32_t GetTxVersion() const
288+
{
289+
return 0;
290+
}
291+
292+
virtual uint64_t GetTxWeight() const
293+
{
294+
return 0;
295+
}
296+
297+
virtual const PrecomputedTransactionData* GetPrecomputedTransactionData() const
298+
{
299+
return nullptr;
300+
}
301+
302+
virtual uint32_t GetnIn() const
303+
{
304+
return std::numeric_limits<uint32_t>::max();
305+
}
306+
272307
virtual ~BaseSignatureChecker() {}
273308
};
274309

@@ -292,6 +327,14 @@ class GenericTransactionSignatureChecker : public BaseSignatureChecker
292327
bool CheckSchnorrSignature(Span<const unsigned char> sig, Span<const unsigned char> pubkey, SigVersion sigversion, const ScriptExecutionData& execdata, ScriptError* serror = nullptr) const override;
293328
bool CheckLockTime(const CScriptNum& nLockTime) const override;
294329
bool CheckSequence(const CScriptNum& nSequence) const override;
330+
const std::vector<CTxIn>* GetTxvIn() const override;
331+
const std::vector<CTxOut>* GetTxvOut() const override;
332+
uint32_t GetLockTime() const override;
333+
int32_t GetTxVersion() const override;
334+
uint64_t GetTxWeight() const override;
335+
336+
const PrecomputedTransactionData* GetPrecomputedTransactionData() const override;
337+
uint32_t GetnIn() const override;
295338
};
296339

297340
using TransactionSignatureChecker = GenericTransactionSignatureChecker<CTransaction>;

0 commit comments

Comments
 (0)