fuzz coverage

Coverage Report

Created: 2025-08-28 15:26

/Users/eugenesiegel/btc/bitcoin/src/util/transaction_identifier.h
Line
Count
Source (jump to first uncovered line)
1
#ifndef BITCOIN_UTIL_TRANSACTION_IDENTIFIER_H
2
#define BITCOIN_UTIL_TRANSACTION_IDENTIFIER_H
3
4
#include <attributes.h>
5
#include <uint256.h>
6
#include <util/types.h>
7
8
/** transaction_identifier represents the two canonical transaction identifier
9
 * types (txid, wtxid).*/
10
template <bool has_witness>
11
class transaction_identifier
12
{
13
    uint256 m_wrapped;
14
15
    // Note: Use FromUint256 externally instead.
16
1.03M
    transaction_identifier(const uint256& wrapped) : m_wrapped{wrapped} {}
_ZN22transaction_identifierILb0EEC2ERK7uint256
Line
Count
Source
16
490k
    transaction_identifier(const uint256& wrapped) : m_wrapped{wrapped} {}
_ZN22transaction_identifierILb1EEC2ERK7uint256
Line
Count
Source
16
542k
    transaction_identifier(const uint256& wrapped) : m_wrapped{wrapped} {}
17
18
    // TODO: Comparisons with uint256 should be disallowed once we have
19
    // converted most of the code to using the new txid types.
20
0
    constexpr int Compare(const uint256& other) const { return m_wrapped.Compare(other); }
21
2.00M
    constexpr int Compare(const transaction_identifier<has_witness>& other) const { return m_wrapped.Compare(other.m_wrapped); }
_ZNK22transaction_identifierILb0EE7CompareERKS0_
Line
Count
Source
21
2.00M
    constexpr int Compare(const transaction_identifier<has_witness>& other) const { return m_wrapped.Compare(other.m_wrapped); }
_ZNK22transaction_identifierILb1EE7CompareERKS0_
Line
Count
Source
21
7
    constexpr int Compare(const transaction_identifier<has_witness>& other) const { return m_wrapped.Compare(other.m_wrapped); }
22
    template <typename Other>
23
    constexpr int Compare(const Other& other) const
24
    {
25
        static_assert(ALWAYS_FALSE<Other>, "Forbidden comparison type");
26
        return 0;
27
    }
28
29
public:
30
712k
    transaction_identifier() : m_wrapped{} {}
_ZN22transaction_identifierILb0EEC2Ev
Line
Count
Source
30
700k
    transaction_identifier() : m_wrapped{} {}
_ZN22transaction_identifierILb1EEC2Ev
Line
Count
Source
30
12.4k
    transaction_identifier() : m_wrapped{} {}
31
32
    template <typename Other>
33
531k
    bool operator==(const Other& other) const { return Compare(other) == 0; }
_ZNK22transaction_identifierILb0EEeqIS0_EEbRKT_
Line
Count
Source
33
531k
    bool operator==(const Other& other) const { return Compare(other) == 0; }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EEeqI7uint256EEbRKT_
34
    template <typename Other>
35
24
    bool operator!=(const Other& other) const { return Compare(other) != 0; }
_ZNK22transaction_identifierILb0EEneIS0_EEbRKT_
Line
Count
Source
35
17
    bool operator!=(const Other& other) const { return Compare(other) != 0; }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EEneI7uint256EEbRKT_
_ZNK22transaction_identifierILb1EEneIS0_EEbRKT_
Line
Count
Source
35
7
    bool operator!=(const Other& other) const { return Compare(other) != 0; }
36
    template <typename Other>
37
1.47M
    bool operator<(const Other& other) const { return Compare(other) < 0; }
_ZNK22transaction_identifierILb0EEltIS0_EEbRKT_
Line
Count
Source
37
1.47M
    bool operator<(const Other& other) const { return Compare(other) < 0; }
Unexecuted instantiation: _ZNK22transaction_identifierILb1EEltIS0_EEbRKT_
38
39
112k
    const uint256& ToUint256() const LIFETIMEBOUND { return m_wrapped; }
_ZNK22transaction_identifierILb0EE9ToUint256Ev
Line
Count
Source
39
104k
    const uint256& ToUint256() const LIFETIMEBOUND { return m_wrapped; }
_ZNK22transaction_identifierILb1EE9ToUint256Ev
Line
Count
Source
39
7.61k
    const uint256& ToUint256() const LIFETIMEBOUND { return m_wrapped; }
40
1.03M
    static transaction_identifier FromUint256(const uint256& id) { return {id}; }
_ZN22transaction_identifierILb0EE11FromUint256ERK7uint256
Line
Count
Source
40
490k
    static transaction_identifier FromUint256(const uint256& id) { return {id}; }
_ZN22transaction_identifierILb1EE11FromUint256ERK7uint256
Line
Count
Source
40
542k
    static transaction_identifier FromUint256(const uint256& id) { return {id}; }
41
42
    /** Wrapped `uint256` methods. */
43
425k
    constexpr bool IsNull() const { return m_wrapped.IsNull(); }
44
29.5k
    constexpr void SetNull() { m_wrapped.SetNull(); }
45
    static std::optional<transaction_identifier> FromHex(std::string_view hex)
46
0
    {
47
0
        auto u{uint256::FromHex(hex)};
48
0
        if (!u) return std::nullopt;
49
0
        return FromUint256(*u);
50
0
    }
Unexecuted instantiation: _ZN22transaction_identifierILb0EE7FromHexENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE
Unexecuted instantiation: _ZN22transaction_identifierILb1EE7FromHexENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE
51
0
    std::string GetHex() const { return m_wrapped.GetHex(); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE6GetHexEv
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE6GetHexEv
52
13.7k
    std::string ToString() const { return m_wrapped.ToString(); }
_ZNK22transaction_identifierILb0EE8ToStringEv
Line
Count
Source
52
7.01k
    std::string ToString() const { return m_wrapped.ToString(); }
_ZNK22transaction_identifierILb1EE8ToStringEv
Line
Count
Source
52
6.72k
    std::string ToString() const { return m_wrapped.ToString(); }
53
0
    static constexpr auto size() { return decltype(m_wrapped)::size(); }
Unexecuted instantiation: _ZN22transaction_identifierILb0EE4sizeEv
Unexecuted instantiation: _ZN22transaction_identifierILb1EE4sizeEv
54
0
    constexpr const std::byte* data() const { return reinterpret_cast<const std::byte*>(m_wrapped.data()); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE4dataEv
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE4dataEv
55
22.9k
    constexpr const std::byte* begin() const { return reinterpret_cast<const std::byte*>(m_wrapped.begin()); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE5beginEv
_ZNK22transaction_identifierILb1EE5beginEv
Line
Count
Source
55
22.9k
    constexpr const std::byte* begin() const { return reinterpret_cast<const std::byte*>(m_wrapped.begin()); }
56
0
    constexpr const std::byte* end() const { return reinterpret_cast<const std::byte*>(m_wrapped.end()); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE3endEv
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE3endEv
57
2.10M
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
_ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR12SizeComputer20TransactionSerParamsEEEvRT_
Line
Count
Source
57
177k
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
_ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR12VectorWriter20TransactionSerParamsEEEvRT_
Line
Count
Source
57
852k
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR10DataStream20TransactionSerParamsEEEvRT_
_ZNK22transaction_identifierILb0EE9SerializeI10DataStreamEEvRT_
Line
Count
Source
57
177k
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIRS2_IR12VectorWriter20TransactionSerParamsES5_EEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI8AutoFileEEvRT_
_ZNK22transaction_identifierILb0EE9SerializeI10HashWriterEEvRT_
Line
Count
Source
57
11.4k
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
_ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR14BufferedWriterI8AutoFileE20TransactionSerParamsEEEvRT_
Line
Count
Source
57
2.46k
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR8AutoFile20TransactionSerParamsEEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE9SerializeI10HashWriterEEvRT_
_ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR10HashWriter20TransactionSerParamsEEEvRT_
Line
Count
Source
57
878k
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
58
158k
    template <typename Stream> void Unserialize(Stream& s) { m_wrapped.Unserialize(s); }
_ZN22transaction_identifierILb0EE11UnserializeI12ParamsStreamIR10DataStream20TransactionSerParamsEEEvRT_
Line
Count
Source
58
114k
    template <typename Stream> void Unserialize(Stream& s) { m_wrapped.Unserialize(s); }
Unexecuted instantiation: _ZN22transaction_identifierILb0EE11UnserializeI10DataStreamEEvRT_
_ZN22transaction_identifierILb0EE11UnserializeI12ParamsStreamIR10SpanReader20TransactionSerParamsEEEvRT_
Line
Count
Source
58
43.7k
    template <typename Stream> void Unserialize(Stream& s) { m_wrapped.Unserialize(s); }
Unexecuted instantiation: _ZN22transaction_identifierILb0EE11UnserializeI12ParamsStreamIR8AutoFile20TransactionSerParamsEEEvRT_
Unexecuted instantiation: _ZN22transaction_identifierILb0EE11UnserializeI12ParamsStreamIR12BufferedFile20TransactionSerParamsEEEvRT_
Unexecuted instantiation: _ZN22transaction_identifierILb0EE11UnserializeI8AutoFileEEvRT_
59
60
    /** Conversion function to `uint256`.
61
     *
62
     * Note: new code should use `ToUint256`.
63
     *
64
     * TODO: This should be removed once the majority of the code has switched
65
     * to using the Txid and Wtxid types. Until then it makes for a smoother
66
     * transition to allow this conversion. */
67
2.74M
    operator const uint256&() const LIFETIMEBOUND { return m_wrapped; }
_ZNK22transaction_identifierILb0EEcvRK7uint256Ev
Line
Count
Source
67
2.24M
    operator const uint256&() const LIFETIMEBOUND { return m_wrapped; }
_ZNK22transaction_identifierILb1EEcvRK7uint256Ev
Line
Count
Source
67
502k
    operator const uint256&() const LIFETIMEBOUND { return m_wrapped; }
68
};
69
70
/** Txid commits to all transaction fields except the witness. */
71
using Txid = transaction_identifier<false>;
72
/** Wtxid commits to all transaction fields including the witness. */
73
using Wtxid = transaction_identifier<true>;
74
75
#endif // BITCOIN_UTIL_TRANSACTION_IDENTIFIER_H