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 2130 : 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
|