From 7b157e6d782d11623b607109b03af3c325977307 Mon Sep 17 00:00:00 2001 From: Russell O'Connor Date: Tue, 4 Mar 2025 10:24:02 -0500 Subject: [PATCH] Encapsulate Simplicity's mallocTransaction inside SimplicityTxData constructor --- src/script/interpreter.cpp | 2 +- src/script/interpreter.h | 32 +++++++++++++++++++++++++------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp index 81b72882e4..e6cd1bfa37 100644 --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -2669,7 +2669,7 @@ void PrecomputedTransactionData::Init(const T& txTo, std::vector&& spent simplicityRawTx.version = txTo.nVersion; simplicityRawTx.lockTime = txTo.nLockTime; - m_simplicity_tx_data = SimplicityTransactionUniquePtr(simplicity_elements_mallocTransaction(&simplicityRawTx)); + m_simplicity_tx_data = SimplicityTxData(&simplicityRawTx); m_bip341_taproot_ready = true; } diff --git a/src/script/interpreter.h b/src/script/interpreter.h index e54e15678e..f486dc0194 100644 --- a/src/script/interpreter.h +++ b/src/script/interpreter.h @@ -169,18 +169,36 @@ enum : uint32_t { bool CheckSignatureEncoding(const std::vector &vchSig, unsigned int flags, ScriptError* serror); -struct SimplicityTransactionDeleter -{ - void operator()(transaction* ptr) - { - simplicity_elements_freeTransaction(ptr); +class SimplicityTxData { +public: + SimplicityTxData() {} + + explicit SimplicityTxData(const rawTransaction* rawTx) + : m_transaction(simplicity_elements_mallocTransaction(rawTx)) {} + + transaction* get() const noexcept { + return m_transaction.get(); } + + explicit operator bool() const noexcept { + return static_cast(m_transaction); + } + +private: + struct SimplicityTransactionDeleter + { + void operator()(transaction* ptr) + { + simplicity_elements_freeTransaction(ptr); + } + }; + + std::unique_ptr m_transaction; }; -using SimplicityTransactionUniquePtr = std::unique_ptr; struct PrecomputedTransactionData { - SimplicityTransactionUniquePtr m_simplicity_tx_data; + SimplicityTxData m_simplicity_tx_data; // BIP341 precomputed data. // These are single-SHA256, see https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-15. uint256 m_prevouts_single_hash;