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