3#include <xrpl/basics/Number.h>
4#include <xrpl/basics/base_uint.h>
5#include <xrpl/basics/contract.h>
6#include <xrpl/json/json_value.h>
7#include <xrpl/protocol/AccountID.h>
8#include <xrpl/protocol/Concepts.h>
9#include <xrpl/protocol/Issue.h>
10#include <xrpl/protocol/MPTIssue.h>
11#include <xrpl/protocol/UintTypes.h>
84 template <Val
idIssueType TIss>
88 template <Val
idIssueType TIss>
92 template <Val
idIssueType TIss>
93 [[nodiscard]]
constexpr bool
111 [[nodiscard]]
constexpr AmtType
115 template <
typename... Visitors>
117 visit(Visitors&&... visitors)
const ->
decltype(
auto)
124 [[nodiscard]]
constexpr bool
128 [&](
Issue const& issue) {
return issue.
native(); },
129 [&](
MPTIssue const&) {
return false; });
136 [&](
Issue const& issue) {
return issue.
native(); },
137 [&](
MPTIssue const&) {
return true; });
140 friend constexpr bool
146 friend constexpr bool
150 friend constexpr bool
157 friend constexpr bool
161template <Val
idIssueType TIss>
164template <Val
idIssueType TIss>
175template <Val
idIssueType TIss>
182template <Val
idIssueType TIss>
183[[nodiscard]]
constexpr TIss
const&
188 return std::get<TIss>(
issue_);
191template <Val
idIssueType TIss>
197 return std::get<TIss>(
issue_);
233 [&]<
typename TLhs,
typename TRhs>(TLhs
const& issLhs, TRhs
const& issRhs) {
236 return issLhs == issRhs;
258 return std::weak_ordering::greater;
262 return std::weak_ordering::less;
274 [](
MPTIssue const& issue) {
return false; });
289 [&]<
typename TLhs,
typename TRhs>(TLhs
const& issLhs, TRhs
const& issRhs) {
292 return issLhs.currency == issRhs.currency;
296 return issLhs.getMptID() == issRhs.getMptID();
327 [](
MPTIssue const&) {
return true; });
338template <
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)
void 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)