Branch data Line data Source code
1 : : // Copyright (c) 2017-2022 The Bitcoin Core developers 2 : : // Distributed under the MIT software license, see the accompanying 3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 : : 5 : : #ifndef BITCOIN_INDEX_TXINDEX_H 6 : : #define BITCOIN_INDEX_TXINDEX_H 7 : : 8 : : #include <index/base.h> 9 : : 10 : : static constexpr bool DEFAULT_TXINDEX{false}; 11 : : 12 : : /** 13 : : * TxIndex is used to look up transactions included in the blockchain by hash. 14 : : * The index is written to a LevelDB database and records the filesystem 15 : : * location of each transaction by transaction hash. 16 : : */ 17 : : class TxIndex final : public BaseIndex 18 : : { 19 : : protected: 20 : : class DB; 21 : : 22 : : private: 23 : : const std::unique_ptr<DB> m_db; 24 : : 25 : 0 : bool AllowPrune() const override { return false; } 26 : : 27 : : protected: 28 : : bool CustomAppend(const interfaces::BlockInfo& block) override; 29 : : 30 : : BaseIndex::DB& GetDB() const override; 31 : : 32 : : public: 33 : : /// Constructs the index, which becomes available to be queried. 34 : : explicit TxIndex(std::unique_ptr<interfaces::Chain> chain, size_t n_cache_size, bool f_memory = false, bool f_wipe = false); 35 : : 36 : : // Destructor is declared because this class contains a unique_ptr to an incomplete type. 37 : : virtual ~TxIndex() override; 38 : : 39 : : /// Look up a transaction by hash. 40 : : /// 41 : : /// @param[in] tx_hash The hash of the transaction to be returned. 42 : : /// @param[out] block_hash The hash of the block the transaction is found in. 43 : : /// @param[out] tx The transaction itself. 44 : : /// @return true if transaction is found, false otherwise 45 : : bool FindTx(const uint256& tx_hash, uint256& block_hash, CTransactionRef& tx) const; 46 : : }; 47 : : 48 : : /// The global transaction index, used in GetTransaction. May be null. 49 : : extern std::unique_ptr<TxIndex> g_txindex; 50 : : 51 : : #endif // BITCOIN_INDEX_TXINDEX_H