/Users/brunogarcia/projects/bitcoin-core-dev/src/index/txindex.h
Line | Count | Source |
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 |