Coverage Report

Created: 2025-02-21 14:37

/root/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
706k
    transaction_identifier(const uint256& wrapped) : m_wrapped{wrapped} {}
_ZN22transaction_identifierILb0EEC2ERK7uint256
Line
Count
Source
16
706k
    transaction_identifier(const uint256& wrapped) : m_wrapped{wrapped} {}
Unexecuted instantiation: _ZN22transaction_identifierILb1EEC2ERK7uint256
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
0
    constexpr int Compare(const transaction_identifier<has_witness>& other) const { return m_wrapped.Compare(other.m_wrapped); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE7CompareERKS0_
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
0
    transaction_identifier() : m_wrapped{} {}
31
32
    template <typename Other>
33
0
    bool operator==(const Other& other) const { return Compare(other) == 0; }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EEeqIS0_EEbRKT_
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
0
    const uint256& ToUint256() const LIFETIMEBOUND { return m_wrapped; }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9ToUint256Ev
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE9ToUint256Ev
40
706k
    static transaction_identifier FromUint256(const uint256& id) { return {id}; }
_ZN22transaction_identifierILb0EE11FromUint256ERK7uint256
Line
Count
Source
40
706k
    static transaction_identifier FromUint256(const uint256& id) { return {id}; }
Unexecuted instantiation: _ZN22transaction_identifierILb1EE11FromUint256ERK7uint256
41
42
    /** Wrapped `uint256` methods. */
43
0
    constexpr bool IsNull() const { return m_wrapped.IsNull(); }
44
0
    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_identifierILb0EE7FromHexESt17basic_string_viewIcSt11char_traitsIcEE
Unexecuted instantiation: _ZN22transaction_identifierILb1EE7FromHexESt17basic_string_viewIcSt11char_traitsIcEE
51
0
    std::string GetHex() const { return m_wrapped.GetHex(); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE6GetHexB5cxx11Ev
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE6GetHexB5cxx11Ev
52
0
    std::string ToString() const { return m_wrapped.ToString(); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE8ToStringB5cxx11Ev
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE8ToStringB5cxx11Ev
53
0
    static constexpr auto size() { return decltype(m_wrapped)::size(); }
Unexecuted instantiation: _ZN22transaction_identifierILb0EE4sizeEv
Unexecuted instantiation: _ZN22transaction_identifierILb1EE4sizeEv
54
    constexpr const std::byte* data() const { return reinterpret_cast<const std::byte*>(m_wrapped.data()); }
55
0
    constexpr const std::byte* begin() const { return reinterpret_cast<const std::byte*>(m_wrapped.begin()); }
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE5beginEv
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE5beginEv
56
0
    constexpr const std::byte* end() const { return reinterpret_cast<const std::byte*>(m_wrapped.end()); }
57
0
    template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR12SizeComputer20TransactionSerParamsEEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR10DataStream20TransactionSerParamsEEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI10DataStreamEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR12VectorWriter20TransactionSerParamsEEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIRS2_IR12VectorWriter20TransactionSerParamsES5_EEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI8AutoFileEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI10HashWriterEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR8AutoFile20TransactionSerParamsEEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb1EE9SerializeI10HashWriterEEvRT_
Unexecuted instantiation: _ZNK22transaction_identifierILb0EE9SerializeI12ParamsStreamIR10HashWriter20TransactionSerParamsEEEvRT_
58
0
    template <typename Stream> void Unserialize(Stream& s) { m_wrapped.Unserialize(s); }
Unexecuted instantiation: _ZN22transaction_identifierILb0EE11UnserializeI12ParamsStreamIR10DataStream20TransactionSerParamsEEEvRT_
Unexecuted instantiation: _ZN22transaction_identifierILb0EE11UnserializeI10DataStreamEEvRT_
Unexecuted instantiation: _ZN22transaction_identifierILb0EE11UnserializeI12ParamsStreamIR10SpanReader20TransactionSerParamsEEEvRT_
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
0
    operator const uint256&() const LIFETIMEBOUND { return m_wrapped; }
Unexecuted instantiation: _ZNK22transaction_identifierILb0EEcvRK7uint256Ev
Unexecuted instantiation: _ZNK22transaction_identifierILb1EEcvRK7uint256Ev
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