/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 | | |
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 | 0 | std::any CustomProcessBlock(const interfaces::BlockInfo& block) override { |
33 | 0 | return CustomAppend(block); |
34 | 0 | } |
35 | | |
36 | | public: |
37 | | /// Constructs the index, which becomes available to be queried. |
38 | | explicit TxIndex(std::unique_ptr<interfaces::Chain> chain, size_t n_cache_size, bool f_memory = false, bool f_wipe = false); |
39 | | |
40 | | // Destructor is declared because this class contains a unique_ptr to an incomplete type. |
41 | | virtual ~TxIndex() override; |
42 | | |
43 | 0 | bool AllowParallelSync() override { return true; } |
44 | | |
45 | | /// Look up a transaction by hash. |
46 | | /// |
47 | | /// @param[in] tx_hash The hash of the transaction to be returned. |
48 | | /// @param[out] block_hash The hash of the block the transaction is found in. |
49 | | /// @param[out] tx The transaction itself. |
50 | | /// @return true if transaction is found, false otherwise |
51 | | bool FindTx(const Txid& tx_hash, uint256& block_hash, CTransactionRef& tx) const; |
52 | | }; |
53 | | |
54 | | /// The global transaction index, used in GetTransaction. May be null. |
55 | | extern std::unique_ptr<TxIndex> g_txindex; |
56 | | |
57 | | #endif // BITCOIN_INDEX_TXINDEX_H |