fuzz coverage

Coverage Report

Created: 2025-06-01 19:34

/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
62.9M
    transaction_identifier(const uint256& wrapped) : m_wrapped{wrapped} {}
_ZN22transaction_identifierILb0EEC2ERK7uint256
Line
Count
Source
16
31.8M
    transaction_identifier(const uint256& wrapped) : m_wrapped{wrapped} {}
_ZN22transaction_identifierILb1EEC2ERK7uint256
Line
Count
Source
16
31.0M
    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
220
    constexpr int Compare(const transaction_identifier<has_witness>& other) const { return m_wrapped.Compare(other.m_wrapped); }
_ZNK22transaction_identifierILb0EE7CompareERKS0_
Line
Count
Source
21
220
    constexpr int Compare(const transaction_identifier<has_witness>& other) const { return m_wrapped.Compare(other.m_wrapped); }
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE7CompareERKS0_
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
42.6M
    transaction_identifier() : m_wrapped{} {}
_ZN22transaction_identifierILb0EEC2Ev
Line
Count
Source
30
42.6M
    transaction_identifier() : m_wrapped{} {}
Unexecuted instantiation: _ZN22transaction_identifierILb1EEC2Ev
31
32
    template <typename Other>
33
220
    bool operator==(const Other& other) const { return Compare(other) == 0; }
_ZNK22transaction_identifierILb0EEeqIS0_EEbRKT_
Line
Count
Source
33
220
    bool operator==(const Other& other) const { return Compare(other) == 0; }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EEeqI7uint256EEbRKT_
34
    template <typename Other>
35
0
    bool operator!=(const Other& other) const { return Compare(other) != 0; }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EEneIS0_EEbRKT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EEneI7uint256EEbRKT_
Unexecuted instantiation: _ZNK22transaction_identifierILb1EEneIS0_EEbRKT_
36
    template <typename Other>
37
0
    bool operator<(const Other& other) const { return Compare(other) < 0; }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EEltIS0_EEbRKT_
Unexecuted instantiation: _ZNK22transaction_identifierILb1EEltIS0_EEbRKT_
38
39
20.7M
    const uint256& ToUint256() const LIFETIMEBOUND { return m_wrapped; }
_ZNK22transaction_identifierILb0EE9ToUint256Ev
Line
Count
Source
39
20.7M
    const uint256& ToUint256() const LIFETIMEBOUND { return m_wrapped; }
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE9ToUint256Ev
40
62.9M
    static transaction_identifier FromUint256(const uint256& id) { return {id}; }
_ZN22transaction_identifierILb0EE11FromUint256ERK7uint256
Line
Count
Source
40
31.8M
    static transaction_identifier FromUint256(const uint256& id) { return {id}; }
_ZN22transaction_identifierILb1EE11FromUint256ERK7uint256
Line
Count
Source
40
31.0M
    static transaction_identifier FromUint256(const uint256& id) { return {id}; }
41
42
    /** Wrapped `uint256` methods. */
43
169M
    constexpr bool IsNull() const { return m_wrapped.IsNull(); }
44
10.0M
    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
0
    std::string ToString() const { return m_wrapped.ToString(); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE8ToStringEv
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE8ToStringEv
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
0
    constexpr const std::byte* begin() const { return reinterpret_cast<const std::byte*>(m_wrapped.begin()); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE5beginEv
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE5beginEv
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
225M
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
_ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR12SizeComputer20TransactionSerParamsEEEvRT_
Line
Count
Source
57
130M
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
_ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR12VectorWriter20TransactionSerParamsEEEvRT_
Line
Count
Source
57
1.33M
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR10DataStream20TransactionSerParamsEEEvRT_
_ZNK22transaction_identifierILb0EE9SerializeI10DataStreamEEvRT_
Line
Count
Source
57
40.0M
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIRS2_IR12VectorWriter20TransactionSerParamsES5_EEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI8AutoFileEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI10HashWriterEEvRT_
_ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR14BufferedWriterI8AutoFileE20TransactionSerParamsEEEvRT_
Line
Count
Source
57
10.0M
    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
43.9M
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
58
1.22M
    template <typename Stream> void Unserialize(Stream& s) { m_wrapped.Unserialize(s); }
_ZN22transaction_identifierILb0EE11UnserializeI12ParamsStreamIR10DataStream20TransactionSerParamsEEEvRT_
Line
Count
Source
58
1.17M
    template <typename Stream> void Unserialize(Stream& s) { m_wrapped.Unserialize(s); }
Unexecuted instantiation: _ZN22transaction_identifierILb0EE11UnserializeI10DataStreamEEvRT_
_ZN22transaction_identifierILb0EE11UnserializeI12ParamsStreamIR10SpanReader20TransactionSerParamsEEEvRT_
Line
Count
Source
58
50.8k
    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
181M
    operator const uint256&() const LIFETIMEBOUND { return m_wrapped; }
_ZNK22transaction_identifierILb0EEcvRK7uint256Ev
Line
Count
Source
67
180M
    operator const uint256&() const LIFETIMEBOUND { return m_wrapped; }
_ZNK22transaction_identifierILb1EEcvRK7uint256Ev
Line
Count
Source
67
306k
    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