Coverage Report

Created: 2026-09-14 20:36

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/tmp/bitcoin/src/index/txindex.h
Line
Count
Source
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
#include <uint256.h>
11
12
#include <cstddef>
13
#include <memory>
14
#include <optional>
15
16
namespace interfaces {
17
class Chain;
18
}
19
namespace txindex_tests {
20
class TxIndexTest;
21
}
22
23
inline constexpr bool DEFAULT_TXINDEX{false};
24
25
/// A found transaction and the hash of the block that contains it.
26
struct TxIndexResult {
27
    uint256 block_hash;
28
    CTransactionRef tx;
29
};
30
31
/**
32
 * TxIndex is used to look up transactions included in the blockchain by hash.
33
 * The index is written to a LevelDB database and records the block sequence
34
 * number and serialized block offset of each transaction by transaction hash.
35
 */
36
class TxIndex final : public BaseIndex
37
{
38
protected:
39
    class DB;
40
41
private:
42
    friend class txindex_tests::TxIndexTest;
43
    const std::unique_ptr<DB> m_db;
44
45
1.95k
    bool AllowPrune() const override { return false; }
46
47
    /// Look up a transaction among the legacy (full-txid) entries.
48
    std::optional<TxIndexResult> FindLegacyTx(const Txid& tx_hash) const;
49
50
protected:
51
    bool CustomAppend(const interfaces::BlockInfo& block) override;
52
53
    BaseIndex::DB& GetDB() const override;
54
55
public:
56
    /// Constructs the index, which becomes available to be queried.
57
    explicit TxIndex(std::unique_ptr<interfaces::Chain> chain, size_t n_cache_size, bool f_memory = false, bool f_wipe = false);
58
59
    // Destructor is declared because this class contains a unique_ptr to an incomplete type.
60
    virtual ~TxIndex() override;
61
62
    /// Look up a transaction by hash.
63
    ///
64
    /// @param[in]   tx_hash  The hash of the transaction to be returned.
65
    /// @return  the transaction and containing block hash, or nullopt if it is not found
66
    std::optional<TxIndexResult> FindTx(const Txid& tx_hash) const;
67
};
68
69
/// The global transaction index, used in GetTransaction. May be null.
70
extern std::unique_ptr<TxIndex> g_txindex;
71
72
#endif // BITCOIN_INDEX_TXINDEX_H