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 : #include <primitives/transaction.h>
10 :
11 : #include <cstddef>
12 : #include <memory>
13 :
14 : class uint256;
15 : namespace interfaces {
16 : class Chain;
17 : }
18 :
19 : static constexpr bool DEFAULT_TXINDEX{false};
20 :
21 : /**
22 : * TxIndex is used to look up transactions included in the blockchain by hash.
23 : * The index is written to a LevelDB database and records the filesystem
24 : * location of each transaction by transaction hash.
25 : */
26 : class TxIndex final : public BaseIndex
27 : {
28 : protected:
29 : class DB;
30 :
31 : private:
32 : const std::unique_ptr<DB> m_db;
33 :
34 0 : bool AllowPrune() const override { return false; }
35 :
36 : protected:
37 : bool CustomAppend(const interfaces::BlockInfo& block) override;
38 :
39 : BaseIndex::DB& GetDB() const override;
40 :
41 : public:
42 : /// Constructs the index, which becomes available to be queried.
43 : explicit TxIndex(std::unique_ptr<interfaces::Chain> chain, size_t n_cache_size, bool f_memory = false, bool f_wipe = false);
44 :
45 : // Destructor is declared because this class contains a unique_ptr to an incomplete type.
46 : virtual ~TxIndex() override;
47 :
48 : /// Look up a transaction by hash.
49 : ///
50 : /// @param[in] tx_hash The hash of the transaction to be returned.
51 : /// @param[out] block_hash The hash of the block the transaction is found in.
52 : /// @param[out] tx The transaction itself.
53 : /// @return true if transaction is found, false otherwise
54 : bool FindTx(const Txid& tx_hash, uint256& block_hash, CTransactionRef& tx) const;
55 : };
56 :
57 : /// The global transaction index, used in GetTransaction. May be null.
58 : extern std::unique_ptr<TxIndex> g_txindex;
59 :
60 : #endif // BITCOIN_INDEX_TXINDEX_H
|