3#include <xrpl/basics/Number.h>
4#include <xrpl/basics/base_uint.h>
5#include <xrpl/protocol/Concepts.h>
6#include <xrpl/protocol/Issue.h>
7#include <xrpl/protocol/MPTIssue.h>
8#include <xrpl/protocol/Rules.h>
74 template <Val
idIssueType TIss>
78 template <Val
idIssueType TIss>
82 template <Val
idIssueType TIss>
83 [[nodiscard]]
constexpr bool
101 [[nodiscard]]
constexpr AmtType
105 template <
typename... Visitors>
107 visit(Visitors&&... visitors)
const ->
decltype(
auto)
114 [[nodiscard]]
constexpr bool
118 [&](
Issue const& issue) {
return issue.
native(); },
119 [&](
MPTIssue const&) {
return false; });
126 [&](
Issue const& issue) {
return issue.
native(); },
127 [&](
MPTIssue const&) {
return true; });
130 friend constexpr bool
136 friend constexpr bool
140 friend constexpr bool
146 friend constexpr bool
150template <Val
idIssueType TIss>
153template <Val
idIssueType TIss>
164template <Val
idIssueType TIss>
171template <Val
idIssueType TIss>
172[[nodiscard]]
constexpr TIss
const&
177 return std::get<TIss>(
issue_);
180template <Val
idIssueType TIss>
186 return std::get<TIss>(
issue_);
222 [&]<
typename TLhs,
typename TRhs>(TLhs
const& issLhs, TRhs
const& issRhs) {
225 return issLhs == issRhs;
247 return std::weak_ordering::greater;
251 return std::weak_ordering::less;
263 [](
MPTIssue const& issue) {
return false; });
278 [&]<
typename TLhs,
typename TRhs>(TLhs
const& issLhs, TRhs
const& issRhs) {
281 return issLhs.currency == issRhs.currency;
285 return issLhs.getMptID() == issRhs.getMptID();
316 [](
MPTIssue const&) {
return true; });
327template <
class Hasher>
void setJson(json::Value &jv) const
constexpr auto visit(Visitors &&... visitors) const -> decltype(auto)
std::variant< Currency, MPTID > token_type
constexpr token_type token() const
std::variant< AmountType< XRPAmount >, AmountType< IOUAmount >, AmountType< MPTAmount > > AmtType
constexpr TIss const & get() const
constexpr bool native() const
STAmount operator()(Number const &) const
std::string getText() const
constexpr AmtType getAmountType() const
Asset(Issue const &issue)
Conversions to Asset are implicit and conversions to specific issue type are explicit.
AccountID const & getIssuer() const
friend constexpr std::weak_ordering operator<=>(Asset const &lhs, Asset const &rhs)
friend constexpr bool equalTokens(Asset const &lhs, Asset const &rhs)
Return true if both assets refer to the same currency (regardless of issuer) or MPT issuance.
Asset(MPTID const &issuanceID)
std::variant< Issue, MPTIssue > value_type
constexpr bool holds() const
Asset(MPTIssue const &mptIssue)
friend constexpr bool operator==(Asset const &lhs, Asset const &rhs)
constexpr value_type const & value() const
A currency issued by an account.
AccountID const & getIssuer() const
Number is a floating point type that can represent a wide range of values.
T holds_alternative(T... args)
std::enable_if_t< IsContiguouslyHashable< T, Hasher >::value > hash_append(Hasher &h, T const &t) noexcept
Logically concatenate input data to a Hasher.
constexpr auto visit(Variant &&v, Visitors &&... visitors) -> decltype(auto)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
constexpr bool operator==(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
bool isXRP(AccountID const &c)
bool validJSONAsset(json::Value const &jv)
BaseUInt< 160, detail::CurrencyTag > Currency
Currency is a hash representing a specific currency.
std::ostream & operator<<(std::ostream &out, BaseUInt< Bits, Tag > const &u)
bool validAsset(Asset const &asset)
std::string to_string(BaseUInt< Bits, Tag > const &a)
json::Value toJson(Asset const &asset)
constexpr std::strong_ordering operator<=>(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
BaseUInt< 192 > MPTID
MPTID is a 192-bit value representing MPT Issuance ID, which is a concatenation of a 32-bit sequence ...
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
void hash_append(Hasher &h, Slice const &v)
bool isConsistent(Asset const &asset)
constexpr bool kIsMptissueV
AccountID const & xrpAccount()
Compute AccountID from public key.
BadAsset const & badAsset()
Asset assetFromJson(json::Value const &jv)
Currency const & badCurrency()
We deliberately disallow the currency that looks like "XRP" because too many people were using it ins...
constexpr bool equalTokens(Asset const &lhs, Asset const &rhs)
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)