mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Introduce MPT support (XLS-33d): (#5143)
Amendment: - MPTokensV1 New Transactions: - MPTokenIssuanceCreate - MPTokenIssuanceDestroy - MPTokenIssuanceSet - MPTokenAuthorize Modified Transactions: - Payment - Clawback New Objects: - MPTokenIssuance - MPToken API updates: - ledger_entry - account_objects - ledger_data Other: - Add += and -= operators to ValueProxy Read full spec: https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0033d-multi-purpose-tokens --------- Co-authored-by: Shawn Xie <shawnxie920@gmail.com> Co-authored-by: Howard Hinnant <howard.hinnant@gmail.com> Co-authored-by: Ed Hennis <ed@ripple.com> Co-authored-by: John Freeman <jfreeman08@gmail.com>
This commit is contained in:
committed by
GitHub
parent
63209c2646
commit
23c37fa506
@@ -33,13 +33,7 @@ toSTAmount(IOUAmount const& iou, Issue const& iss)
|
||||
{
|
||||
bool const isNeg = iou.signum() < 0;
|
||||
std::uint64_t const umant = isNeg ? -iou.mantissa() : iou.mantissa();
|
||||
return STAmount(
|
||||
iss,
|
||||
umant,
|
||||
iou.exponent(),
|
||||
/*native*/ false,
|
||||
isNeg,
|
||||
STAmount::unchecked());
|
||||
return STAmount(iss, umant, iou.exponent(), isNeg, STAmount::unchecked());
|
||||
}
|
||||
|
||||
inline STAmount
|
||||
|
||||
177
include/xrpl/protocol/Asset.h
Normal file
177
include/xrpl/protocol/Asset.h
Normal file
@@ -0,0 +1,177 @@
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
This file is part of rippled: https://github.com/ripple/rippled
|
||||
Copyright (c) 2024 Ripple Labs Inc.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
//==============================================================================
|
||||
|
||||
#ifndef RIPPLE_PROTOCOL_ASSET_H_INCLUDED
|
||||
#define RIPPLE_PROTOCOL_ASSET_H_INCLUDED
|
||||
|
||||
#include <xrpl/basics/base_uint.h>
|
||||
#include <xrpl/protocol/Issue.h>
|
||||
#include <xrpl/protocol/MPTIssue.h>
|
||||
|
||||
namespace ripple {
|
||||
|
||||
template <typename TIss>
|
||||
concept ValidIssueType =
|
||||
std::is_same_v<TIss, Issue> || std::is_same_v<TIss, MPTIssue>;
|
||||
|
||||
/* Asset is an abstraction of three different issue types: XRP, IOU, MPT.
|
||||
* For historical reasons, two issue types XRP and IOU are wrapped in Issue
|
||||
* type. Many functions and classes there were first written for Issue
|
||||
* have been rewritten for Asset.
|
||||
*/
|
||||
class Asset
|
||||
{
|
||||
private:
|
||||
using value_type = std::variant<Issue, MPTIssue>;
|
||||
value_type issue_;
|
||||
|
||||
public:
|
||||
Asset() = default;
|
||||
|
||||
/** Conversions to Asset are implicit and conversions to specific issue
|
||||
* type are explicit. This design facilitates the use of Asset.
|
||||
*/
|
||||
Asset(Issue const& issue) : issue_(issue)
|
||||
{
|
||||
}
|
||||
|
||||
Asset(MPTIssue const& mptIssue) : issue_(mptIssue)
|
||||
{
|
||||
}
|
||||
|
||||
Asset(MPTID const& issuanceID) : issue_(MPTIssue{issuanceID})
|
||||
{
|
||||
}
|
||||
|
||||
AccountID const&
|
||||
getIssuer() const;
|
||||
|
||||
template <ValidIssueType TIss>
|
||||
constexpr TIss const&
|
||||
get() const;
|
||||
|
||||
template <ValidIssueType TIss>
|
||||
TIss&
|
||||
get();
|
||||
|
||||
template <ValidIssueType TIss>
|
||||
constexpr bool
|
||||
holds() const;
|
||||
|
||||
std::string
|
||||
getText() const;
|
||||
|
||||
constexpr value_type const&
|
||||
value() const;
|
||||
|
||||
void
|
||||
setJson(Json::Value& jv) const;
|
||||
|
||||
bool
|
||||
native() const
|
||||
{
|
||||
return holds<Issue>() && get<Issue>().native();
|
||||
}
|
||||
|
||||
friend constexpr bool
|
||||
operator==(Asset const& lhs, Asset const& rhs);
|
||||
|
||||
friend constexpr bool
|
||||
operator!=(Asset const& lhs, Asset const& rhs);
|
||||
|
||||
friend constexpr bool
|
||||
operator==(Currency const& lhs, Asset const& rhs);
|
||||
};
|
||||
|
||||
template <ValidIssueType TIss>
|
||||
constexpr bool
|
||||
Asset::holds() const
|
||||
{
|
||||
return std::holds_alternative<TIss>(issue_);
|
||||
}
|
||||
|
||||
template <ValidIssueType TIss>
|
||||
constexpr TIss const&
|
||||
Asset::get() const
|
||||
{
|
||||
if (!std::holds_alternative<TIss>(issue_))
|
||||
Throw<std::logic_error>("Asset is not a requested issue");
|
||||
return std::get<TIss>(issue_);
|
||||
}
|
||||
|
||||
template <ValidIssueType TIss>
|
||||
TIss&
|
||||
Asset::get()
|
||||
{
|
||||
if (!std::holds_alternative<TIss>(issue_))
|
||||
Throw<std::logic_error>("Asset is not a requested issue");
|
||||
return std::get<TIss>(issue_);
|
||||
}
|
||||
|
||||
constexpr Asset::value_type const&
|
||||
Asset::value() const
|
||||
{
|
||||
return issue_;
|
||||
}
|
||||
|
||||
constexpr bool
|
||||
operator==(Asset const& lhs, Asset const& rhs)
|
||||
{
|
||||
return std::visit(
|
||||
[&]<typename TLhs, typename TRhs>(
|
||||
TLhs const& issLhs, TRhs const& issRhs) {
|
||||
if constexpr (std::is_same_v<TLhs, TRhs>)
|
||||
return issLhs == issRhs;
|
||||
else
|
||||
return false;
|
||||
},
|
||||
lhs.issue_,
|
||||
rhs.issue_);
|
||||
}
|
||||
|
||||
constexpr bool
|
||||
operator!=(Asset const& lhs, Asset const& rhs)
|
||||
{
|
||||
return !(lhs == rhs);
|
||||
}
|
||||
|
||||
constexpr bool
|
||||
operator==(Currency const& lhs, Asset const& rhs)
|
||||
{
|
||||
return rhs.holds<Issue>() && rhs.get<Issue>().currency == lhs;
|
||||
}
|
||||
|
||||
inline bool
|
||||
isXRP(Asset const& asset)
|
||||
{
|
||||
return asset.native();
|
||||
}
|
||||
|
||||
std::string
|
||||
to_string(Asset const& asset);
|
||||
|
||||
bool
|
||||
validJSONAsset(Json::Value const& jv);
|
||||
|
||||
Asset
|
||||
assetFromJson(Json::Value const& jv);
|
||||
|
||||
} // namespace ripple
|
||||
|
||||
#endif // RIPPLE_PROTOCOL_ASSET_H_INCLUDED
|
||||
@@ -80,7 +80,7 @@ namespace detail {
|
||||
// Feature.cpp. Because it's only used to reserve storage, and determine how
|
||||
// large to make the FeatureBitset, it MAY be larger. It MUST NOT be less than
|
||||
// the actual number of amendments. A LogicError on startup will verify this.
|
||||
static constexpr std::size_t numFeatures = 79;
|
||||
static constexpr std::size_t numFeatures = 80;
|
||||
|
||||
/** Amendments that this server supports and the default voting behavior.
|
||||
Whether they are enabled depends on the Rules defined in the validated
|
||||
|
||||
@@ -287,6 +287,30 @@ did(AccountID const& account) noexcept;
|
||||
Keylet
|
||||
oracle(AccountID const& account, std::uint32_t const& documentID) noexcept;
|
||||
|
||||
Keylet
|
||||
mptIssuance(std::uint32_t seq, AccountID const& issuer) noexcept;
|
||||
|
||||
Keylet
|
||||
mptIssuance(MPTID const& issuanceID) noexcept;
|
||||
|
||||
inline Keylet
|
||||
mptIssuance(uint256 const& issuanceKey)
|
||||
{
|
||||
return {ltMPTOKEN_ISSUANCE, issuanceKey};
|
||||
}
|
||||
|
||||
Keylet
|
||||
mptoken(MPTID const& issuanceID, AccountID const& holder) noexcept;
|
||||
|
||||
inline Keylet
|
||||
mptoken(uint256 const& mptokenKey)
|
||||
{
|
||||
return {ltMPTOKEN, mptokenKey};
|
||||
}
|
||||
|
||||
Keylet
|
||||
mptoken(uint256 const& issuanceKey, AccountID const& holder) noexcept;
|
||||
|
||||
} // namespace keylet
|
||||
|
||||
// Everything below is deprecated and should be removed in favor of keylets:
|
||||
@@ -327,6 +351,9 @@ std::array<keyletDesc<AccountID const&>, 6> const directAccountKeylets{
|
||||
{&keylet::nftpage_max, jss::NFTokenPage, true},
|
||||
{&keylet::did, jss::DID, true}}};
|
||||
|
||||
MPTID
|
||||
makeMptID(std::uint32_t sequence, AccountID const& account);
|
||||
|
||||
} // namespace ripple
|
||||
|
||||
#endif
|
||||
|
||||
@@ -38,16 +38,26 @@ public:
|
||||
Currency currency{};
|
||||
AccountID account{};
|
||||
|
||||
Issue()
|
||||
{
|
||||
}
|
||||
Issue() = default;
|
||||
|
||||
Issue(Currency const& c, AccountID const& a) : currency(c), account(a)
|
||||
{
|
||||
}
|
||||
|
||||
AccountID const&
|
||||
getIssuer() const
|
||||
{
|
||||
return account;
|
||||
}
|
||||
|
||||
std::string
|
||||
getText() const;
|
||||
|
||||
void
|
||||
setJson(Json::Value& jv) const;
|
||||
|
||||
bool
|
||||
native() const;
|
||||
};
|
||||
|
||||
bool
|
||||
@@ -116,6 +126,12 @@ noIssue()
|
||||
return issue;
|
||||
}
|
||||
|
||||
inline bool
|
||||
isXRP(Issue const& issue)
|
||||
{
|
||||
return issue.native();
|
||||
}
|
||||
|
||||
} // namespace ripple
|
||||
|
||||
#endif
|
||||
|
||||
@@ -174,6 +174,18 @@ enum LedgerSpecificFlags {
|
||||
|
||||
// ltNFTOKEN_OFFER
|
||||
lsfSellNFToken = 0x00000001,
|
||||
|
||||
// ltMPTOKEN_ISSUANCE
|
||||
lsfMPTLocked = 0x00000001, // Also used in ltMPTOKEN
|
||||
lsfMPTCanLock = 0x00000002,
|
||||
lsfMPTRequireAuth = 0x00000004,
|
||||
lsfMPTCanEscrow = 0x00000008,
|
||||
lsfMPTCanTrade = 0x00000010,
|
||||
lsfMPTCanTransfer = 0x00000020,
|
||||
lsfMPTCanClawback = 0x00000040,
|
||||
|
||||
// ltMPTOKEN
|
||||
lsfMPTAuthorized = 0x00000002,
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
98
include/xrpl/protocol/MPTIssue.h
Normal file
98
include/xrpl/protocol/MPTIssue.h
Normal file
@@ -0,0 +1,98 @@
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
This file is part of rippled: https://github.com/ripple/rippled
|
||||
Copyright (c) 2024 Ripple Labs Inc.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
//==============================================================================
|
||||
|
||||
#ifndef RIPPLE_PROTOCOL_MPTISSUE_H_INCLUDED
|
||||
#define RIPPLE_PROTOCOL_MPTISSUE_H_INCLUDED
|
||||
|
||||
#include <xrpl/protocol/AccountID.h>
|
||||
#include <xrpl/protocol/UintTypes.h>
|
||||
|
||||
namespace ripple {
|
||||
|
||||
/* Adapt MPTID to provide the same interface as Issue. Enables using static
|
||||
* polymorphism by Asset and other classes. MPTID is a 192-bit concatenation
|
||||
* of a 32-bit account sequence and a 160-bit account id.
|
||||
*/
|
||||
class MPTIssue
|
||||
{
|
||||
private:
|
||||
MPTID mptID_;
|
||||
|
||||
public:
|
||||
MPTIssue() = default;
|
||||
|
||||
explicit MPTIssue(MPTID const& issuanceID);
|
||||
|
||||
AccountID const&
|
||||
getIssuer() const;
|
||||
|
||||
MPTID const&
|
||||
getMptID() const;
|
||||
|
||||
std::string
|
||||
getText() const;
|
||||
|
||||
void
|
||||
setJson(Json::Value& jv) const;
|
||||
|
||||
friend constexpr bool
|
||||
operator==(MPTIssue const& lhs, MPTIssue const& rhs);
|
||||
|
||||
friend constexpr bool
|
||||
operator!=(MPTIssue const& lhs, MPTIssue const& rhs);
|
||||
|
||||
bool
|
||||
native() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
constexpr bool
|
||||
operator==(MPTIssue const& lhs, MPTIssue const& rhs)
|
||||
{
|
||||
return lhs.mptID_ == rhs.mptID_;
|
||||
}
|
||||
|
||||
constexpr bool
|
||||
operator!=(MPTIssue const& lhs, MPTIssue const& rhs)
|
||||
{
|
||||
return !(lhs == rhs);
|
||||
}
|
||||
|
||||
/** MPT is a non-native token.
|
||||
*/
|
||||
inline bool
|
||||
isXRP(MPTID const&)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Json::Value
|
||||
to_json(MPTIssue const& mptIssue);
|
||||
|
||||
std::string
|
||||
to_string(MPTIssue const& mptIssue);
|
||||
|
||||
MPTIssue
|
||||
mptIssueFromJson(Json::Value const& jv);
|
||||
|
||||
} // namespace ripple
|
||||
|
||||
#endif // RIPPLE_PROTOCOL_MPTISSUE_H_INCLUDED
|
||||
@@ -95,6 +95,12 @@ std::size_t constexpr maxDIDAttestationLength = 256;
|
||||
/** The maximum length of a domain */
|
||||
std::size_t constexpr maxDomainLength = 256;
|
||||
|
||||
/** The maximum length of MPTokenMetadata */
|
||||
std::size_t constexpr maxMPTokenMetadataLength = 1024;
|
||||
|
||||
/** The maximum amount of MPTokenIssuance */
|
||||
std::uint64_t constexpr maxMPTokenAmount = 0x7FFF'FFFF'FFFF'FFFFull;
|
||||
|
||||
/** A ledger index. */
|
||||
using LedgerIndex = std::uint32_t;
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ STAmount
|
||||
multiplyRound(
|
||||
STAmount const& amount,
|
||||
Rate const& rate,
|
||||
Issue const& issue,
|
||||
Asset const& asset,
|
||||
bool roundUp);
|
||||
|
||||
STAmount
|
||||
@@ -87,7 +87,7 @@ STAmount
|
||||
divideRound(
|
||||
STAmount const& amount,
|
||||
Rate const& rate,
|
||||
Issue const& issue,
|
||||
Asset const& asset,
|
||||
bool roundUp);
|
||||
|
||||
namespace nft {
|
||||
|
||||
@@ -148,6 +148,7 @@ public:
|
||||
sMD_DeleteFinal = 0x04, // final value when it is deleted
|
||||
sMD_Create = 0x08, // value when it's created
|
||||
sMD_Always = 0x10, // value when node containing it is affected at all
|
||||
sMD_BaseTen = 0x20,
|
||||
sMD_Default =
|
||||
sMD_ChangeOrig | sMD_ChangeNew | sMD_DeleteFinal | sMD_Create
|
||||
};
|
||||
|
||||
@@ -39,6 +39,9 @@ enum SOEStyle {
|
||||
// constructed with STObject::makeInnerObject()
|
||||
};
|
||||
|
||||
/** Amount fields that can support MPT */
|
||||
enum SOETxMPTAmount { soeMPTNone, soeMPTSupported, soeMPTNotSupported };
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/** An element in a SOTemplate. */
|
||||
@@ -47,10 +50,11 @@ class SOElement
|
||||
// Use std::reference_wrapper so SOElement can be stored in a std::vector.
|
||||
std::reference_wrapper<SField const> sField_;
|
||||
SOEStyle style_;
|
||||
SOETxMPTAmount supportMpt_ = soeMPTNone;
|
||||
|
||||
public:
|
||||
SOElement(SField const& fieldName, SOEStyle style)
|
||||
: sField_(fieldName), style_(style)
|
||||
private:
|
||||
void
|
||||
init(SField const& fieldName) const
|
||||
{
|
||||
if (!sField_.get().isUseful())
|
||||
{
|
||||
@@ -62,6 +66,21 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
SOElement(SField const& fieldName, SOEStyle style)
|
||||
: sField_(fieldName), style_(style)
|
||||
{
|
||||
init(fieldName);
|
||||
}
|
||||
SOElement(
|
||||
TypedField<STAmount> const& fieldName,
|
||||
SOEStyle style,
|
||||
SOETxMPTAmount supportMpt = soeMPTNotSupported)
|
||||
: sField_(fieldName), style_(style), supportMpt_(supportMpt)
|
||||
{
|
||||
init(fieldName);
|
||||
}
|
||||
|
||||
SField const&
|
||||
sField() const
|
||||
{
|
||||
@@ -73,6 +92,12 @@ public:
|
||||
{
|
||||
return style_;
|
||||
}
|
||||
|
||||
SOETxMPTAmount
|
||||
supportMPT() const
|
||||
{
|
||||
return supportMpt_;
|
||||
}
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -23,9 +23,10 @@
|
||||
#include <xrpl/basics/CountedObject.h>
|
||||
#include <xrpl/basics/IOUAmount.h>
|
||||
#include <xrpl/basics/LocalValue.h>
|
||||
#include <xrpl/basics/MPTAmount.h>
|
||||
#include <xrpl/basics/Number.h>
|
||||
#include <xrpl/basics/XRPAmount.h>
|
||||
#include <xrpl/protocol/Issue.h>
|
||||
#include <xrpl/protocol/Asset.h>
|
||||
#include <xrpl/protocol/SField.h>
|
||||
#include <xrpl/protocol/STBase.h>
|
||||
#include <xrpl/protocol/Serializer.h>
|
||||
@@ -33,6 +34,11 @@
|
||||
|
||||
namespace ripple {
|
||||
|
||||
template <typename A>
|
||||
concept AssetType =
|
||||
std::is_same_v<A, Asset> || std::is_convertible_v<A, Issue> ||
|
||||
std::is_convertible_v<A, MPTIssue> || std::is_convertible_v<A, MPTID>;
|
||||
|
||||
// Internal form:
|
||||
// 1: If amount is zero, then value is zero and offset is -100
|
||||
// 2: Otherwise:
|
||||
@@ -51,10 +57,9 @@ public:
|
||||
using rep = std::pair<mantissa_type, exponent_type>;
|
||||
|
||||
private:
|
||||
Issue mIssue;
|
||||
Asset mAsset;
|
||||
mantissa_type mValue;
|
||||
exponent_type mOffset;
|
||||
bool mIsNative; // A shorthand for isXRP(mIssue).
|
||||
bool mIsNegative;
|
||||
|
||||
public:
|
||||
@@ -70,8 +75,10 @@ public:
|
||||
|
||||
// Max native value on network.
|
||||
static const std::uint64_t cMaxNativeN = 100000000000000000ull;
|
||||
static const std::uint64_t cNotNative = 0x8000000000000000ull;
|
||||
static const std::uint64_t cPosNative = 0x4000000000000000ull;
|
||||
static const std::uint64_t cIssuedCurrency = 0x8000000000000000ull;
|
||||
static const std::uint64_t cPositive = 0x4000000000000000ull;
|
||||
static const std::uint64_t cMPToken = 0x2000000000000000ull;
|
||||
static const std::uint64_t cValueMask = ~(cPositive | cMPToken);
|
||||
|
||||
static std::uint64_t const uRateOne;
|
||||
|
||||
@@ -84,31 +91,31 @@ public:
|
||||
};
|
||||
|
||||
// Do not call canonicalize
|
||||
template <AssetType A>
|
||||
STAmount(
|
||||
SField const& name,
|
||||
Issue const& issue,
|
||||
A const& asset,
|
||||
mantissa_type mantissa,
|
||||
exponent_type exponent,
|
||||
bool native,
|
||||
bool negative,
|
||||
unchecked);
|
||||
|
||||
template <AssetType A>
|
||||
STAmount(
|
||||
Issue const& issue,
|
||||
A const& asset,
|
||||
mantissa_type mantissa,
|
||||
exponent_type exponent,
|
||||
bool native,
|
||||
bool negative,
|
||||
unchecked);
|
||||
|
||||
// Call canonicalize
|
||||
template <AssetType A>
|
||||
STAmount(
|
||||
SField const& name,
|
||||
Issue const& issue,
|
||||
mantissa_type mantissa,
|
||||
exponent_type exponent,
|
||||
bool native,
|
||||
bool negative);
|
||||
A const& asset,
|
||||
mantissa_type mantissa = 0,
|
||||
exponent_type exponent = 0,
|
||||
bool negative = false);
|
||||
|
||||
STAmount(SField const& name, std::int64_t mantissa);
|
||||
|
||||
@@ -117,37 +124,42 @@ public:
|
||||
std::uint64_t mantissa = 0,
|
||||
bool negative = false);
|
||||
|
||||
STAmount(
|
||||
SField const& name,
|
||||
Issue const& issue,
|
||||
std::uint64_t mantissa = 0,
|
||||
int exponent = 0,
|
||||
bool negative = false);
|
||||
|
||||
explicit STAmount(std::uint64_t mantissa = 0, bool negative = false);
|
||||
|
||||
explicit STAmount(SField const& name, STAmount const& amt);
|
||||
|
||||
template <AssetType A>
|
||||
STAmount(
|
||||
Issue const& issue,
|
||||
A const& asset,
|
||||
std::uint64_t mantissa = 0,
|
||||
int exponent = 0,
|
||||
bool negative = false);
|
||||
bool negative = false)
|
||||
: mAsset(asset)
|
||||
, mValue(mantissa)
|
||||
, mOffset(exponent)
|
||||
, mIsNegative(negative)
|
||||
{
|
||||
canonicalize();
|
||||
}
|
||||
|
||||
// VFALCO Is this needed when we have the previous signature?
|
||||
template <AssetType A>
|
||||
STAmount(
|
||||
Issue const& issue,
|
||||
A const& asset,
|
||||
std::uint32_t mantissa,
|
||||
int exponent = 0,
|
||||
bool negative = false);
|
||||
|
||||
STAmount(Issue const& issue, std::int64_t mantissa, int exponent = 0);
|
||||
template <AssetType A>
|
||||
STAmount(A const& asset, std::int64_t mantissa, int exponent = 0);
|
||||
|
||||
STAmount(Issue const& issue, int mantissa, int exponent = 0);
|
||||
template <AssetType A>
|
||||
STAmount(A const& asset, int mantissa, int exponent = 0);
|
||||
|
||||
// Legacy support for new-style amounts
|
||||
STAmount(IOUAmount const& amount, Issue const& issue);
|
||||
STAmount(XRPAmount const& amount);
|
||||
STAmount(MPTAmount const& amount, MPTIssue const& mptIssue);
|
||||
operator Number() const;
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
@@ -162,12 +174,23 @@ public:
|
||||
bool
|
||||
native() const noexcept;
|
||||
|
||||
template <ValidIssueType TIss>
|
||||
constexpr bool
|
||||
holds() const noexcept;
|
||||
|
||||
bool
|
||||
negative() const noexcept;
|
||||
|
||||
std::uint64_t
|
||||
mantissa() const noexcept;
|
||||
|
||||
Asset const&
|
||||
asset() const;
|
||||
|
||||
template <ValidIssueType TIss>
|
||||
constexpr TIss const&
|
||||
get() const;
|
||||
|
||||
Issue const&
|
||||
issue() const;
|
||||
|
||||
@@ -224,17 +247,14 @@ public:
|
||||
|
||||
// Zero while copying currency and issuer.
|
||||
void
|
||||
clear(STAmount const& saTmpl);
|
||||
|
||||
void
|
||||
clear(Issue const& issue);
|
||||
clear(Asset const& asset);
|
||||
|
||||
void
|
||||
setIssuer(AccountID const& uIssuer);
|
||||
|
||||
/** Set the Issue for this amount and update mIsNative. */
|
||||
/** Set the Issue for this amount. */
|
||||
void
|
||||
setIssue(Issue const& issue);
|
||||
setIssue(Asset const& asset);
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//
|
||||
@@ -266,6 +286,8 @@ public:
|
||||
xrp() const;
|
||||
IOUAmount
|
||||
iou() const;
|
||||
MPTAmount
|
||||
mpt() const;
|
||||
|
||||
private:
|
||||
static std::unique_ptr<STAmount>
|
||||
@@ -290,6 +312,100 @@ private:
|
||||
operator+(STAmount const& v1, STAmount const& v2);
|
||||
};
|
||||
|
||||
template <AssetType A>
|
||||
STAmount::STAmount(
|
||||
SField const& name,
|
||||
A const& asset,
|
||||
mantissa_type mantissa,
|
||||
exponent_type exponent,
|
||||
bool negative,
|
||||
unchecked)
|
||||
: STBase(name)
|
||||
, mAsset(asset)
|
||||
, mValue(mantissa)
|
||||
, mOffset(exponent)
|
||||
, mIsNegative(negative)
|
||||
{
|
||||
}
|
||||
|
||||
template <AssetType A>
|
||||
STAmount::STAmount(
|
||||
A const& asset,
|
||||
mantissa_type mantissa,
|
||||
exponent_type exponent,
|
||||
bool negative,
|
||||
unchecked)
|
||||
: mAsset(asset), mValue(mantissa), mOffset(exponent), mIsNegative(negative)
|
||||
{
|
||||
}
|
||||
|
||||
template <AssetType A>
|
||||
STAmount::STAmount(
|
||||
SField const& name,
|
||||
A const& asset,
|
||||
std::uint64_t mantissa,
|
||||
int exponent,
|
||||
bool negative)
|
||||
: STBase(name)
|
||||
, mAsset(asset)
|
||||
, mValue(mantissa)
|
||||
, mOffset(exponent)
|
||||
, mIsNegative(negative)
|
||||
{
|
||||
// mValue is uint64, but needs to fit in the range of int64
|
||||
assert(mValue <= std::numeric_limits<std::int64_t>::max());
|
||||
canonicalize();
|
||||
}
|
||||
|
||||
template <AssetType A>
|
||||
STAmount::STAmount(A const& asset, std::int64_t mantissa, int exponent)
|
||||
: mAsset(asset), mOffset(exponent)
|
||||
{
|
||||
set(mantissa);
|
||||
canonicalize();
|
||||
}
|
||||
|
||||
template <AssetType A>
|
||||
STAmount::STAmount(
|
||||
A const& asset,
|
||||
std::uint32_t mantissa,
|
||||
int exponent,
|
||||
bool negative)
|
||||
: STAmount(asset, safe_cast<std::uint64_t>(mantissa), exponent, negative)
|
||||
{
|
||||
}
|
||||
|
||||
template <AssetType A>
|
||||
STAmount::STAmount(A const& asset, int mantissa, int exponent)
|
||||
: STAmount(asset, safe_cast<std::int64_t>(mantissa), exponent)
|
||||
{
|
||||
}
|
||||
|
||||
// Legacy support for new-style amounts
|
||||
inline STAmount::STAmount(IOUAmount const& amount, Issue const& issue)
|
||||
: mAsset(issue)
|
||||
, mOffset(amount.exponent())
|
||||
, mIsNegative(amount < beast::zero)
|
||||
{
|
||||
if (mIsNegative)
|
||||
mValue = unsafe_cast<std::uint64_t>(-amount.mantissa());
|
||||
else
|
||||
mValue = unsafe_cast<std::uint64_t>(amount.mantissa());
|
||||
|
||||
canonicalize();
|
||||
}
|
||||
|
||||
inline STAmount::STAmount(MPTAmount const& amount, MPTIssue const& mptIssue)
|
||||
: mAsset(mptIssue), mOffset(0), mIsNegative(amount < beast::zero)
|
||||
{
|
||||
if (mIsNegative)
|
||||
mValue = unsafe_cast<std::uint64_t>(-amount.value());
|
||||
else
|
||||
mValue = unsafe_cast<std::uint64_t>(amount.value());
|
||||
|
||||
canonicalize();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Creation
|
||||
@@ -301,7 +417,7 @@ STAmount
|
||||
amountFromQuality(std::uint64_t rate);
|
||||
|
||||
STAmount
|
||||
amountFromString(Issue const& issue, std::string const& amount);
|
||||
amountFromString(Asset const& issue, std::string const& amount);
|
||||
|
||||
STAmount
|
||||
amountFromJson(SField const& name, Json::Value const& v);
|
||||
@@ -332,7 +448,14 @@ STAmount::exponent() const noexcept
|
||||
inline bool
|
||||
STAmount::native() const noexcept
|
||||
{
|
||||
return mIsNative;
|
||||
return mAsset.native();
|
||||
}
|
||||
|
||||
template <ValidIssueType TIss>
|
||||
constexpr bool
|
||||
STAmount::holds() const noexcept
|
||||
{
|
||||
return mAsset.holds<TIss>();
|
||||
}
|
||||
|
||||
inline bool
|
||||
@@ -347,22 +470,35 @@ STAmount::mantissa() const noexcept
|
||||
return mValue;
|
||||
}
|
||||
|
||||
inline Asset const&
|
||||
STAmount::asset() const
|
||||
{
|
||||
return mAsset;
|
||||
}
|
||||
|
||||
template <ValidIssueType TIss>
|
||||
constexpr TIss const&
|
||||
STAmount::get() const
|
||||
{
|
||||
return mAsset.get<TIss>();
|
||||
}
|
||||
|
||||
inline Issue const&
|
||||
STAmount::issue() const
|
||||
{
|
||||
return mIssue;
|
||||
return get<Issue>();
|
||||
}
|
||||
|
||||
inline Currency const&
|
||||
STAmount::getCurrency() const
|
||||
{
|
||||
return mIssue.currency;
|
||||
return mAsset.get<Issue>().currency;
|
||||
}
|
||||
|
||||
inline AccountID const&
|
||||
STAmount::getIssuer() const
|
||||
{
|
||||
return mIssue.account;
|
||||
return mAsset.getIssuer();
|
||||
}
|
||||
|
||||
inline int
|
||||
@@ -374,7 +510,7 @@ STAmount::signum() const noexcept
|
||||
inline STAmount
|
||||
STAmount::zeroed() const
|
||||
{
|
||||
return STAmount(mIssue);
|
||||
return STAmount(mAsset);
|
||||
}
|
||||
|
||||
inline STAmount::operator bool() const noexcept
|
||||
@@ -384,8 +520,10 @@ inline STAmount::operator bool() const noexcept
|
||||
|
||||
inline STAmount::operator Number() const
|
||||
{
|
||||
if (mIsNative)
|
||||
if (native())
|
||||
return xrp();
|
||||
if (mAsset.holds<MPTIssue>())
|
||||
return mpt();
|
||||
return iou();
|
||||
}
|
||||
|
||||
@@ -415,30 +553,22 @@ STAmount::clear()
|
||||
{
|
||||
// The -100 is used to allow 0 to sort less than a small positive values
|
||||
// which have a negative exponent.
|
||||
mOffset = mIsNative ? 0 : -100;
|
||||
mOffset = native() ? 0 : -100;
|
||||
mValue = 0;
|
||||
mIsNegative = false;
|
||||
}
|
||||
|
||||
// Zero while copying currency and issuer.
|
||||
inline void
|
||||
STAmount::clear(STAmount const& saTmpl)
|
||||
STAmount::clear(Asset const& asset)
|
||||
{
|
||||
clear(saTmpl.mIssue);
|
||||
}
|
||||
|
||||
inline void
|
||||
STAmount::clear(Issue const& issue)
|
||||
{
|
||||
setIssue(issue);
|
||||
setIssue(asset);
|
||||
clear();
|
||||
}
|
||||
|
||||
inline void
|
||||
STAmount::setIssuer(AccountID const& uIssuer)
|
||||
{
|
||||
mIssue.account = uIssuer;
|
||||
setIssue(mIssue);
|
||||
mAsset.get<Issue>().account = uIssuer;
|
||||
}
|
||||
|
||||
inline STAmount const&
|
||||
@@ -503,17 +633,17 @@ STAmount
|
||||
operator-(STAmount const& v1, STAmount const& v2);
|
||||
|
||||
STAmount
|
||||
divide(STAmount const& v1, STAmount const& v2, Issue const& issue);
|
||||
divide(STAmount const& v1, STAmount const& v2, Asset const& asset);
|
||||
|
||||
STAmount
|
||||
multiply(STAmount const& v1, STAmount const& v2, Issue const& issue);
|
||||
multiply(STAmount const& v1, STAmount const& v2, Asset const& asset);
|
||||
|
||||
// multiply rounding result in specified direction
|
||||
STAmount
|
||||
mulRound(
|
||||
STAmount const& v1,
|
||||
STAmount const& v2,
|
||||
Issue const& issue,
|
||||
Asset const& asset,
|
||||
bool roundUp);
|
||||
|
||||
// multiply following the rounding directions more precisely.
|
||||
@@ -521,7 +651,7 @@ STAmount
|
||||
mulRoundStrict(
|
||||
STAmount const& v1,
|
||||
STAmount const& v2,
|
||||
Issue const& issue,
|
||||
Asset const& asset,
|
||||
bool roundUp);
|
||||
|
||||
// divide rounding result in specified direction
|
||||
@@ -529,7 +659,7 @@ STAmount
|
||||
divRound(
|
||||
STAmount const& v1,
|
||||
STAmount const& v2,
|
||||
Issue const& issue,
|
||||
Asset const& asset,
|
||||
bool roundUp);
|
||||
|
||||
// divide following the rounding directions more precisely.
|
||||
@@ -537,7 +667,7 @@ STAmount
|
||||
divRoundStrict(
|
||||
STAmount const& v1,
|
||||
STAmount const& v2,
|
||||
Issue const& issue,
|
||||
Asset const& asset,
|
||||
bool roundUp);
|
||||
|
||||
// Someone is offering X for Y, what is the rate?
|
||||
@@ -551,7 +681,7 @@ getRate(STAmount const& offerOut, STAmount const& offerIn);
|
||||
inline bool
|
||||
isXRP(STAmount const& amount)
|
||||
{
|
||||
return isXRP(amount.issue().currency);
|
||||
return amount.native();
|
||||
}
|
||||
|
||||
// Since `canonicalize` does not have access to a ledger, this is needed to put
|
||||
|
||||
@@ -84,6 +84,7 @@ private:
|
||||
|
||||
using STUInt128 = STBitString<128>;
|
||||
using STUInt160 = STBitString<160>;
|
||||
using STUInt192 = STBitString<192>;
|
||||
using STUInt256 = STBitString<256>;
|
||||
|
||||
template <int Bits>
|
||||
@@ -136,6 +137,13 @@ STUInt160::getSType() const
|
||||
return STI_UINT160;
|
||||
}
|
||||
|
||||
template <>
|
||||
inline SerializedTypeID
|
||||
STUInt192::getSType() const
|
||||
{
|
||||
return STI_UINT192;
|
||||
}
|
||||
|
||||
template <>
|
||||
inline SerializedTypeID
|
||||
STUInt256::getSType() const
|
||||
|
||||
@@ -226,6 +226,8 @@ public:
|
||||
|
||||
uint160
|
||||
getFieldH160(SField const& field) const;
|
||||
uint192
|
||||
getFieldH192(SField const& field) const;
|
||||
uint256
|
||||
getFieldH256(SField const& field) const;
|
||||
AccountID
|
||||
@@ -498,6 +500,11 @@ protected:
|
||||
assign(U&& u);
|
||||
};
|
||||
|
||||
// Constraint += and -= ValueProxy operators
|
||||
// to value types that support arithmetic operations
|
||||
template <typename U>
|
||||
concept IsArithmetic = std::is_arithmetic_v<U> || std::is_same_v<U, STAmount>;
|
||||
|
||||
template <class T>
|
||||
class STObject::ValueProxy : private Proxy<T>
|
||||
{
|
||||
@@ -513,6 +520,16 @@ public:
|
||||
std::enable_if_t<std::is_assignable_v<T, U>, ValueProxy&>
|
||||
operator=(U&& u);
|
||||
|
||||
// Convenience operators for value types supporting
|
||||
// arithmetic operations
|
||||
template <IsArithmetic U>
|
||||
ValueProxy&
|
||||
operator+=(U const& u);
|
||||
|
||||
template <IsArithmetic U>
|
||||
ValueProxy&
|
||||
operator-=(U const& u);
|
||||
|
||||
operator value_type() const;
|
||||
|
||||
private:
|
||||
@@ -731,6 +748,24 @@ STObject::ValueProxy<T>::operator=(U&& u)
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <IsArithmetic U>
|
||||
STObject::ValueProxy<T>&
|
||||
STObject::ValueProxy<T>::operator+=(U const& u)
|
||||
{
|
||||
this->assign(this->value() + u);
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
template <IsArithmetic U>
|
||||
STObject::ValueProxy<T>&
|
||||
STObject::ValueProxy<T>::operator-=(U const& u)
|
||||
{
|
||||
this->assign(this->value() - u);
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
STObject::ValueProxy<T>::operator value_type() const
|
||||
{
|
||||
|
||||
@@ -373,6 +373,12 @@ public:
|
||||
return getBitString<160>();
|
||||
}
|
||||
|
||||
uint192
|
||||
get192()
|
||||
{
|
||||
return getBitString<192>();
|
||||
}
|
||||
|
||||
uint256
|
||||
get256()
|
||||
{
|
||||
|
||||
@@ -139,6 +139,8 @@ enum TEMcodes : TERUnderlyingType {
|
||||
|
||||
temARRAY_EMPTY,
|
||||
temARRAY_TOO_LARGE,
|
||||
|
||||
temBAD_TRANSFER_FEE,
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
@@ -339,7 +341,8 @@ enum TECcodes : TERUnderlyingType {
|
||||
tecINVALID_UPDATE_TIME = 188,
|
||||
tecTOKEN_PAIR_NOT_FOUND = 189,
|
||||
tecARRAY_EMPTY = 190,
|
||||
tecARRAY_TOO_LARGE = 191
|
||||
tecARRAY_TOO_LARGE = 191,
|
||||
tecLOCKED = 192,
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
#include <xrpl/protocol/LedgerFormats.h>
|
||||
|
||||
namespace ripple {
|
||||
|
||||
/** Transaction flags.
|
||||
@@ -104,6 +106,7 @@ constexpr std::uint32_t tfPartialPayment = 0x00020000;
|
||||
constexpr std::uint32_t tfLimitQuality = 0x00040000;
|
||||
constexpr std::uint32_t tfPaymentMask =
|
||||
~(tfUniversal | tfPartialPayment | tfLimitQuality | tfNoRippleDirect);
|
||||
constexpr std::uint32_t tfMPTPaymentMask = ~(tfUniversal | tfPartialPayment);
|
||||
|
||||
// TrustSet flags:
|
||||
constexpr std::uint32_t tfSetfAuth = 0x00010000;
|
||||
@@ -130,6 +133,29 @@ constexpr std::uint32_t const tfOnlyXRP = 0x00000002;
|
||||
constexpr std::uint32_t const tfTrustLine = 0x00000004;
|
||||
constexpr std::uint32_t const tfTransferable = 0x00000008;
|
||||
|
||||
// MPTokenIssuanceCreate flags:
|
||||
// NOTE - there is intentionally no flag here for lsfMPTLocked, which this transaction cannot mutate.
|
||||
constexpr std::uint32_t const tfMPTCanLock = lsfMPTCanLock;
|
||||
constexpr std::uint32_t const tfMPTRequireAuth = lsfMPTRequireAuth;
|
||||
constexpr std::uint32_t const tfMPTCanEscrow = lsfMPTCanEscrow;
|
||||
constexpr std::uint32_t const tfMPTCanTrade = lsfMPTCanTrade;
|
||||
constexpr std::uint32_t const tfMPTCanTransfer = lsfMPTCanTransfer;
|
||||
constexpr std::uint32_t const tfMPTCanClawback = lsfMPTCanClawback;
|
||||
constexpr std::uint32_t const tfMPTokenIssuanceCreateMask =
|
||||
~(tfUniversal | tfMPTCanLock | tfMPTRequireAuth | tfMPTCanEscrow | tfMPTCanTrade | tfMPTCanTransfer | tfMPTCanClawback);
|
||||
|
||||
// MPTokenAuthorize flags:
|
||||
constexpr std::uint32_t const tfMPTUnauthorize = 0x00000001;
|
||||
constexpr std::uint32_t const tfMPTokenAuthorizeMask = ~(tfUniversal | tfMPTUnauthorize);
|
||||
|
||||
// MPTokenIssuanceSet flags:
|
||||
constexpr std::uint32_t const tfMPTLock = 0x00000001;
|
||||
constexpr std::uint32_t const tfMPTUnlock = 0x00000002;
|
||||
constexpr std::uint32_t const tfMPTokenIssuanceSetMask = ~(tfUniversal | tfMPTLock | tfMPTUnlock);
|
||||
|
||||
// MPTokenIssuanceDestroy flags:
|
||||
constexpr std::uint32_t const tfMPTokenIssuanceDestroyMask = ~tfUniversal;
|
||||
|
||||
// Prior to fixRemoveNFTokenAutoTrustLine, transfer of an NFToken between
|
||||
// accounts allowed a TrustLine to be added to the issuer of that token
|
||||
// without explicit permission from that issuer. This was enabled by
|
||||
@@ -184,7 +210,6 @@ constexpr std::uint32_t tfDepositMask = ~(tfUniversal | tfDepositSubTx);
|
||||
// BridgeModify flags:
|
||||
constexpr std::uint32_t tfClearAccountCreateAmount = 0x00010000;
|
||||
constexpr std::uint32_t tfBridgeModifyMask = ~(tfUniversal | tfClearAccountCreateAmount);
|
||||
|
||||
// clang-format on
|
||||
|
||||
} // namespace ripple
|
||||
|
||||
@@ -58,6 +58,11 @@ using Currency = base_uint<160, detail::CurrencyTag>;
|
||||
/** NodeID is a 160-bit hash representing one node. */
|
||||
using NodeID = base_uint<160, detail::NodeIDTag>;
|
||||
|
||||
/** MPTID is a 192-bit value representing MPT Issuance ID,
|
||||
* which is a concatenation of a 32-bit sequence (big endian)
|
||||
* and a 160-bit account */
|
||||
using MPTID = base_uint<192>;
|
||||
|
||||
/** XRP currency. */
|
||||
Currency const&
|
||||
xrpCurrency();
|
||||
|
||||
@@ -23,8 +23,10 @@
|
||||
#include <xrpl/protocol/SField.h>
|
||||
#include <xrpl/protocol/STBase.h>
|
||||
#include <xrpl/protocol/Serializer.h>
|
||||
#include <concepts>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <type_traits>
|
||||
#include <typeinfo>
|
||||
#include <utility>
|
||||
|
||||
@@ -44,6 +46,19 @@ struct nonPresentObject_t
|
||||
extern defaultObject_t defaultObject;
|
||||
extern nonPresentObject_t nonPresentObject;
|
||||
|
||||
// Concept to constrain STVar constructors, which
|
||||
// instantiate ST* types from SerializedTypeID
|
||||
// clang-format off
|
||||
template <typename... Args>
|
||||
concept ValidConstructSTArgs =
|
||||
(std::is_same_v<
|
||||
std::tuple<std::remove_cvref_t<Args>...>,
|
||||
std::tuple<SField>> ||
|
||||
std::is_same_v<
|
||||
std::tuple<std::remove_cvref_t<Args>...>,
|
||||
std::tuple<SerialIter, SField>>);
|
||||
// clang-format on
|
||||
|
||||
// "variant" that can hold any type of serialized object
|
||||
// and includes a small-object allocation optimization.
|
||||
class STVar
|
||||
@@ -131,6 +146,15 @@ private:
|
||||
p_ = new (&d_) T(std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
/** Construct requested Serializable Type according to id.
|
||||
* The variadic args are: (SField), or (SerialIter, SField).
|
||||
* depth is ignored in former case.
|
||||
*/
|
||||
template <typename... Args>
|
||||
requires ValidConstructSTArgs<Args...>
|
||||
void
|
||||
constructST(SerializedTypeID id, int depth, Args&&... arg);
|
||||
|
||||
bool
|
||||
on_heap() const
|
||||
{
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
|
||||
// InvariantsV1_1 will be changes to Supported::yes when all the
|
||||
// invariants expected to be included under it are complete.
|
||||
XRPL_FEATURE(InvariantsV1_1, Supported::no, VoteBehavior::DefaultNo)
|
||||
XRPL_FEATURE(MPTokensV1, Supported::yes, VoteBehavior::DefaultNo)
|
||||
XRPL_FEATURE(InvariantsV1_1, Supported::no, VoteBehavior::DefaultNo)
|
||||
XRPL_FIX (NFTokenPageLinks, Supported::yes, VoteBehavior::DefaultNo)
|
||||
XRPL_FIX (InnerObjTemplate2, Supported::yes, VoteBehavior::DefaultNo)
|
||||
XRPL_FIX (EnforceNFTokenTrustline, Supported::yes, VoteBehavior::DefaultNo)
|
||||
|
||||
@@ -392,3 +392,31 @@ LEDGER_ENTRY(ltORACLE, 0x0080, Oracle, ({
|
||||
{sfPreviousTxnID, soeREQUIRED},
|
||||
{sfPreviousTxnLgrSeq, soeREQUIRED},
|
||||
}))
|
||||
|
||||
/** A ledger object which tracks MPTokenIssuance
|
||||
\sa keylet::mptIssuance
|
||||
*/
|
||||
LEDGER_ENTRY(ltMPTOKEN_ISSUANCE, 0x007e, MPTokenIssuance, ({
|
||||
{sfIssuer, soeREQUIRED},
|
||||
{sfSequence, soeREQUIRED},
|
||||
{sfTransferFee, soeDEFAULT},
|
||||
{sfOwnerNode, soeREQUIRED},
|
||||
{sfAssetScale, soeDEFAULT},
|
||||
{sfMaximumAmount, soeOPTIONAL},
|
||||
{sfOutstandingAmount, soeREQUIRED},
|
||||
{sfMPTokenMetadata, soeOPTIONAL},
|
||||
{sfPreviousTxnID, soeREQUIRED},
|
||||
{sfPreviousTxnLgrSeq, soeREQUIRED},
|
||||
}))
|
||||
|
||||
/** A ledger object which tracks MPToken
|
||||
\sa keylet::mptoken
|
||||
*/
|
||||
LEDGER_ENTRY(ltMPTOKEN, 0x007f, MPToken, ({
|
||||
{sfAccount, soeREQUIRED},
|
||||
{sfMPTokenIssuanceID, soeREQUIRED},
|
||||
{sfMPTAmount, soeDEFAULT},
|
||||
{sfOwnerNode, soeREQUIRED},
|
||||
{sfPreviousTxnID, soeREQUIRED},
|
||||
{sfPreviousTxnLgrSeq, soeREQUIRED},
|
||||
}))
|
||||
|
||||
@@ -35,6 +35,7 @@ TYPED_SFIELD(sfCloseResolution, UINT8, 1)
|
||||
TYPED_SFIELD(sfMethod, UINT8, 2)
|
||||
TYPED_SFIELD(sfTransactionResult, UINT8, 3)
|
||||
TYPED_SFIELD(sfScale, UINT8, 4)
|
||||
TYPED_SFIELD(sfAssetScale, UINT8, 5)
|
||||
|
||||
// 8-bit integers (uncommon)
|
||||
TYPED_SFIELD(sfTickSize, UINT8, 16)
|
||||
@@ -136,6 +137,9 @@ TYPED_SFIELD(sfXChainClaimID, UINT64, 20)
|
||||
TYPED_SFIELD(sfXChainAccountCreateCount, UINT64, 21)
|
||||
TYPED_SFIELD(sfXChainAccountClaimCount, UINT64, 22)
|
||||
TYPED_SFIELD(sfAssetPrice, UINT64, 23)
|
||||
TYPED_SFIELD(sfMaximumAmount, UINT64, 24, SField::sMD_BaseTen|SField::sMD_Default)
|
||||
TYPED_SFIELD(sfOutstandingAmount, UINT64, 25, SField::sMD_BaseTen|SField::sMD_Default)
|
||||
TYPED_SFIELD(sfMPTAmount, UINT64, 26, SField::sMD_BaseTen|SField::sMD_Default)
|
||||
|
||||
// 128-bit
|
||||
TYPED_SFIELD(sfEmailHash, UINT128, 1)
|
||||
@@ -146,6 +150,9 @@ TYPED_SFIELD(sfTakerPaysIssuer, UINT160, 2)
|
||||
TYPED_SFIELD(sfTakerGetsCurrency, UINT160, 3)
|
||||
TYPED_SFIELD(sfTakerGetsIssuer, UINT160, 4)
|
||||
|
||||
// 192-bit (common)
|
||||
TYPED_SFIELD(sfMPTokenIssuanceID, UINT192, 1)
|
||||
|
||||
// 256-bit (common)
|
||||
TYPED_SFIELD(sfLedgerHash, UINT256, 1)
|
||||
TYPED_SFIELD(sfParentHash, UINT256, 2)
|
||||
@@ -250,6 +257,7 @@ TYPED_SFIELD(sfDIDDocument, VL, 26)
|
||||
TYPED_SFIELD(sfData, VL, 27)
|
||||
TYPED_SFIELD(sfAssetClass, VL, 28)
|
||||
TYPED_SFIELD(sfProvider, VL, 29)
|
||||
TYPED_SFIELD(sfMPTokenMetadata, VL, 30)
|
||||
|
||||
// account (common)
|
||||
TYPED_SFIELD(sfAccount, ACCOUNT, 1)
|
||||
@@ -262,6 +270,7 @@ TYPED_SFIELD(sfUnauthorize, ACCOUNT, 6)
|
||||
TYPED_SFIELD(sfRegularKey, ACCOUNT, 8)
|
||||
TYPED_SFIELD(sfNFTokenMinter, ACCOUNT, 9)
|
||||
TYPED_SFIELD(sfEmitCallback, ACCOUNT, 10)
|
||||
TYPED_SFIELD(sfHolder, ACCOUNT, 11)
|
||||
|
||||
// account (uncommon)
|
||||
TYPED_SFIELD(sfHookAccount, ACCOUNT, 16)
|
||||
|
||||
@@ -31,12 +31,12 @@
|
||||
/** This transaction type executes a payment. */
|
||||
TRANSACTION(ttPAYMENT, 0, Payment, ({
|
||||
{sfDestination, soeREQUIRED},
|
||||
{sfAmount, soeREQUIRED},
|
||||
{sfSendMax, soeOPTIONAL},
|
||||
{sfAmount, soeREQUIRED, soeMPTSupported},
|
||||
{sfSendMax, soeOPTIONAL, soeMPTSupported},
|
||||
{sfPaths, soeDEFAULT},
|
||||
{sfInvoiceID, soeOPTIONAL},
|
||||
{sfDestinationTag, soeOPTIONAL},
|
||||
{sfDeliverMin, soeOPTIONAL},
|
||||
{sfDeliverMin, soeOPTIONAL, soeMPTSupported},
|
||||
}))
|
||||
|
||||
/** This transaction type creates an escrow object. */
|
||||
@@ -223,7 +223,8 @@ TRANSACTION(ttNFTOKEN_ACCEPT_OFFER, 29, NFTokenAcceptOffer, ({
|
||||
|
||||
/** This transaction claws back issued tokens. */
|
||||
TRANSACTION(ttCLAWBACK, 30, Clawback, ({
|
||||
{sfAmount, soeREQUIRED},
|
||||
{sfAmount, soeREQUIRED, soeMPTSupported},
|
||||
{sfHolder, soeOPTIONAL},
|
||||
}))
|
||||
|
||||
/** This transaction type creates an AMM instance */
|
||||
@@ -386,6 +387,31 @@ TRANSACTION(ttLEDGER_STATE_FIX, 53, LedgerStateFix, ({
|
||||
{sfOwner, soeOPTIONAL},
|
||||
}))
|
||||
|
||||
/** This transaction type creates a MPTokensIssuance instance */
|
||||
TRANSACTION(ttMPTOKEN_ISSUANCE_CREATE, 54, MPTokenIssuanceCreate, ({
|
||||
{sfAssetScale, soeOPTIONAL},
|
||||
{sfTransferFee, soeOPTIONAL},
|
||||
{sfMaximumAmount, soeOPTIONAL},
|
||||
{sfMPTokenMetadata, soeOPTIONAL},
|
||||
}))
|
||||
|
||||
/** This transaction type destroys a MPTokensIssuance instance */
|
||||
TRANSACTION(ttMPTOKEN_ISSUANCE_DESTROY, 55, MPTokenIssuanceDestroy, ({
|
||||
{sfMPTokenIssuanceID, soeREQUIRED},
|
||||
}))
|
||||
|
||||
/** This transaction type sets flags on a MPTokensIssuance or MPToken instance */
|
||||
TRANSACTION(ttMPTOKEN_ISSUANCE_SET, 56, MPTokenIssuanceSet, ({
|
||||
{sfMPTokenIssuanceID, soeREQUIRED},
|
||||
{sfHolder, soeOPTIONAL},
|
||||
}))
|
||||
|
||||
/** This transaction type authorizes a MPToken instance */
|
||||
TRANSACTION(ttMPTOKEN_AUTHORIZE, 57, MPTokenAuthorize, ({
|
||||
{sfMPTokenIssuanceID, soeREQUIRED},
|
||||
{sfHolder, soeOPTIONAL},
|
||||
}))
|
||||
|
||||
/** This system-generated transaction type is used to update the status of the various amendments.
|
||||
|
||||
For details, see: https://xrpl.org/amendments.html
|
||||
|
||||
@@ -58,6 +58,8 @@ JSS(AssetPrice); // in: Oracle
|
||||
JSS(AuthAccount); // in: AMM Auction Slot
|
||||
JSS(AuthAccounts); // in: AMM Auction Slot
|
||||
JSS(BaseAsset); // in: Oracle
|
||||
JSS(BidMax); // in: AMM Bid
|
||||
JSS(BidMin); // in: AMM Bid
|
||||
JSS(Bridge); // ledger type.
|
||||
JSS(Check); // ledger type.
|
||||
JSS(ClearFlag); // field.
|
||||
@@ -76,8 +78,8 @@ JSS(LastLedgerSequence); // in: TransactionSign; field
|
||||
JSS(LastUpdateTime); // field.
|
||||
JSS(LedgerHashes); // ledger type.
|
||||
JSS(LimitAmount); // field.
|
||||
JSS(BidMax); // in: AMM Bid
|
||||
JSS(BidMin); // in: AMM Bid
|
||||
JSS(MPToken); // ledger type.
|
||||
JSS(MPTokenIssuance); // ledger type.
|
||||
JSS(NetworkID); // field.
|
||||
JSS(NFTokenOffer); // ledger type.
|
||||
JSS(NFTokenPage); // ledger type.
|
||||
@@ -132,101 +134,106 @@ JSS(account_sequence_available); // out: SubmitTransaction
|
||||
JSS(account_history_tx_stream); // in: Subscribe, Unsubscribe
|
||||
JSS(account_history_tx_index); // out: Account txn history subscribe
|
||||
|
||||
JSS(account_history_tx_first); // out: Account txn history subscribe
|
||||
JSS(account_history_boundary); // out: Account txn history subscribe
|
||||
JSS(accounts); // in: LedgerEntry, Subscribe,
|
||||
// handlers/Ledger, Unsubscribe
|
||||
JSS(accounts_proposed); // in: Subscribe, Unsubscribe
|
||||
JSS(account_history_tx_first); // out: Account txn history subscribe
|
||||
JSS(account_history_boundary); // out: Account txn history subscribe
|
||||
JSS(accounts); // in: LedgerEntry, Subscribe,
|
||||
// handlers/Ledger, Unsubscribe
|
||||
JSS(accounts_proposed); // in: Subscribe, Unsubscribe
|
||||
JSS(action);
|
||||
JSS(acquiring); // out: LedgerRequest
|
||||
JSS(address); // out: PeerImp
|
||||
JSS(affected); // out: AcceptedLedgerTx
|
||||
JSS(age); // out: NetworkOPs, Peers
|
||||
JSS(alternatives); // out: PathRequest, RipplePathFind
|
||||
JSS(amendment_blocked); // out: NetworkOPs
|
||||
JSS(amendments); // in: AccountObjects, out: NetworkOPs
|
||||
JSS(amm); // out: amm_info
|
||||
JSS(amm_account); // in: amm_info
|
||||
JSS(amount); // out: AccountChannels, amm_info
|
||||
JSS(amount2); // out: amm_info
|
||||
JSS(api_version); // in: many, out: Version
|
||||
JSS(api_version_low); // out: Version
|
||||
JSS(applied); // out: SubmitTransaction
|
||||
JSS(asks); // out: Subscribe
|
||||
JSS(asset); // in: amm_info
|
||||
JSS(asset2); // in: amm_info
|
||||
JSS(assets); // out: GatewayBalances
|
||||
JSS(asset_frozen); // out: amm_info
|
||||
JSS(asset2_frozen); // out: amm_info
|
||||
JSS(attestations); //
|
||||
JSS(attestation_reward_account); //
|
||||
JSS(auction_slot); // out: amm_info
|
||||
JSS(authorized); // out: AccountLines
|
||||
JSS(auth_accounts); // out: amm_info
|
||||
JSS(auth_change); // out: AccountInfo
|
||||
JSS(auth_change_queued); // out: AccountInfo
|
||||
JSS(available); // out: ValidatorList
|
||||
JSS(avg_bps_recv); // out: Peers
|
||||
JSS(avg_bps_sent); // out: Peers
|
||||
JSS(balance); // out: AccountLines
|
||||
JSS(balances); // out: GatewayBalances
|
||||
JSS(base); // out: LogLevel
|
||||
JSS(base_asset); // in: get_aggregate_price
|
||||
JSS(base_fee); // out: NetworkOPs
|
||||
JSS(base_fee_xrp); // out: NetworkOPs
|
||||
JSS(bids); // out: Subscribe
|
||||
JSS(binary); // in: AccountTX, LedgerEntry,
|
||||
// AccountTxOld, Tx LedgerData
|
||||
JSS(blob); // out: ValidatorList
|
||||
JSS(blobs_v2); // out: ValidatorList
|
||||
// in: UNL
|
||||
JSS(books); // in: Subscribe, Unsubscribe
|
||||
JSS(both); // in: Subscribe, Unsubscribe
|
||||
JSS(both_sides); // in: Subscribe, Unsubscribe
|
||||
JSS(broadcast); // out: SubmitTransaction
|
||||
JSS(bridge); // in: LedgerEntry
|
||||
JSS(bridge_account); // in: LedgerEntry
|
||||
JSS(build_path); // in: TransactionSign
|
||||
JSS(build_version); // out: NetworkOPs
|
||||
JSS(cancel_after); // out: AccountChannels
|
||||
JSS(can_delete); // out: CanDelete
|
||||
JSS(changes); // out: BookChanges
|
||||
JSS(channel_id); // out: AccountChannels
|
||||
JSS(channels); // out: AccountChannels
|
||||
JSS(check); // in: AccountObjects
|
||||
JSS(check_nodes); // in: LedgerCleaner
|
||||
JSS(clear); // in/out: FetchInfo
|
||||
JSS(close); // out: BookChanges
|
||||
JSS(close_flags); // out: LedgerToJson
|
||||
JSS(close_time); // in: Application, out: NetworkOPs,
|
||||
// RCLCxPeerPos, LedgerToJson
|
||||
JSS(close_time_iso); // out: Tx, NetworkOPs, TransactionEntry
|
||||
// AccountTx, LedgerToJson
|
||||
JSS(close_time_estimated); // in: Application, out: LedgerToJson
|
||||
JSS(close_time_human); // out: LedgerToJson
|
||||
JSS(close_time_offset); // out: NetworkOPs
|
||||
JSS(close_time_resolution); // in: Application; out: LedgerToJson
|
||||
JSS(closed); // out: NetworkOPs, LedgerToJson,
|
||||
// handlers/Ledger
|
||||
JSS(closed_ledger); // out: NetworkOPs
|
||||
JSS(cluster); // out: PeerImp
|
||||
JSS(code); // out: errors
|
||||
JSS(command); // in: RPCHandler
|
||||
JSS(complete); // out: NetworkOPs, InboundLedger
|
||||
JSS(complete_ledgers); // out: NetworkOPs, PeerImp
|
||||
JSS(consensus); // out: NetworkOPs, LedgerConsensus
|
||||
JSS(converge_time); // out: NetworkOPs
|
||||
JSS(converge_time_s); // out: NetworkOPs
|
||||
JSS(cookie); // out: NetworkOPs
|
||||
JSS(count); // in: AccountTx*, ValidatorList
|
||||
JSS(counters); // in/out: retrieve counters
|
||||
JSS(ctid); // in/out: Tx RPC
|
||||
JSS(currency_a); // out: BookChanges
|
||||
JSS(currency_b); // out: BookChanges
|
||||
JSS(currency); // in: paths/PathRequest, STAmount
|
||||
// out: STPathSet, STAmount,
|
||||
// AccountLines
|
||||
JSS(current); // out: OwnerInfo
|
||||
JSS(acquiring); // out: LedgerRequest
|
||||
JSS(address); // out: PeerImp
|
||||
JSS(affected); // out: AcceptedLedgerTx
|
||||
JSS(age); // out: NetworkOPs, Peers
|
||||
JSS(alternatives); // out: PathRequest, RipplePathFind
|
||||
JSS(amendment_blocked); // out: NetworkOPs
|
||||
JSS(amendments); // in: AccountObjects, out: NetworkOPs
|
||||
JSS(amm); // out: amm_info
|
||||
JSS(amm_account); // in: amm_info
|
||||
JSS(amount); // out: AccountChannels, amm_info
|
||||
JSS(amount2); // out: amm_info
|
||||
JSS(api_version); // in: many, out: Version
|
||||
JSS(api_version_low); // out: Version
|
||||
JSS(applied); // out: SubmitTransaction
|
||||
JSS(asks); // out: Subscribe
|
||||
JSS(asset); // in: amm_info
|
||||
JSS(asset2); // in: amm_info
|
||||
JSS(assets); // out: GatewayBalances
|
||||
JSS(asset_frozen); // out: amm_info
|
||||
JSS(asset2_frozen); // out: amm_info
|
||||
JSS(attestations);
|
||||
JSS(attestation_reward_account);
|
||||
JSS(auction_slot); // out: amm_info
|
||||
JSS(authorized); // out: AccountLines
|
||||
JSS(auth_accounts); // out: amm_info
|
||||
JSS(auth_change); // out: AccountInfo
|
||||
JSS(auth_change_queued); // out: AccountInfo
|
||||
JSS(available); // out: ValidatorList
|
||||
JSS(avg_bps_recv); // out: Peers
|
||||
JSS(avg_bps_sent); // out: Peers
|
||||
JSS(balance); // out: AccountLines
|
||||
JSS(balances); // out: GatewayBalances
|
||||
JSS(base); // out: LogLevel
|
||||
JSS(base_asset); // in: get_aggregate_price
|
||||
JSS(base_fee); // out: NetworkOPs
|
||||
JSS(base_fee_xrp); // out: NetworkOPs
|
||||
JSS(bids); // out: Subscribe
|
||||
JSS(binary); // in: AccountTX, LedgerEntry,
|
||||
// AccountTxOld, Tx LedgerData
|
||||
JSS(blob); // out: ValidatorList
|
||||
JSS(blobs_v2); // out: ValidatorList
|
||||
// in: UNL
|
||||
JSS(books); // in: Subscribe, Unsubscribe
|
||||
JSS(both); // in: Subscribe, Unsubscribe
|
||||
JSS(both_sides); // in: Subscribe, Unsubscribe
|
||||
JSS(broadcast); // out: SubmitTransaction
|
||||
JSS(bridge); // in: LedgerEntry
|
||||
JSS(bridge_account); // in: LedgerEntry
|
||||
JSS(build_path); // in: TransactionSign
|
||||
JSS(build_version); // out: NetworkOPs
|
||||
JSS(cancel_after); // out: AccountChannels
|
||||
JSS(can_delete); // out: CanDelete
|
||||
JSS(mpt_amount); // out: mpt_holders
|
||||
JSS(mpt_issuance); // in: LedgerEntry, AccountObjects
|
||||
JSS(mpt_issuance_id); // in: Payment, mpt_holders
|
||||
JSS(mptoken); // in: LedgerEntry, AccountObjects
|
||||
JSS(mptoken_index); // out: mpt_holders
|
||||
JSS(changes); // out: BookChanges
|
||||
JSS(channel_id); // out: AccountChannels
|
||||
JSS(channels); // out: AccountChannels
|
||||
JSS(check); // in: AccountObjects
|
||||
JSS(check_nodes); // in: LedgerCleaner
|
||||
JSS(clear); // in/out: FetchInfo
|
||||
JSS(close); // out: BookChanges
|
||||
JSS(close_flags); // out: LedgerToJson
|
||||
JSS(close_time); // in: Application, out: NetworkOPs,
|
||||
// RCLCxPeerPos, LedgerToJson
|
||||
JSS(close_time_iso); // out: Tx, NetworkOPs, TransactionEntry
|
||||
// AccountTx, LedgerToJson
|
||||
JSS(close_time_estimated); // in: Application, out: LedgerToJson
|
||||
JSS(close_time_human); // out: LedgerToJson
|
||||
JSS(close_time_offset); // out: NetworkOPs
|
||||
JSS(close_time_resolution); // in: Application; out: LedgerToJson
|
||||
JSS(closed); // out: NetworkOPs, LedgerToJson,
|
||||
// handlers/Ledger
|
||||
JSS(closed_ledger); // out: NetworkOPs
|
||||
JSS(cluster); // out: PeerImp
|
||||
JSS(code); // out: errors
|
||||
JSS(command); // in: RPCHandler
|
||||
JSS(complete); // out: NetworkOPs, InboundLedger
|
||||
JSS(complete_ledgers); // out: NetworkOPs, PeerImp
|
||||
JSS(consensus); // out: NetworkOPs, LedgerConsensus
|
||||
JSS(converge_time); // out: NetworkOPs
|
||||
JSS(converge_time_s); // out: NetworkOPs
|
||||
JSS(cookie); // out: NetworkOPs
|
||||
JSS(count); // in: AccountTx*, ValidatorList
|
||||
JSS(counters); // in/out: retrieve counters
|
||||
JSS(ctid); // in/out: Tx RPC
|
||||
JSS(currency_a); // out: BookChanges
|
||||
JSS(currency_b); // out: BookChanges
|
||||
JSS(currency); // in: paths/PathRequest, STAmount
|
||||
// out: STPathSet, STAmount,
|
||||
// AccountLines
|
||||
JSS(current); // out: OwnerInfo
|
||||
JSS(current_activities);
|
||||
JSS(current_ledger_size); // out: TxQ
|
||||
JSS(current_queue_size); // out: TxQ
|
||||
@@ -271,354 +278,355 @@ JSS(ephemeral_key); // out: ValidatorInfo
|
||||
// in/out: Manifest
|
||||
JSS(error); // out: error
|
||||
JSS(errored);
|
||||
JSS(error_code); // out: error
|
||||
JSS(error_exception); // out: Submit
|
||||
JSS(error_message); // out: error
|
||||
JSS(escrow); // in: LedgerEntry
|
||||
JSS(expand); // in: handler/Ledger
|
||||
JSS(expected_date); // out: any (warnings)
|
||||
JSS(expected_date_UTC); // out: any (warnings)
|
||||
JSS(expected_ledger_size); // out: TxQ
|
||||
JSS(expiration); // out: AccountOffers, AccountChannels,
|
||||
// ValidatorList, amm_info
|
||||
JSS(fail_hard); // in: Sign, Submit
|
||||
JSS(failed); // out: InboundLedger
|
||||
JSS(feature); // in: Feature
|
||||
JSS(features); // out: Feature
|
||||
JSS(fee); // out: NetworkOPs, Peers
|
||||
JSS(fee_base); // out: NetworkOPs
|
||||
JSS(fee_div_max); // in: TransactionSign
|
||||
JSS(fee_level); // out: AccountInfo
|
||||
JSS(fee_mult_max); // in: TransactionSign
|
||||
JSS(fee_ref); // out: NetworkOPs, DEPRECATED
|
||||
JSS(fetch_pack); // out: NetworkOPs
|
||||
JSS(FIELDS); // out: RPC server_definitions
|
||||
// matches definitions.json format
|
||||
JSS(first); // out: rpc/Version
|
||||
JSS(error_code); // out: error
|
||||
JSS(error_exception); // out: Submit
|
||||
JSS(error_message); // out: error
|
||||
JSS(escrow); // in: LedgerEntry
|
||||
JSS(expand); // in: handler/Ledger
|
||||
JSS(expected_date); // out: any (warnings)
|
||||
JSS(expected_date_UTC); // out: any (warnings)
|
||||
JSS(expected_ledger_size); // out: TxQ
|
||||
JSS(expiration); // out: AccountOffers, AccountChannels,
|
||||
// ValidatorList, amm_info
|
||||
JSS(fail_hard); // in: Sign, Submit
|
||||
JSS(failed); // out: InboundLedger
|
||||
JSS(feature); // in: Feature
|
||||
JSS(features); // out: Feature
|
||||
JSS(fee); // out: NetworkOPs, Peers
|
||||
JSS(fee_base); // out: NetworkOPs
|
||||
JSS(fee_div_max); // in: TransactionSign
|
||||
JSS(fee_level); // out: AccountInfo
|
||||
JSS(fee_mult_max); // in: TransactionSign
|
||||
JSS(fee_ref); // out: NetworkOPs, DEPRECATED
|
||||
JSS(fetch_pack); // out: NetworkOPs
|
||||
JSS(FIELDS); // out: RPC server_definitions
|
||||
// matches definitions.json format
|
||||
JSS(first); // out: rpc/Version
|
||||
JSS(finished);
|
||||
JSS(fix_txns); // in: LedgerCleaner
|
||||
JSS(flags); // out: AccountOffers,
|
||||
// NetworkOPs
|
||||
JSS(forward); // in: AccountTx
|
||||
JSS(freeze); // out: AccountLines
|
||||
JSS(freeze_peer); // out: AccountLines
|
||||
JSS(frozen_balances); // out: GatewayBalances
|
||||
JSS(full); // in: LedgerClearer, handlers/Ledger
|
||||
JSS(full_reply); // out: PathFind
|
||||
JSS(fullbelow_size); // out: GetCounts
|
||||
JSS(good); // out: RPCVersion
|
||||
JSS(hash); // out: NetworkOPs, InboundLedger,
|
||||
// LedgerToJson, STTx; field
|
||||
JSS(hashes); // in: AccountObjects
|
||||
JSS(have_header); // out: InboundLedger
|
||||
JSS(have_state); // out: InboundLedger
|
||||
JSS(have_transactions); // out: InboundLedger
|
||||
JSS(high); // out: BookChanges
|
||||
JSS(highest_sequence); // out: AccountInfo
|
||||
JSS(highest_ticket); // out: AccountInfo
|
||||
JSS(historical_perminute); // historical_perminute.
|
||||
JSS(hostid); // out: NetworkOPs
|
||||
JSS(hotwallet); // in: GatewayBalances
|
||||
JSS(id); // websocket.
|
||||
JSS(ident); // in: AccountCurrencies, AccountInfo,
|
||||
// OwnerInfo
|
||||
JSS(ignore_default); // in: AccountLines
|
||||
JSS(inLedger); // out: tx/Transaction
|
||||
JSS(inbound); // out: PeerImp
|
||||
JSS(index); // in: LedgerEntry
|
||||
// out: STLedgerEntry,
|
||||
// LedgerEntry, TxHistory, LedgerData
|
||||
JSS(info); // out: ServerInfo, ConsensusInfo, FetchInfo
|
||||
JSS(fix_txns); // in: LedgerCleaner
|
||||
JSS(flags); // out: AccountOffers,
|
||||
// NetworkOPs
|
||||
JSS(forward); // in: AccountTx
|
||||
JSS(freeze); // out: AccountLines
|
||||
JSS(freeze_peer); // out: AccountLines
|
||||
JSS(frozen_balances); // out: GatewayBalances
|
||||
JSS(full); // in: LedgerClearer, handlers/Ledger
|
||||
JSS(full_reply); // out: PathFind
|
||||
JSS(fullbelow_size); // out: GetCounts
|
||||
JSS(good); // out: RPCVersion
|
||||
JSS(hash); // out: NetworkOPs, InboundLedger,
|
||||
// LedgerToJson, STTx; field
|
||||
JSS(hashes); // in: AccountObjects
|
||||
JSS(have_header); // out: InboundLedger
|
||||
JSS(have_state); // out: InboundLedger
|
||||
JSS(have_transactions); // out: InboundLedger
|
||||
JSS(high); // out: BookChanges
|
||||
JSS(highest_sequence); // out: AccountInfo
|
||||
JSS(highest_ticket); // out: AccountInfo
|
||||
JSS(historical_perminute); // historical_perminute.
|
||||
JSS(holders); // out: MPTHolders
|
||||
JSS(hostid); // out: NetworkOPs
|
||||
JSS(hotwallet); // in: GatewayBalances
|
||||
JSS(id); // websocket.
|
||||
JSS(ident); // in: AccountCurrencies, AccountInfo,
|
||||
// OwnerInfo
|
||||
JSS(ignore_default); // in: AccountLines
|
||||
JSS(inLedger); // out: tx/Transaction
|
||||
JSS(inbound); // out: PeerImp
|
||||
JSS(index); // in: LedgerEntry
|
||||
// out: STLedgerEntry,
|
||||
// LedgerEntry, TxHistory, LedgerData
|
||||
JSS(info); // out: ServerInfo, ConsensusInfo, FetchInfo
|
||||
JSS(initial_sync_duration_us);
|
||||
JSS(internal_command); // in: Internal
|
||||
JSS(invalid_API_version); // out: Many, when a request has an invalid
|
||||
// version
|
||||
JSS(io_latency_ms); // out: NetworkOPs
|
||||
JSS(ip); // in: Connect, out: OverlayImpl
|
||||
JSS(is_burned); // out: nft_info (clio)
|
||||
JSS(isSerialized); // out: RPC server_definitions
|
||||
// matches definitions.json format
|
||||
JSS(isSigningField); // out: RPC server_definitions
|
||||
// matches definitions.json format
|
||||
JSS(isVLEncoded); // out: RPC server_definitions
|
||||
// matches definitions.json format
|
||||
JSS(issuer); // in: RipplePathFind, Subscribe,
|
||||
// Unsubscribe, BookOffers
|
||||
// out: STPathSet, STAmount
|
||||
JSS(internal_command); // in: Internal
|
||||
JSS(invalid_API_version); // out: Many, when a request has an invalid
|
||||
// version
|
||||
JSS(io_latency_ms); // out: NetworkOPs
|
||||
JSS(ip); // in: Connect, out: OverlayImpl
|
||||
JSS(is_burned); // out: nft_info (clio)
|
||||
JSS(isSerialized); // out: RPC server_definitions
|
||||
// matches definitions.json format
|
||||
JSS(isSigningField); // out: RPC server_definitions
|
||||
// matches definitions.json format
|
||||
JSS(isVLEncoded); // out: RPC server_definitions
|
||||
// matches definitions.json format
|
||||
JSS(issuer); // in: RipplePathFind, Subscribe,
|
||||
// Unsubscribe, BookOffers
|
||||
// out: STPathSet, STAmount
|
||||
JSS(job);
|
||||
JSS(job_queue);
|
||||
JSS(jobs);
|
||||
JSS(jsonrpc); // json version
|
||||
JSS(jq_trans_overflow); // JobQueue transaction limit overflow.
|
||||
JSS(kept); // out: SubmitTransaction
|
||||
JSS(key); // out
|
||||
JSS(key_type); // in/out: WalletPropose, TransactionSign
|
||||
JSS(latency); // out: PeerImp
|
||||
JSS(last); // out: RPCVersion
|
||||
JSS(last_close); // out: NetworkOPs
|
||||
JSS(last_refresh_time); // out: ValidatorSite
|
||||
JSS(last_refresh_status); // out: ValidatorSite
|
||||
JSS(last_refresh_message); // out: ValidatorSite
|
||||
JSS(ledger); // in: NetworkOPs, LedgerCleaner,
|
||||
// RPCHelpers
|
||||
// out: NetworkOPs, PeerImp
|
||||
JSS(ledger_current_index); // out: NetworkOPs, RPCHelpers,
|
||||
// LedgerCurrent, LedgerAccept,
|
||||
// AccountLines
|
||||
JSS(ledger_data); // out: LedgerHeader
|
||||
JSS(ledger_hash); // in: RPCHelpers, LedgerRequest,
|
||||
// RipplePathFind, TransactionEntry,
|
||||
// handlers/Ledger
|
||||
// out: NetworkOPs, RPCHelpers,
|
||||
// LedgerClosed, LedgerData,
|
||||
// AccountLines
|
||||
JSS(ledger_hit_rate); // out: GetCounts
|
||||
JSS(ledger_index); // in/out: many
|
||||
JSS(ledger_index_max); // in, out: AccountTx*
|
||||
JSS(ledger_index_min); // in, out: AccountTx*
|
||||
JSS(ledger_max); // in, out: AccountTx*
|
||||
JSS(ledger_min); // in, out: AccountTx*
|
||||
JSS(ledger_time); // out: NetworkOPs
|
||||
JSS(LEDGER_ENTRY_TYPES); // out: RPC server_definitions
|
||||
// matches definitions.json format
|
||||
JSS(levels); // LogLevels
|
||||
JSS(limit); // in/out: AccountTx*, AccountOffers,
|
||||
// AccountLines, AccountObjects
|
||||
// in: LedgerData, BookOffers
|
||||
JSS(limit_peer); // out: AccountLines
|
||||
JSS(lines); // out: AccountLines
|
||||
JSS(list); // out: ValidatorList
|
||||
JSS(load); // out: NetworkOPs, PeerImp
|
||||
JSS(load_base); // out: NetworkOPs
|
||||
JSS(load_factor); // out: NetworkOPs
|
||||
JSS(load_factor_cluster); // out: NetworkOPs
|
||||
JSS(load_factor_fee_escalation); // out: NetworkOPs
|
||||
JSS(load_factor_fee_queue); // out: NetworkOPs
|
||||
JSS(load_factor_fee_reference); // out: NetworkOPs
|
||||
JSS(load_factor_local); // out: NetworkOPs
|
||||
JSS(load_factor_net); // out: NetworkOPs
|
||||
JSS(load_factor_server); // out: NetworkOPs
|
||||
JSS(load_fee); // out: LoadFeeTrackImp, NetworkOPs
|
||||
JSS(local); // out: resource/Logic.h
|
||||
JSS(local_txs); // out: GetCounts
|
||||
JSS(local_static_keys); // out: ValidatorList
|
||||
JSS(low); // out: BookChanges
|
||||
JSS(lowest_sequence); // out: AccountInfo
|
||||
JSS(lowest_ticket); // out: AccountInfo
|
||||
JSS(lp_token); // out: amm_info
|
||||
JSS(majority); // out: RPC feature
|
||||
JSS(manifest); // out: ValidatorInfo, Manifest
|
||||
JSS(marker); // in/out: AccountTx, AccountOffers,
|
||||
// AccountLines, AccountObjects,
|
||||
// LedgerData
|
||||
// in: BookOffers
|
||||
JSS(master_key); // out: WalletPropose, NetworkOPs,
|
||||
// ValidatorInfo
|
||||
// in/out: Manifest
|
||||
JSS(master_seed); // out: WalletPropose
|
||||
JSS(master_seed_hex); // out: WalletPropose
|
||||
JSS(master_signature); // out: pubManifest
|
||||
JSS(max_ledger); // in/out: LedgerCleaner
|
||||
JSS(max_queue_size); // out: TxQ
|
||||
JSS(max_spend_drops); // out: AccountInfo
|
||||
JSS(max_spend_drops_total); // out: AccountInfo
|
||||
JSS(mean); // out: get_aggregate_price
|
||||
JSS(median); // out: get_aggregate_price
|
||||
JSS(median_fee); // out: TxQ
|
||||
JSS(median_level); // out: TxQ
|
||||
JSS(message); // error.
|
||||
JSS(meta); // out: NetworkOPs, AccountTx*, Tx
|
||||
JSS(meta_blob); // out: NetworkOPs, AccountTx*, Tx
|
||||
JSS(jsonrpc); // json version
|
||||
JSS(jq_trans_overflow); // JobQueue transaction limit overflow.
|
||||
JSS(kept); // out: SubmitTransaction
|
||||
JSS(key); // out
|
||||
JSS(key_type); // in/out: WalletPropose, TransactionSign
|
||||
JSS(latency); // out: PeerImp
|
||||
JSS(last); // out: RPCVersion
|
||||
JSS(last_close); // out: NetworkOPs
|
||||
JSS(last_refresh_time); // out: ValidatorSite
|
||||
JSS(last_refresh_status); // out: ValidatorSite
|
||||
JSS(last_refresh_message); // out: ValidatorSite
|
||||
JSS(ledger); // in: NetworkOPs, LedgerCleaner,
|
||||
// RPCHelpers
|
||||
// out: NetworkOPs, PeerImp
|
||||
JSS(ledger_current_index); // out: NetworkOPs, RPCHelpers,
|
||||
// LedgerCurrent, LedgerAccept,
|
||||
// AccountLines
|
||||
JSS(ledger_data); // out: LedgerHeader
|
||||
JSS(ledger_hash); // in: RPCHelpers, LedgerRequest,
|
||||
// RipplePathFind, TransactionEntry,
|
||||
// handlers/Ledger
|
||||
// out: NetworkOPs, RPCHelpers,
|
||||
// LedgerClosed, LedgerData,
|
||||
// AccountLines
|
||||
JSS(ledger_hit_rate); // out: GetCounts
|
||||
JSS(ledger_index); // in/out: many
|
||||
JSS(ledger_index_max); // in, out: AccountTx*
|
||||
JSS(ledger_index_min); // in, out: AccountTx*
|
||||
JSS(ledger_max); // in, out: AccountTx*
|
||||
JSS(ledger_min); // in, out: AccountTx*
|
||||
JSS(ledger_time); // out: NetworkOPs
|
||||
JSS(LEDGER_ENTRY_TYPES); // out: RPC server_definitions
|
||||
// matches definitions.json format
|
||||
JSS(levels); // LogLevels
|
||||
JSS(limit); // in/out: AccountTx*, AccountOffers,
|
||||
// AccountLines, AccountObjects
|
||||
// in: LedgerData, BookOffers
|
||||
JSS(limit_peer); // out: AccountLines
|
||||
JSS(lines); // out: AccountLines
|
||||
JSS(list); // out: ValidatorList
|
||||
JSS(load); // out: NetworkOPs, PeerImp
|
||||
JSS(load_base); // out: NetworkOPs
|
||||
JSS(load_factor); // out: NetworkOPs
|
||||
JSS(load_factor_cluster); // out: NetworkOPs
|
||||
JSS(load_factor_fee_escalation); // out: NetworkOPs
|
||||
JSS(load_factor_fee_queue); // out: NetworkOPs
|
||||
JSS(load_factor_fee_reference); // out: NetworkOPs
|
||||
JSS(load_factor_local); // out: NetworkOPs
|
||||
JSS(load_factor_net); // out: NetworkOPs
|
||||
JSS(load_factor_server); // out: NetworkOPs
|
||||
JSS(load_fee); // out: LoadFeeTrackImp, NetworkOPs
|
||||
JSS(local); // out: resource/Logic.h
|
||||
JSS(local_txs); // out: GetCounts
|
||||
JSS(local_static_keys); // out: ValidatorList
|
||||
JSS(low); // out: BookChanges
|
||||
JSS(lowest_sequence); // out: AccountInfo
|
||||
JSS(lowest_ticket); // out: AccountInfo
|
||||
JSS(lp_token); // out: amm_info
|
||||
JSS(majority); // out: RPC feature
|
||||
JSS(manifest); // out: ValidatorInfo, Manifest
|
||||
JSS(marker); // in/out: AccountTx, AccountOffers,
|
||||
// AccountLines, AccountObjects,
|
||||
// LedgerData
|
||||
// in: BookOffers
|
||||
JSS(master_key); // out: WalletPropose, NetworkOPs,
|
||||
// ValidatorInfo
|
||||
// in/out: Manifest
|
||||
JSS(master_seed); // out: WalletPropose
|
||||
JSS(master_seed_hex); // out: WalletPropose
|
||||
JSS(master_signature); // out: pubManifest
|
||||
JSS(max_ledger); // in/out: LedgerCleaner
|
||||
JSS(max_queue_size); // out: TxQ
|
||||
JSS(max_spend_drops); // out: AccountInfo
|
||||
JSS(max_spend_drops_total); // out: AccountInfo
|
||||
JSS(mean); // out: get_aggregate_price
|
||||
JSS(median); // out: get_aggregate_price
|
||||
JSS(median_fee); // out: TxQ
|
||||
JSS(median_level); // out: TxQ
|
||||
JSS(message); // error.
|
||||
JSS(meta); // out: NetworkOPs, AccountTx*, Tx
|
||||
JSS(meta_blob); // out: NetworkOPs, AccountTx*, Tx
|
||||
JSS(metaData);
|
||||
JSS(metadata); // out: TransactionEntry
|
||||
JSS(method); // RPC
|
||||
JSS(metadata); // out: TransactionEntry
|
||||
JSS(method); // RPC
|
||||
JSS(methods);
|
||||
JSS(metrics); // out: Peers
|
||||
JSS(min_count); // in: GetCounts
|
||||
JSS(min_ledger); // in: LedgerCleaner
|
||||
JSS(minimum_fee); // out: TxQ
|
||||
JSS(minimum_level); // out: TxQ
|
||||
JSS(missingCommand); // error
|
||||
JSS(name); // out: AmendmentTableImpl, PeerImp
|
||||
JSS(needed_state_hashes); // out: InboundLedger
|
||||
JSS(metrics); // out: Peers
|
||||
JSS(min_count); // in: GetCounts
|
||||
JSS(min_ledger); // in: LedgerCleaner
|
||||
JSS(minimum_fee); // out: TxQ
|
||||
JSS(minimum_level); // out: TxQ
|
||||
JSS(missingCommand); // error
|
||||
JSS(name); // out: AmendmentTableImpl, PeerImp
|
||||
JSS(needed_state_hashes); // out: InboundLedger
|
||||
JSS(needed_transaction_hashes); // out: InboundLedger
|
||||
JSS(network_id); // out: NetworkOPs
|
||||
JSS(network_ledger); // out: NetworkOPs
|
||||
JSS(next_refresh_time); // out: ValidatorSite
|
||||
JSS(nft_id); // in: nft_sell_offers, nft_buy_offers
|
||||
JSS(nft_offer); // in: LedgerEntry
|
||||
JSS(nft_offer_index); // out nft_buy_offers, nft_sell_offers
|
||||
JSS(nft_page); // in: LedgerEntry
|
||||
JSS(nft_serial); // out: account_nfts
|
||||
JSS(nft_taxon); // out: nft_info (clio)
|
||||
JSS(nftoken_id); // out: insertNFTokenID
|
||||
JSS(nftoken_ids); // out: insertNFTokenID
|
||||
JSS(no_ripple); // out: AccountLines
|
||||
JSS(no_ripple_peer); // out: AccountLines
|
||||
JSS(node); // out: LedgerEntry
|
||||
JSS(node_binary); // out: LedgerEntry
|
||||
JSS(node_read_bytes); // out: GetCounts
|
||||
JSS(node_read_errors); // out: GetCounts
|
||||
JSS(node_read_retries); // out: GetCounts
|
||||
JSS(node_reads_hit); // out: GetCounts
|
||||
JSS(node_reads_total); // out: GetCounts
|
||||
JSS(node_reads_duration_us); // out: GetCounts
|
||||
JSS(node_size); // out: server_info
|
||||
JSS(nodestore); // out: GetCounts
|
||||
JSS(node_writes); // out: GetCounts
|
||||
JSS(node_written_bytes); // out: GetCounts
|
||||
JSS(node_writes_duration_us); // out: GetCounts
|
||||
JSS(node_write_retries); // out: GetCounts
|
||||
JSS(node_writes_delayed); // out::GetCounts
|
||||
JSS(nth); // out: RPC server_definitions
|
||||
JSS(nunl); // in: AccountObjects
|
||||
JSS(obligations); // out: GatewayBalances
|
||||
JSS(offer); // in: LedgerEntry
|
||||
JSS(offers); // out: NetworkOPs, AccountOffers, Subscribe
|
||||
JSS(offer_id); // out: insertNFTokenOfferID
|
||||
JSS(offline); // in: TransactionSign
|
||||
JSS(offset); // in/out: AccountTxOld
|
||||
JSS(open); // out: handlers/Ledger
|
||||
JSS(open_ledger_cost); // out: SubmitTransaction
|
||||
JSS(open_ledger_fee); // out: TxQ
|
||||
JSS(open_ledger_level); // out: TxQ
|
||||
JSS(oracle); // in: LedgerEntry
|
||||
JSS(oracles); // in: get_aggregate_price
|
||||
JSS(oracle_document_id); // in: get_aggregate_price
|
||||
JSS(owner); // in: LedgerEntry, out: NetworkOPs
|
||||
JSS(owner_funds); // in/out: Ledger, NetworkOPs, AcceptedLedgerTx
|
||||
JSS(network_id); // out: NetworkOPs
|
||||
JSS(network_ledger); // out: NetworkOPs
|
||||
JSS(next_refresh_time); // out: ValidatorSite
|
||||
JSS(nft_id); // in: nft_sell_offers, nft_buy_offers
|
||||
JSS(nft_offer); // in: LedgerEntry
|
||||
JSS(nft_offer_index); // out nft_buy_offers, nft_sell_offers
|
||||
JSS(nft_page); // in: LedgerEntry
|
||||
JSS(nft_serial); // out: account_nfts
|
||||
JSS(nft_taxon); // out: nft_info (clio)
|
||||
JSS(nftoken_id); // out: insertNFTokenID
|
||||
JSS(nftoken_ids); // out: insertNFTokenID
|
||||
JSS(no_ripple); // out: AccountLines
|
||||
JSS(no_ripple_peer); // out: AccountLines
|
||||
JSS(node); // out: LedgerEntry
|
||||
JSS(node_binary); // out: LedgerEntry
|
||||
JSS(node_read_bytes); // out: GetCounts
|
||||
JSS(node_read_errors); // out: GetCounts
|
||||
JSS(node_read_retries); // out: GetCounts
|
||||
JSS(node_reads_hit); // out: GetCounts
|
||||
JSS(node_reads_total); // out: GetCounts
|
||||
JSS(node_reads_duration_us); // out: GetCounts
|
||||
JSS(node_size); // out: server_info
|
||||
JSS(nodestore); // out: GetCounts
|
||||
JSS(node_writes); // out: GetCounts
|
||||
JSS(node_written_bytes); // out: GetCounts
|
||||
JSS(node_writes_duration_us); // out: GetCounts
|
||||
JSS(node_write_retries); // out: GetCounts
|
||||
JSS(node_writes_delayed); // out::GetCounts
|
||||
JSS(nth); // out: RPC server_definitions
|
||||
JSS(nunl); // in: AccountObjects
|
||||
JSS(obligations); // out: GatewayBalances
|
||||
JSS(offer); // in: LedgerEntry
|
||||
JSS(offers); // out: NetworkOPs, AccountOffers, Subscribe
|
||||
JSS(offer_id); // out: insertNFTokenOfferID
|
||||
JSS(offline); // in: TransactionSign
|
||||
JSS(offset); // in/out: AccountTxOld
|
||||
JSS(open); // out: handlers/Ledger
|
||||
JSS(open_ledger_cost); // out: SubmitTransaction
|
||||
JSS(open_ledger_fee); // out: TxQ
|
||||
JSS(open_ledger_level); // out: TxQ
|
||||
JSS(oracle); // in: LedgerEntry
|
||||
JSS(oracles); // in: get_aggregate_price
|
||||
JSS(oracle_document_id); // in: get_aggregate_price
|
||||
JSS(owner); // in: LedgerEntry, out: NetworkOPs
|
||||
JSS(owner_funds); // in/out: Ledger, NetworkOPs, AcceptedLedgerTx
|
||||
JSS(page_index);
|
||||
JSS(params); // RPC
|
||||
JSS(parent_close_time); // out: LedgerToJson
|
||||
JSS(parent_hash); // out: LedgerToJson
|
||||
JSS(partition); // in: LogLevel
|
||||
JSS(passphrase); // in: WalletPropose
|
||||
JSS(password); // in: Subscribe
|
||||
JSS(paths); // in: RipplePathFind
|
||||
JSS(paths_canonical); // out: RipplePathFind
|
||||
JSS(paths_computed); // out: PathRequest, RipplePathFind
|
||||
JSS(payment_channel); // in: LedgerEntry
|
||||
JSS(peer); // in: AccountLines
|
||||
JSS(peer_authorized); // out: AccountLines
|
||||
JSS(peer_id); // out: RCLCxPeerPos
|
||||
JSS(peers); // out: InboundLedger, handlers/Peers, Overlay
|
||||
JSS(peer_disconnects); // Severed peer connection counter.
|
||||
JSS(peer_disconnects_resources); // Severed peer connections because of
|
||||
// excess resource consumption.
|
||||
JSS(port); // in: Connect, out: NetworkOPs
|
||||
JSS(ports); // out: NetworkOPs
|
||||
JSS(previous); // out: Reservations
|
||||
JSS(previous_ledger); // out: LedgerPropose
|
||||
JSS(price); // out: amm_info, AuctionSlot
|
||||
JSS(proof); // in: BookOffers
|
||||
JSS(propose_seq); // out: LedgerPropose
|
||||
JSS(proposers); // out: NetworkOPs, LedgerConsensus
|
||||
JSS(protocol); // out: NetworkOPs, PeerImp
|
||||
JSS(proxied); // out: RPC ping
|
||||
JSS(pubkey_node); // out: NetworkOPs
|
||||
JSS(pubkey_publisher); // out: ValidatorList
|
||||
JSS(pubkey_validator); // out: NetworkOPs, ValidatorList
|
||||
JSS(public_key); // out: OverlayImpl, PeerImp, WalletPropose,
|
||||
// ValidatorInfo
|
||||
// in/out: Manifest
|
||||
JSS(public_key_hex); // out: WalletPropose
|
||||
JSS(published_ledger); // out: NetworkOPs
|
||||
JSS(publisher_lists); // out: ValidatorList
|
||||
JSS(quality); // out: NetworkOPs
|
||||
JSS(quality_in); // out: AccountLines
|
||||
JSS(quality_out); // out: AccountLines
|
||||
JSS(queue); // in: AccountInfo
|
||||
JSS(queue_data); // out: AccountInfo
|
||||
JSS(queued); // out: SubmitTransaction
|
||||
JSS(params); // RPC
|
||||
JSS(parent_close_time); // out: LedgerToJson
|
||||
JSS(parent_hash); // out: LedgerToJson
|
||||
JSS(partition); // in: LogLevel
|
||||
JSS(passphrase); // in: WalletPropose
|
||||
JSS(password); // in: Subscribe
|
||||
JSS(paths); // in: RipplePathFind
|
||||
JSS(paths_canonical); // out: RipplePathFind
|
||||
JSS(paths_computed); // out: PathRequest, RipplePathFind
|
||||
JSS(payment_channel); // in: LedgerEntry
|
||||
JSS(peer); // in: AccountLines
|
||||
JSS(peer_authorized); // out: AccountLines
|
||||
JSS(peer_id); // out: RCLCxPeerPos
|
||||
JSS(peers); // out: InboundLedger, handlers/Peers, Overlay
|
||||
JSS(peer_disconnects); // Severed peer connection counter.
|
||||
JSS(peer_disconnects_resources); // Severed peer connections because of
|
||||
// excess resource consumption.
|
||||
JSS(port); // in: Connect, out: NetworkOPs
|
||||
JSS(ports); // out: NetworkOPs
|
||||
JSS(previous); // out: Reservations
|
||||
JSS(previous_ledger); // out: LedgerPropose
|
||||
JSS(price); // out: amm_info, AuctionSlot
|
||||
JSS(proof); // in: BookOffers
|
||||
JSS(propose_seq); // out: LedgerPropose
|
||||
JSS(proposers); // out: NetworkOPs, LedgerConsensus
|
||||
JSS(protocol); // out: NetworkOPs, PeerImp
|
||||
JSS(proxied); // out: RPC ping
|
||||
JSS(pubkey_node); // out: NetworkOPs
|
||||
JSS(pubkey_publisher); // out: ValidatorList
|
||||
JSS(pubkey_validator); // out: NetworkOPs, ValidatorList
|
||||
JSS(public_key); // out: OverlayImpl, PeerImp, WalletPropose,
|
||||
// ValidatorInfo
|
||||
// in/out: Manifest
|
||||
JSS(public_key_hex); // out: WalletPropose
|
||||
JSS(published_ledger); // out: NetworkOPs
|
||||
JSS(publisher_lists); // out: ValidatorList
|
||||
JSS(quality); // out: NetworkOPs
|
||||
JSS(quality_in); // out: AccountLines
|
||||
JSS(quality_out); // out: AccountLines
|
||||
JSS(queue); // in: AccountInfo
|
||||
JSS(queue_data); // out: AccountInfo
|
||||
JSS(queued); // out: SubmitTransaction
|
||||
JSS(queued_duration_us);
|
||||
JSS(quote_asset); // in: get_aggregate_price
|
||||
JSS(random); // out: Random
|
||||
JSS(raw_meta); // out: AcceptedLedgerTx
|
||||
JSS(receive_currencies); // out: AccountCurrencies
|
||||
JSS(reference_level); // out: TxQ
|
||||
JSS(refresh_interval); // in: UNL
|
||||
JSS(refresh_interval_min); // out: ValidatorSites
|
||||
JSS(regular_seed); // in/out: LedgerEntry
|
||||
JSS(remaining); // out: ValidatorList
|
||||
JSS(remote); // out: Logic.h
|
||||
JSS(request); // RPC
|
||||
JSS(requested); // out: Manifest
|
||||
JSS(reservations); // out: Reservations
|
||||
JSS(reserve_base); // out: NetworkOPs
|
||||
JSS(reserve_base_xrp); // out: NetworkOPs
|
||||
JSS(reserve_inc); // out: NetworkOPs
|
||||
JSS(reserve_inc_xrp); // out: NetworkOPs
|
||||
JSS(response); // websocket
|
||||
JSS(result); // RPC
|
||||
JSS(ripple_lines); // out: NetworkOPs
|
||||
JSS(ripple_state); // in: LedgerEntr
|
||||
JSS(ripplerpc); // ripple RPC version
|
||||
JSS(role); // out: Ping.cpp
|
||||
JSS(quote_asset); // in: get_aggregate_price
|
||||
JSS(random); // out: Random
|
||||
JSS(raw_meta); // out: AcceptedLedgerTx
|
||||
JSS(receive_currencies); // out: AccountCurrencies
|
||||
JSS(reference_level); // out: TxQ
|
||||
JSS(refresh_interval); // in: UNL
|
||||
JSS(refresh_interval_min); // out: ValidatorSites
|
||||
JSS(regular_seed); // in/out: LedgerEntry
|
||||
JSS(remaining); // out: ValidatorList
|
||||
JSS(remote); // out: Logic.h
|
||||
JSS(request); // RPC
|
||||
JSS(requested); // out: Manifest
|
||||
JSS(reservations); // out: Reservations
|
||||
JSS(reserve_base); // out: NetworkOPs
|
||||
JSS(reserve_base_xrp); // out: NetworkOPs
|
||||
JSS(reserve_inc); // out: NetworkOPs
|
||||
JSS(reserve_inc_xrp); // out: NetworkOPs
|
||||
JSS(response); // websocket
|
||||
JSS(result); // RPC
|
||||
JSS(ripple_lines); // out: NetworkOPs
|
||||
JSS(ripple_state); // in: LedgerEntr
|
||||
JSS(ripplerpc); // ripple RPC version
|
||||
JSS(role); // out: Ping.cpp
|
||||
JSS(rpc);
|
||||
JSS(rt_accounts); // in: Subscribe, Unsubscribe
|
||||
JSS(rt_accounts); // in: Subscribe, Unsubscribe
|
||||
JSS(running_duration_us);
|
||||
JSS(search_depth); // in: RipplePathFind
|
||||
JSS(searched_all); // out: Tx
|
||||
JSS(secret); // in: TransactionSign,
|
||||
// ValidationCreate, ValidationSeed,
|
||||
// channel_authorize
|
||||
JSS(seed); //
|
||||
JSS(seed_hex); // in: WalletPropose, TransactionSign
|
||||
JSS(send_currencies); // out: AccountCurrencies
|
||||
JSS(send_max); // in: PathRequest, RipplePathFind
|
||||
JSS(seq); // in: LedgerEntry;
|
||||
// out: NetworkOPs, RPCSub, AccountOffers,
|
||||
// ValidatorList, ValidatorInfo, Manifest
|
||||
JSS(sequence); // in: UNL
|
||||
JSS(sequence_count); // out: AccountInfo
|
||||
JSS(server_domain); // out: NetworkOPs
|
||||
JSS(server_state); // out: NetworkOPs
|
||||
JSS(server_state_duration_us); // out: NetworkOPs
|
||||
JSS(server_status); // out: NetworkOPs
|
||||
JSS(server_version); // out: NetworkOPs
|
||||
JSS(settle_delay); // out: AccountChannels
|
||||
JSS(severity); // in: LogLevel
|
||||
JSS(signature); // out: NetworkOPs, ChannelAuthorize
|
||||
JSS(signature_verified); // out: ChannelVerify
|
||||
JSS(signing_key); // out: NetworkOPs
|
||||
JSS(signing_keys); // out: ValidatorList
|
||||
JSS(signing_time); // out: NetworkOPs
|
||||
JSS(signer_list); // in: AccountObjects
|
||||
JSS(signer_lists); // in/out: AccountInfo
|
||||
JSS(size); // out: get_aggregate_price
|
||||
JSS(snapshot); // in: Subscribe
|
||||
JSS(source_account); // in: PathRequest, RipplePathFind
|
||||
JSS(source_amount); // in: PathRequest, RipplePathFind
|
||||
JSS(source_currencies); // in: PathRequest, RipplePathFind
|
||||
JSS(source_tag); // out: AccountChannels
|
||||
JSS(stand_alone); // out: NetworkOPs
|
||||
JSS(standard_deviation); // out: get_aggregate_price
|
||||
JSS(start); // in: TxHistory
|
||||
JSS(search_depth); // in: RipplePathFind
|
||||
JSS(searched_all); // out: Tx
|
||||
JSS(secret); // in: TransactionSign,
|
||||
// ValidationCreate, ValidationSeed,
|
||||
// channel_authorize
|
||||
JSS(seed); //
|
||||
JSS(seed_hex); // in: WalletPropose, TransactionSign
|
||||
JSS(send_currencies); // out: AccountCurrencies
|
||||
JSS(send_max); // in: PathRequest, RipplePathFind
|
||||
JSS(seq); // in: LedgerEntry;
|
||||
// out: NetworkOPs, RPCSub, AccountOffers,
|
||||
// ValidatorList, ValidatorInfo, Manifest
|
||||
JSS(sequence); // in: UNL
|
||||
JSS(sequence_count); // out: AccountInfo
|
||||
JSS(server_domain); // out: NetworkOPs
|
||||
JSS(server_state); // out: NetworkOPs
|
||||
JSS(server_state_duration_us);// out: NetworkOPs
|
||||
JSS(server_status); // out: NetworkOPs
|
||||
JSS(server_version); // out: NetworkOPs
|
||||
JSS(settle_delay); // out: AccountChannels
|
||||
JSS(severity); // in: LogLevel
|
||||
JSS(signature); // out: NetworkOPs, ChannelAuthorize
|
||||
JSS(signature_verified); // out: ChannelVerify
|
||||
JSS(signing_key); // out: NetworkOPs
|
||||
JSS(signing_keys); // out: ValidatorList
|
||||
JSS(signing_time); // out: NetworkOPs
|
||||
JSS(signer_list); // in: AccountObjects
|
||||
JSS(signer_lists); // in/out: AccountInfo
|
||||
JSS(size); // out: get_aggregate_price
|
||||
JSS(snapshot); // in: Subscribe
|
||||
JSS(source_account); // in: PathRequest, RipplePathFind
|
||||
JSS(source_amount); // in: PathRequest, RipplePathFind
|
||||
JSS(source_currencies); // in: PathRequest, RipplePathFind
|
||||
JSS(source_tag); // out: AccountChannels
|
||||
JSS(stand_alone); // out: NetworkOPs
|
||||
JSS(standard_deviation); // out: get_aggregate_price
|
||||
JSS(start); // in: TxHistory
|
||||
JSS(started);
|
||||
JSS(state); // out: Logic.h, ServerState, LedgerData
|
||||
JSS(state_accounting); // out: NetworkOPs
|
||||
JSS(state_now); // in: Subscribe
|
||||
JSS(status); // error
|
||||
JSS(stop); // in: LedgerCleaner
|
||||
JSS(stop_history_tx_only); // in: Unsubscribe, stop history tx stream
|
||||
JSS(streams); // in: Subscribe, Unsubscribe
|
||||
JSS(strict); // in: AccountCurrencies, AccountInfo
|
||||
JSS(sub_index); // in: LedgerEntry
|
||||
JSS(subcommand); // in: PathFind
|
||||
JSS(success); // rpc
|
||||
JSS(supported); // out: AmendmentTableImpl
|
||||
JSS(sync_mode); // in: Submit
|
||||
JSS(system_time_offset); // out: NetworkOPs
|
||||
JSS(tag); // out: Peers
|
||||
JSS(taker); // in: Subscribe, BookOffers
|
||||
JSS(taker_gets); // in: Subscribe, Unsubscribe, BookOffers
|
||||
JSS(taker_gets_funded); // out: NetworkOPs
|
||||
JSS(taker_pays); // in: Subscribe, Unsubscribe, BookOffers
|
||||
JSS(taker_pays_funded); // out: NetworkOPs
|
||||
JSS(threshold); // in: Blacklist
|
||||
JSS(ticket); // in: AccountObjects
|
||||
JSS(ticket_count); // out: AccountInfo
|
||||
JSS(ticket_seq); // in: LedgerEntry
|
||||
JSS(state); // out: Logic.h, ServerState, LedgerData
|
||||
JSS(state_accounting); // out: NetworkOPs
|
||||
JSS(state_now); // in: Subscribe
|
||||
JSS(status); // error
|
||||
JSS(stop); // in: LedgerCleaner
|
||||
JSS(stop_history_tx_only); // in: Unsubscribe, stop history tx stream
|
||||
JSS(streams); // in: Subscribe, Unsubscribe
|
||||
JSS(strict); // in: AccountCurrencies, AccountInfo
|
||||
JSS(sub_index); // in: LedgerEntry
|
||||
JSS(subcommand); // in: PathFind
|
||||
JSS(success); // rpc
|
||||
JSS(supported); // out: AmendmentTableImpl
|
||||
JSS(sync_mode); // in: Submit
|
||||
JSS(system_time_offset); // out: NetworkOPs
|
||||
JSS(tag); // out: Peers
|
||||
JSS(taker); // in: Subscribe, BookOffers
|
||||
JSS(taker_gets); // in: Subscribe, Unsubscribe, BookOffers
|
||||
JSS(taker_gets_funded); // out: NetworkOPs
|
||||
JSS(taker_pays); // in: Subscribe, Unsubscribe, BookOffers
|
||||
JSS(taker_pays_funded); // out: NetworkOPs
|
||||
JSS(threshold); // in: Blacklist
|
||||
JSS(ticket); // in: AccountObjects
|
||||
JSS(ticket_count); // out: AccountInfo
|
||||
JSS(ticket_seq); // in: LedgerEntry
|
||||
JSS(time);
|
||||
JSS(timeouts); // out: InboundLedger
|
||||
JSS(time_threshold); // in/out: Oracle aggregate
|
||||
@@ -714,8 +722,8 @@ JSS(vote_weight); // out: amm_info
|
||||
JSS(warning); // rpc:
|
||||
JSS(warnings); // out: server_info, server_state
|
||||
JSS(workers);
|
||||
JSS(write_load); // out: GetCounts
|
||||
JSS(xchain_owned_claim_id); // in: LedgerEntry, AccountObjects
|
||||
JSS(write_load); // out: GetCounts
|
||||
JSS(xchain_owned_claim_id); // in: LedgerEntry, AccountObjects
|
||||
JSS(xchain_owned_create_account_claim_id); // in: LedgerEntry
|
||||
JSS(NegativeUNL); // out: ValidatorList; ledger type
|
||||
// clang-format on
|
||||
|
||||
Reference in New Issue
Block a user