Bitcoin Core 29.99.0
P2P Digital Currency
transaction_identifier.h
Go to the documentation of this file.
1// Copyright (c) 2023-present The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or https://opensource.org/license/mit.
4
5#ifndef BITCOIN_UTIL_TRANSACTION_IDENTIFIER_H
6#define BITCOIN_UTIL_TRANSACTION_IDENTIFIER_H
7
8#include <attributes.h>
9#include <uint256.h>
10#include <util/types.h>
11
14template <bool has_witness>
16{
18
19 // Note: Use FromUint256 externally instead.
20 transaction_identifier(const uint256& wrapped) : m_wrapped{wrapped} {}
21
22 // TODO: Comparisons with uint256 should be disallowed once we have
23 // converted most of the code to using the new txid types.
24 constexpr int Compare(const uint256& other) const { return m_wrapped.Compare(other); }
25 constexpr int Compare(const transaction_identifier<has_witness>& other) const { return m_wrapped.Compare(other.m_wrapped); }
26 template <typename Other>
27 constexpr int Compare(const Other& other) const
28 {
29 static_assert(ALWAYS_FALSE<Other>, "Forbidden comparison type");
30 return 0;
31 }
32
33public:
35
36 template <typename Other>
37 bool operator==(const Other& other) const { return Compare(other) == 0; }
38 template <typename Other>
39 bool operator!=(const Other& other) const { return Compare(other) != 0; }
40 template <typename Other>
41 bool operator<(const Other& other) const { return Compare(other) < 0; }
42
43 const uint256& ToUint256() const LIFETIMEBOUND { return m_wrapped; }
44 static transaction_identifier FromUint256(const uint256& id) { return {id}; }
45
47 constexpr bool IsNull() const { return m_wrapped.IsNull(); }
48 constexpr void SetNull() { m_wrapped.SetNull(); }
49 static std::optional<transaction_identifier> FromHex(std::string_view hex)
50 {
51 auto u{uint256::FromHex(hex)};
52 if (!u) return std::nullopt;
53 return FromUint256(*u);
54 }
55 std::string GetHex() const { return m_wrapped.GetHex(); }
56 std::string ToString() const { return m_wrapped.ToString(); }
57 static constexpr auto size() { return decltype(m_wrapped)::size(); }
58 constexpr const std::byte* data() const { return reinterpret_cast<const std::byte*>(m_wrapped.data()); }
59 constexpr const std::byte* begin() const { return reinterpret_cast<const std::byte*>(m_wrapped.begin()); }
60 constexpr const std::byte* end() const { return reinterpret_cast<const std::byte*>(m_wrapped.end()); }
61 template <typename Stream> void Serialize(Stream& s) const { m_wrapped.Serialize(s); }
62 template <typename Stream> void Unserialize(Stream& s) { m_wrapped.Unserialize(s); }
63
71 operator const uint256&() const LIFETIMEBOUND { return m_wrapped; }
72};
73
78
79#endif // BITCOIN_UTIL_TRANSACTION_IDENTIFIER_H
#define LIFETIMEBOUND
Definition: attributes.h:16
constexpr bool IsNull() const
Definition: uint256.h:48
constexpr unsigned char * end()
Definition: uint256.h:102
void Unserialize(Stream &s)
Definition: uint256.h:118
std::string ToString() const
Definition: uint256.cpp:21
constexpr int Compare(const base_blob &other) const
Lexicographic ordering.
Definition: uint256.h:64
constexpr unsigned char * begin()
Definition: uint256.h:101
void Serialize(Stream &s) const
Definition: uint256.h:112
constexpr void SetNull()
Definition: uint256.h:55
std::string GetHex() const
Definition: uint256.cpp:11
constexpr const unsigned char * data() const
Definition: uint256.h:98
transaction_identifier represents the two canonical transaction identifier types (txid,...
std::string ToString() const
static constexpr auto size()
void Serialize(Stream &s) const
constexpr const std::byte * begin() const
const uint256 & ToUint256() const LIFETIMEBOUND
constexpr bool IsNull() const
Wrapped uint256 methods.
transaction_identifier(const uint256 &wrapped)
bool operator<(const Other &other) const
bool operator==(const Other &other) const
constexpr int Compare(const Other &other) const
std::string GetHex() const
bool operator!=(const Other &other) const
constexpr int Compare(const uint256 &other) const
constexpr const std::byte * data() const
static transaction_identifier FromUint256(const uint256 &id)
constexpr const std::byte * end() const
constexpr int Compare(const transaction_identifier< has_witness > &other) const
static std::optional< transaction_identifier > FromHex(std::string_view hex)
256-bit opaque blob.
Definition: uint256.h:196
static std::optional< uint256 > FromHex(std::string_view str)
Definition: uint256.h:198