1 // Copyright (c) 2017-present 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 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
61