Consolidate definitions of fields, objects, transactions, and features (#5122)

This commit is contained in:
John Freeman
2024-10-16 14:02:29 -05:00
committed by GitHub
parent f0dabd1446
commit 63209c2646
30 changed files with 1466 additions and 2089 deletions

View File

@@ -409,114 +409,27 @@ featureToName(uint256 const& f)
return featureCollections.featureToName(f);
}
#pragma push_macro("REGISTER_FEATURE")
#undef REGISTER_FEATURE
/**
Takes the name of a feature, whether it's supported, and the default vote. Will
register the feature, and create a variable whose name is "feature" plus the
feature name.
*/
#define REGISTER_FEATURE(fName, supported, votebehavior) \
uint256 const feature##fName = \
registerFeature(#fName, supported, votebehavior)
#pragma push_macro("REGISTER_FIX")
#undef REGISTER_FIX
/**
Takes the name of a feature, whether it's supported, and the default vote. Will
register the feature, and create a variable whose name is the unmodified feature
name.
*/
#define REGISTER_FIX(fName, supported, votebehavior) \
uint256 const fName = registerFeature(#fName, supported, votebehavior)
// clang-format off
// All known amendments must be registered either here or below with the
// "retired" amendments
REGISTER_FEATURE(OwnerPaysFee, Supported::no, VoteBehavior::DefaultNo);
REGISTER_FEATURE(Flow, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(FlowCross, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fix1513, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(DepositAuth, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(Checks, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fix1571, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fix1543, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fix1623, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(DepositPreauth, Supported::yes, VoteBehavior::DefaultYes);
// Use liquidity from strands that consume max offers, but mark as dry
REGISTER_FIX (fix1515, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fix1578, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(MultiSignReserve, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fixTakerDryOfferRemoval, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fixMasterKeyAsRegularKey, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fixCheckThreading, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fixPayChanRecipientOwnerDir, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(DeletableAccounts, Supported::yes, VoteBehavior::DefaultYes);
// fixQualityUpperBound should be activated before FlowCross
REGISTER_FIX (fixQualityUpperBound, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(RequireFullyCanonicalSig, Supported::yes, VoteBehavior::DefaultYes);
// fix1781: XRPEndpointSteps should be included in the circular payment check
REGISTER_FIX (fix1781, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(HardenedValidations, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fixAmendmentMajorityCalc, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(NegativeUNL, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(TicketBatch, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(FlowSortStrands, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fixSTAmountCanonicalize, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FIX (fixRmSmallIncreasedQOffers, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(CheckCashMakesTrustLine, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(ExpandedSignerList, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(NonFungibleTokensV1_1, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixTrustLinesToSelf, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixRemoveNFTokenAutoTrustLine, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(ImmediateOfferKilled, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(DisallowIncoming, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(XRPFees, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixUniversalNumber, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixNonFungibleTokensV1_2, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixNFTokenRemint, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixReducedOffersV1, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(Clawback, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(AMM, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(XChainBridge, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixDisallowIncomingV1, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(DID, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixFillOrKill, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixNFTokenReserve, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixInnerObjTemplate, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixAMMOverflowOffer, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(PriceOracle, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixEmptyDID, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixXChainRewardRounding, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixPreviousTxnID, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixAMMv1_1, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(NFTokenMintOffer, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixReducedOffersV2, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixEnforceNFTokenTrustline, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixInnerObjTemplate2, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixNFTokenPageLinks, Supported::yes, VoteBehavior::DefaultNo);
// InvariantsV1_1 will be changes to Supported::yes when all the
// invariants expected to be included under it are complete.
REGISTER_FEATURE(InvariantsV1_1, Supported::no, VoteBehavior::DefaultNo);
// The following amendments are obsolete, but must remain supported
// because they could potentially get enabled.
//
// Obsolete features are (usually) not in the ledger, and may have code
// controlled by the feature. They need to be supported because at some
// time in the past, the feature was supported and votable, but never
// passed. So the feature needs to be supported in case it is ever
// enabled (added to the ledger).
//
// If a feature remains obsolete for long enough that no clients are able
// to vote for it, the feature can be removed (entirely?) from the code.
REGISTER_FEATURE(CryptoConditionsSuite, Supported::yes, VoteBehavior::Obsolete);
REGISTER_FEATURE(NonFungibleTokensV1, Supported::yes, VoteBehavior::Obsolete);
REGISTER_FIX (fixNFTokenDirV1, Supported::yes, VoteBehavior::Obsolete);
REGISTER_FIX (fixNFTokenNegOffer, Supported::yes, VoteBehavior::Obsolete);
#pragma push_macro("XRPL_FEATURE")
#undef XRPL_FEATURE
#pragma push_macro("XRPL_FIX")
#undef XRPL_FIX
#define XRPL_FEATURE(name, supported, vote) \
uint256 const feature##name = registerFeature(#name, supported, vote);
#define XRPL_FIX(name, supported, vote) \
uint256 const fix##name = registerFeature("fix" #name, supported, vote);
#include <xrpl/protocol/detail/features.macro>
#undef XRPL_FIX
#pragma pop_macro("XRPL_FIX")
#undef XRPL_FEATURE
#pragma pop_macro("XRPL_FEATURE")
// clang-format off
// The following amendments have been active for at least two years. Their
// pre-amendment code has been removed and the identifiers are deprecated.
@@ -542,12 +455,6 @@ uint256 const
// clang-format on
#undef REGISTER_FIX
#pragma pop_macro("REGISTER_FIX")
#undef REGISTER_FEATURE
#pragma pop_macro("REGISTER_FEATURE")
// All of the features should now be registered, since variables in a cpp file
// are initialized from top to bottom.
//

View File

@@ -25,347 +25,28 @@ namespace ripple {
LedgerFormats::LedgerFormats()
{
// clang-format off
// Fields shared by all ledger formats:
static const std::initializer_list<SOElement> commonFields{
{sfLedgerIndex, soeOPTIONAL},
{sfLedgerEntryType, soeREQUIRED},
{sfFlags, soeREQUIRED},
{sfLedgerIndex, soeOPTIONAL},
{sfLedgerEntryType, soeREQUIRED},
{sfFlags, soeREQUIRED},
};
add(jss::AccountRoot,
ltACCOUNT_ROOT,
{
{sfAccount, soeREQUIRED},
{sfSequence, soeREQUIRED},
{sfBalance, soeREQUIRED},
{sfOwnerCount, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED},
{sfAccountTxnID, soeOPTIONAL},
{sfRegularKey, soeOPTIONAL},
{sfEmailHash, soeOPTIONAL},
{sfWalletLocator, soeOPTIONAL},
{sfWalletSize, soeOPTIONAL},
{sfMessageKey, soeOPTIONAL},
{sfTransferRate, soeOPTIONAL},
{sfDomain, soeOPTIONAL},
{sfTickSize, soeOPTIONAL},
{sfTicketCount, soeOPTIONAL},
{sfNFTokenMinter, soeOPTIONAL},
{sfMintedNFTokens, soeDEFAULT},
{sfBurnedNFTokens, soeDEFAULT},
{sfFirstNFTokenSequence, soeOPTIONAL},
{sfAMMID, soeOPTIONAL},
},
commonFields);
#pragma push_macro("UNWRAP")
#undef UNWRAP
#pragma push_macro("LEDGER_ENTRY")
#undef LEDGER_ENTRY
add(jss::DirectoryNode,
ltDIR_NODE,
{
{sfOwner, soeOPTIONAL}, // for owner directories
{sfTakerPaysCurrency, soeOPTIONAL}, // order book directories
{sfTakerPaysIssuer, soeOPTIONAL}, // order book directories
{sfTakerGetsCurrency, soeOPTIONAL}, // order book directories
{sfTakerGetsIssuer, soeOPTIONAL}, // order book directories
{sfExchangeRate, soeOPTIONAL}, // order book directories
{sfIndexes, soeREQUIRED},
{sfRootIndex, soeREQUIRED},
{sfIndexNext, soeOPTIONAL},
{sfIndexPrevious, soeOPTIONAL},
{sfNFTokenID, soeOPTIONAL},
{sfPreviousTxnID, soeOPTIONAL},
{sfPreviousTxnLgrSeq, soeOPTIONAL},
},
commonFields);
#define UNWRAP(...) __VA_ARGS__
#define LEDGER_ENTRY(tag, value, name, fields) \
add(jss::name, tag, UNWRAP fields, commonFields);
add(jss::Offer,
ltOFFER,
{
{sfAccount, soeREQUIRED},
{sfSequence, soeREQUIRED},
{sfTakerPays, soeREQUIRED},
{sfTakerGets, soeREQUIRED},
{sfBookDirectory, soeREQUIRED},
{sfBookNode, soeREQUIRED},
{sfOwnerNode, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED},
{sfExpiration, soeOPTIONAL},
},
commonFields);
#include <xrpl/protocol/detail/ledger_entries.macro>
add(jss::RippleState,
ltRIPPLE_STATE,
{
{sfBalance, soeREQUIRED},
{sfLowLimit, soeREQUIRED},
{sfHighLimit, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED},
{sfLowNode, soeOPTIONAL},
{sfLowQualityIn, soeOPTIONAL},
{sfLowQualityOut, soeOPTIONAL},
{sfHighNode, soeOPTIONAL},
{sfHighQualityIn, soeOPTIONAL},
{sfHighQualityOut, soeOPTIONAL},
},
commonFields);
add(jss::Escrow,
ltESCROW,
{
{sfAccount, soeREQUIRED},
{sfDestination, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfCondition, soeOPTIONAL},
{sfCancelAfter, soeOPTIONAL},
{sfFinishAfter, soeOPTIONAL},
{sfSourceTag, soeOPTIONAL},
{sfDestinationTag, soeOPTIONAL},
{sfOwnerNode, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED},
{sfDestinationNode, soeOPTIONAL},
},
commonFields);
add(jss::LedgerHashes,
ltLEDGER_HASHES,
{
{sfFirstLedgerSequence, soeOPTIONAL},
{sfLastLedgerSequence, soeOPTIONAL},
{sfHashes, soeREQUIRED},
},
commonFields);
add(jss::Amendments,
ltAMENDMENTS,
{
{sfAmendments, soeOPTIONAL}, // Enabled
{sfMajorities, soeOPTIONAL},
{sfPreviousTxnID, soeOPTIONAL},
{sfPreviousTxnLgrSeq, soeOPTIONAL},
},
commonFields);
add(jss::FeeSettings,
ltFEE_SETTINGS,
{
// Old version uses raw numbers
{sfBaseFee, soeOPTIONAL},
{sfReferenceFeeUnits, soeOPTIONAL},
{sfReserveBase, soeOPTIONAL},
{sfReserveIncrement, soeOPTIONAL},
// New version uses Amounts
{sfBaseFeeDrops, soeOPTIONAL},
{sfReserveBaseDrops, soeOPTIONAL},
{sfReserveIncrementDrops, soeOPTIONAL},
{sfPreviousTxnID, soeOPTIONAL},
{sfPreviousTxnLgrSeq, soeOPTIONAL},
},
commonFields);
add(jss::Ticket,
ltTICKET,
{
{sfAccount, soeREQUIRED},
{sfOwnerNode, soeREQUIRED},
{sfTicketSequence, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED},
},
commonFields);
// All fields are soeREQUIRED because there is always a
// SignerEntries. If there are no SignerEntries the node is deleted.
add(jss::SignerList,
ltSIGNER_LIST,
{
{sfOwnerNode, soeREQUIRED},
{sfSignerQuorum, soeREQUIRED},
{sfSignerEntries, soeREQUIRED},
{sfSignerListID, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED},
},
commonFields);
add(jss::PayChannel,
ltPAYCHAN,
{
{sfAccount, soeREQUIRED},
{sfDestination, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfBalance, soeREQUIRED},
{sfPublicKey, soeREQUIRED},
{sfSettleDelay, soeREQUIRED},
{sfExpiration, soeOPTIONAL},
{sfCancelAfter, soeOPTIONAL},
{sfSourceTag, soeOPTIONAL},
{sfDestinationTag, soeOPTIONAL},
{sfOwnerNode, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED},
{sfDestinationNode, soeOPTIONAL},
},
commonFields);
add(jss::Check,
ltCHECK,
{
{sfAccount, soeREQUIRED},
{sfDestination, soeREQUIRED},
{sfSendMax, soeREQUIRED},
{sfSequence, soeREQUIRED},
{sfOwnerNode, soeREQUIRED},
{sfDestinationNode, soeREQUIRED},
{sfExpiration, soeOPTIONAL},
{sfInvoiceID, soeOPTIONAL},
{sfSourceTag, soeOPTIONAL},
{sfDestinationTag, soeOPTIONAL},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED},
},
commonFields);
add(jss::DepositPreauth,
ltDEPOSIT_PREAUTH,
{
{sfAccount, soeREQUIRED},
{sfAuthorize, soeREQUIRED},
{sfOwnerNode, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED},
},
commonFields);
add(jss::NegativeUNL,
ltNEGATIVE_UNL,
{
{sfDisabledValidators, soeOPTIONAL},
{sfValidatorToDisable, soeOPTIONAL},
{sfValidatorToReEnable, soeOPTIONAL},
{sfPreviousTxnID, soeOPTIONAL},
{sfPreviousTxnLgrSeq, soeOPTIONAL},
},
commonFields);
add(jss::NFTokenPage,
ltNFTOKEN_PAGE,
{
{sfPreviousPageMin, soeOPTIONAL},
{sfNextPageMin, soeOPTIONAL},
{sfNFTokens, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED}
},
commonFields);
add(jss::NFTokenOffer,
ltNFTOKEN_OFFER,
{
{sfOwner, soeREQUIRED},
{sfNFTokenID, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfOwnerNode, soeREQUIRED},
{sfNFTokenOfferNode, soeREQUIRED},
{sfDestination, soeOPTIONAL},
{sfExpiration, soeOPTIONAL},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED}
},
commonFields);
add(jss::AMM,
ltAMM,
{
{sfAccount, soeREQUIRED},
{sfTradingFee, soeDEFAULT},
{sfVoteSlots, soeOPTIONAL},
{sfAuctionSlot, soeOPTIONAL},
{sfLPTokenBalance, soeREQUIRED},
{sfAsset, soeREQUIRED},
{sfAsset2, soeREQUIRED},
{sfOwnerNode, soeREQUIRED},
{sfPreviousTxnID, soeOPTIONAL},
{sfPreviousTxnLgrSeq, soeOPTIONAL},
},
commonFields);
add(jss::Bridge,
ltBRIDGE,
{
{sfAccount, soeREQUIRED},
{sfSignatureReward, soeREQUIRED},
{sfMinAccountCreateAmount, soeOPTIONAL},
{sfXChainBridge, soeREQUIRED},
{sfXChainClaimID, soeREQUIRED},
{sfXChainAccountCreateCount, soeREQUIRED},
{sfXChainAccountClaimCount, soeREQUIRED},
{sfOwnerNode, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED}
},
commonFields);
add(jss::XChainOwnedClaimID,
ltXCHAIN_OWNED_CLAIM_ID,
{
{sfAccount, soeREQUIRED},
{sfXChainBridge, soeREQUIRED},
{sfXChainClaimID, soeREQUIRED},
{sfOtherChainSource, soeREQUIRED},
{sfXChainClaimAttestations, soeREQUIRED},
{sfSignatureReward, soeREQUIRED},
{sfOwnerNode, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED}
},
commonFields);
add(jss::XChainOwnedCreateAccountClaimID,
ltXCHAIN_OWNED_CREATE_ACCOUNT_CLAIM_ID,
{
{sfAccount, soeREQUIRED},
{sfXChainBridge, soeREQUIRED},
{sfXChainAccountCreateCount, soeREQUIRED},
{sfXChainCreateAccountAttestations, soeREQUIRED},
{sfOwnerNode, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED}
},
commonFields);
add(jss::DID,
ltDID,
{
{sfAccount, soeREQUIRED},
{sfDIDDocument, soeOPTIONAL},
{sfURI, soeOPTIONAL},
{sfData, soeOPTIONAL},
{sfOwnerNode, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED}
},
commonFields);
add(jss::Oracle,
ltORACLE,
{
{sfOwner, soeREQUIRED},
{sfProvider, soeREQUIRED},
{sfPriceDataSeries, soeREQUIRED},
{sfAssetClass, soeREQUIRED},
{sfLastUpdateTime, soeREQUIRED},
{sfURI, soeOPTIONAL},
{sfOwnerNode, soeREQUIRED},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED}
},
commonFields);
// clang-format on
#undef LEDGER_ENTRY
#pragma pop_macro("LEDGER_ENTRY")
#undef UNWRAP
#pragma pop_macro("UNWRAP")
}
LedgerFormats const&

View File

@@ -49,386 +49,37 @@ TypedField<T>::TypedField(private_access_tag_t pat, Args&&... args)
// database:
// Use macros for most SField construction to enforce naming conventions.
#pragma push_macro("CONSTRUCT_UNTYPED_SFIELD")
#undef CONSTRUCT_UNTYPED_SFIELD
#pragma push_macro("UNTYPED_SFIELD")
#undef UNTYPED_SFIELD
#pragma push_macro("TYPED_SFIELD")
#undef TYPED_SFIELD
// It would be possible to design the macros so that sfName and txtName would
// be constructed from a single macro parameter. We chose not to take that
// path because then you cannot grep for the exact SField name and find
// where it is constructed. These macros allow that grep to succeed.
#define CONSTRUCT_UNTYPED_SFIELD(sfName, txtName, stiSuffix, fieldValue, ...) \
SField const sfName( \
access, STI_##stiSuffix, fieldValue, txtName, ##__VA_ARGS__); \
static_assert( \
std::string_view(#sfName) == "sf" txtName, \
"Declaration of SField does not match its text name")
#pragma push_macro("CONSTRUCT_TYPED_SFIELD")
#undef CONSTRUCT_TYPED_SFIELD
#define CONSTRUCT_TYPED_SFIELD(sfName, txtName, stiSuffix, fieldValue, ...) \
SF_##stiSuffix const sfName( \
access, STI_##stiSuffix, fieldValue, txtName, ##__VA_ARGS__); \
static_assert( \
std::string_view(#sfName) == "sf" txtName, \
"Declaration of SField does not match its text name")
// clang-format off
#define UNTYPED_SFIELD(sfName, stiSuffix, fieldValue, ...) \
SField const sfName( \
access, \
STI_##stiSuffix, \
fieldValue, \
std::string_view(#sfName).substr(2).data(), \
##__VA_ARGS__);
#define TYPED_SFIELD(sfName, stiSuffix, fieldValue, ...) \
SF_##stiSuffix const sfName( \
access, \
STI_##stiSuffix, \
fieldValue, \
std::string_view(#sfName).substr(2).data(), \
##__VA_ARGS__);
// SFields which, for historical reasons, do not follow naming conventions.
SField const sfInvalid(access, -1);
SField const sfGeneric(access, 0);
SField const sfHash(access, STI_UINT256, 257, "hash");
SField const sfIndex(access, STI_UINT256, 258, "index");
// Untyped SFields
CONSTRUCT_UNTYPED_SFIELD(sfLedgerEntry, "LedgerEntry", LEDGERENTRY, 257);
CONSTRUCT_UNTYPED_SFIELD(sfTransaction, "Transaction", TRANSACTION, 257);
CONSTRUCT_UNTYPED_SFIELD(sfValidation, "Validation", VALIDATION, 257);
CONSTRUCT_UNTYPED_SFIELD(sfMetadata, "Metadata", METADATA, 257);
#include <xrpl/protocol/detail/sfields.macro>
// 8-bit integers
CONSTRUCT_TYPED_SFIELD(sfCloseResolution, "CloseResolution", UINT8, 1);
CONSTRUCT_TYPED_SFIELD(sfMethod, "Method", UINT8, 2);
CONSTRUCT_TYPED_SFIELD(sfTransactionResult, "TransactionResult", UINT8, 3);
CONSTRUCT_TYPED_SFIELD(sfScale, "Scale", UINT8, 4);
// 8-bit integers (uncommon)
CONSTRUCT_TYPED_SFIELD(sfTickSize, "TickSize", UINT8, 16);
CONSTRUCT_TYPED_SFIELD(sfUNLModifyDisabling, "UNLModifyDisabling", UINT8, 17);
CONSTRUCT_TYPED_SFIELD(sfHookResult, "HookResult", UINT8, 18);
CONSTRUCT_TYPED_SFIELD(sfWasLockingChainSend, "WasLockingChainSend", UINT8, 19);
// 16-bit integers
CONSTRUCT_TYPED_SFIELD(sfLedgerEntryType, "LedgerEntryType", UINT16, 1, SField::sMD_Never);
CONSTRUCT_TYPED_SFIELD(sfTransactionType, "TransactionType", UINT16, 2);
CONSTRUCT_TYPED_SFIELD(sfSignerWeight, "SignerWeight", UINT16, 3);
CONSTRUCT_TYPED_SFIELD(sfTransferFee, "TransferFee", UINT16, 4);
CONSTRUCT_TYPED_SFIELD(sfTradingFee, "TradingFee", UINT16, 5);
CONSTRUCT_TYPED_SFIELD(sfDiscountedFee, "DiscountedFee", UINT16, 6);
// 16-bit integers (uncommon)
CONSTRUCT_TYPED_SFIELD(sfVersion, "Version", UINT16, 16);
CONSTRUCT_TYPED_SFIELD(sfHookStateChangeCount, "HookStateChangeCount", UINT16, 17);
CONSTRUCT_TYPED_SFIELD(sfHookEmitCount, "HookEmitCount", UINT16, 18);
CONSTRUCT_TYPED_SFIELD(sfHookExecutionIndex, "HookExecutionIndex", UINT16, 19);
CONSTRUCT_TYPED_SFIELD(sfHookApiVersion, "HookApiVersion", UINT16, 20);
CONSTRUCT_TYPED_SFIELD(sfLedgerFixType, "LedgerFixType", UINT16, 21);
// 32-bit integers (common)
CONSTRUCT_TYPED_SFIELD(sfNetworkID, "NetworkID", UINT32, 1);
CONSTRUCT_TYPED_SFIELD(sfFlags, "Flags", UINT32, 2);
CONSTRUCT_TYPED_SFIELD(sfSourceTag, "SourceTag", UINT32, 3);
CONSTRUCT_TYPED_SFIELD(sfSequence, "Sequence", UINT32, 4);
CONSTRUCT_TYPED_SFIELD(sfPreviousTxnLgrSeq, "PreviousTxnLgrSeq", UINT32, 5, SField::sMD_DeleteFinal);
CONSTRUCT_TYPED_SFIELD(sfLedgerSequence, "LedgerSequence", UINT32, 6);
CONSTRUCT_TYPED_SFIELD(sfCloseTime, "CloseTime", UINT32, 7);
CONSTRUCT_TYPED_SFIELD(sfParentCloseTime, "ParentCloseTime", UINT32, 8);
CONSTRUCT_TYPED_SFIELD(sfSigningTime, "SigningTime", UINT32, 9);
CONSTRUCT_TYPED_SFIELD(sfExpiration, "Expiration", UINT32, 10);
CONSTRUCT_TYPED_SFIELD(sfTransferRate, "TransferRate", UINT32, 11);
CONSTRUCT_TYPED_SFIELD(sfWalletSize, "WalletSize", UINT32, 12);
CONSTRUCT_TYPED_SFIELD(sfOwnerCount, "OwnerCount", UINT32, 13);
CONSTRUCT_TYPED_SFIELD(sfDestinationTag, "DestinationTag", UINT32, 14);
CONSTRUCT_TYPED_SFIELD(sfLastUpdateTime, "LastUpdateTime", UINT32, 15);
// 32-bit integers (uncommon)
CONSTRUCT_TYPED_SFIELD(sfHighQualityIn, "HighQualityIn", UINT32, 16);
CONSTRUCT_TYPED_SFIELD(sfHighQualityOut, "HighQualityOut", UINT32, 17);
CONSTRUCT_TYPED_SFIELD(sfLowQualityIn, "LowQualityIn", UINT32, 18);
CONSTRUCT_TYPED_SFIELD(sfLowQualityOut, "LowQualityOut", UINT32, 19);
CONSTRUCT_TYPED_SFIELD(sfQualityIn, "QualityIn", UINT32, 20);
CONSTRUCT_TYPED_SFIELD(sfQualityOut, "QualityOut", UINT32, 21);
CONSTRUCT_TYPED_SFIELD(sfStampEscrow, "StampEscrow", UINT32, 22);
CONSTRUCT_TYPED_SFIELD(sfBondAmount, "BondAmount", UINT32, 23);
CONSTRUCT_TYPED_SFIELD(sfLoadFee, "LoadFee", UINT32, 24);
CONSTRUCT_TYPED_SFIELD(sfOfferSequence, "OfferSequence", UINT32, 25);
CONSTRUCT_TYPED_SFIELD(sfFirstLedgerSequence, "FirstLedgerSequence", UINT32, 26);
CONSTRUCT_TYPED_SFIELD(sfLastLedgerSequence, "LastLedgerSequence", UINT32, 27);
CONSTRUCT_TYPED_SFIELD(sfTransactionIndex, "TransactionIndex", UINT32, 28);
CONSTRUCT_TYPED_SFIELD(sfOperationLimit, "OperationLimit", UINT32, 29);
CONSTRUCT_TYPED_SFIELD(sfReferenceFeeUnits, "ReferenceFeeUnits", UINT32, 30);
CONSTRUCT_TYPED_SFIELD(sfReserveBase, "ReserveBase", UINT32, 31);
CONSTRUCT_TYPED_SFIELD(sfReserveIncrement, "ReserveIncrement", UINT32, 32);
CONSTRUCT_TYPED_SFIELD(sfSetFlag, "SetFlag", UINT32, 33);
CONSTRUCT_TYPED_SFIELD(sfClearFlag, "ClearFlag", UINT32, 34);
CONSTRUCT_TYPED_SFIELD(sfSignerQuorum, "SignerQuorum", UINT32, 35);
CONSTRUCT_TYPED_SFIELD(sfCancelAfter, "CancelAfter", UINT32, 36);
CONSTRUCT_TYPED_SFIELD(sfFinishAfter, "FinishAfter", UINT32, 37);
CONSTRUCT_TYPED_SFIELD(sfSignerListID, "SignerListID", UINT32, 38);
CONSTRUCT_TYPED_SFIELD(sfSettleDelay, "SettleDelay", UINT32, 39);
CONSTRUCT_TYPED_SFIELD(sfTicketCount, "TicketCount", UINT32, 40);
CONSTRUCT_TYPED_SFIELD(sfTicketSequence, "TicketSequence", UINT32, 41);
CONSTRUCT_TYPED_SFIELD(sfNFTokenTaxon, "NFTokenTaxon", UINT32, 42);
CONSTRUCT_TYPED_SFIELD(sfMintedNFTokens, "MintedNFTokens", UINT32, 43);
CONSTRUCT_TYPED_SFIELD(sfBurnedNFTokens, "BurnedNFTokens", UINT32, 44);
CONSTRUCT_TYPED_SFIELD(sfHookStateCount, "HookStateCount", UINT32, 45);
CONSTRUCT_TYPED_SFIELD(sfEmitGeneration, "EmitGeneration", UINT32, 46);
// 47 is reserved for LockCount(Hooks)
CONSTRUCT_TYPED_SFIELD(sfVoteWeight, "VoteWeight", UINT32, 48);
CONSTRUCT_TYPED_SFIELD(sfFirstNFTokenSequence, "FirstNFTokenSequence", UINT32, 50);
CONSTRUCT_TYPED_SFIELD(sfOracleDocumentID, "OracleDocumentID", UINT32, 51);
// 64-bit integers (common)
CONSTRUCT_TYPED_SFIELD(sfIndexNext, "IndexNext", UINT64, 1);
CONSTRUCT_TYPED_SFIELD(sfIndexPrevious, "IndexPrevious", UINT64, 2);
CONSTRUCT_TYPED_SFIELD(sfBookNode, "BookNode", UINT64, 3);
CONSTRUCT_TYPED_SFIELD(sfOwnerNode, "OwnerNode", UINT64, 4);
CONSTRUCT_TYPED_SFIELD(sfBaseFee, "BaseFee", UINT64, 5);
CONSTRUCT_TYPED_SFIELD(sfExchangeRate, "ExchangeRate", UINT64, 6);
CONSTRUCT_TYPED_SFIELD(sfLowNode, "LowNode", UINT64, 7);
CONSTRUCT_TYPED_SFIELD(sfHighNode, "HighNode", UINT64, 8);
CONSTRUCT_TYPED_SFIELD(sfDestinationNode, "DestinationNode", UINT64, 9);
CONSTRUCT_TYPED_SFIELD(sfCookie, "Cookie", UINT64, 10);
CONSTRUCT_TYPED_SFIELD(sfServerVersion, "ServerVersion", UINT64, 11);
CONSTRUCT_TYPED_SFIELD(sfNFTokenOfferNode, "NFTokenOfferNode", UINT64, 12);
CONSTRUCT_TYPED_SFIELD(sfEmitBurden, "EmitBurden", UINT64, 13);
// 64-bit integers (uncommon)
CONSTRUCT_TYPED_SFIELD(sfHookOn, "HookOn", UINT64, 16);
CONSTRUCT_TYPED_SFIELD(sfHookInstructionCount, "HookInstructionCount", UINT64, 17);
CONSTRUCT_TYPED_SFIELD(sfHookReturnCode, "HookReturnCode", UINT64, 18);
CONSTRUCT_TYPED_SFIELD(sfReferenceCount, "ReferenceCount", UINT64, 19);
CONSTRUCT_TYPED_SFIELD(sfXChainClaimID, "XChainClaimID", UINT64, 20);
CONSTRUCT_TYPED_SFIELD(sfXChainAccountCreateCount, "XChainAccountCreateCount", UINT64, 21);
CONSTRUCT_TYPED_SFIELD(sfXChainAccountClaimCount, "XChainAccountClaimCount", UINT64, 22);
CONSTRUCT_TYPED_SFIELD(sfAssetPrice, "AssetPrice", UINT64, 23);
// 128-bit
CONSTRUCT_TYPED_SFIELD(sfEmailHash, "EmailHash", UINT128, 1);
// 160-bit (common)
CONSTRUCT_TYPED_SFIELD(sfTakerPaysCurrency, "TakerPaysCurrency", UINT160, 1);
CONSTRUCT_TYPED_SFIELD(sfTakerPaysIssuer, "TakerPaysIssuer", UINT160, 2);
CONSTRUCT_TYPED_SFIELD(sfTakerGetsCurrency, "TakerGetsCurrency", UINT160, 3);
CONSTRUCT_TYPED_SFIELD(sfTakerGetsIssuer, "TakerGetsIssuer", UINT160, 4);
// 256-bit (common)
CONSTRUCT_TYPED_SFIELD(sfLedgerHash, "LedgerHash", UINT256, 1);
CONSTRUCT_TYPED_SFIELD(sfParentHash, "ParentHash", UINT256, 2);
CONSTRUCT_TYPED_SFIELD(sfTransactionHash, "TransactionHash", UINT256, 3);
CONSTRUCT_TYPED_SFIELD(sfAccountHash, "AccountHash", UINT256, 4);
CONSTRUCT_TYPED_SFIELD(sfPreviousTxnID, "PreviousTxnID", UINT256, 5, SField::sMD_DeleteFinal);
CONSTRUCT_TYPED_SFIELD(sfLedgerIndex, "LedgerIndex", UINT256, 6);
CONSTRUCT_TYPED_SFIELD(sfWalletLocator, "WalletLocator", UINT256, 7);
CONSTRUCT_TYPED_SFIELD(sfRootIndex, "RootIndex", UINT256, 8, SField::sMD_Always);
CONSTRUCT_TYPED_SFIELD(sfAccountTxnID, "AccountTxnID", UINT256, 9);
CONSTRUCT_TYPED_SFIELD(sfNFTokenID, "NFTokenID", UINT256, 10);
CONSTRUCT_TYPED_SFIELD(sfEmitParentTxnID, "EmitParentTxnID", UINT256, 11);
CONSTRUCT_TYPED_SFIELD(sfEmitNonce, "EmitNonce", UINT256, 12);
CONSTRUCT_TYPED_SFIELD(sfEmitHookHash, "EmitHookHash", UINT256, 13);
CONSTRUCT_TYPED_SFIELD(sfAMMID, "AMMID", UINT256, 14);
// 256-bit (uncommon)
CONSTRUCT_TYPED_SFIELD(sfBookDirectory, "BookDirectory", UINT256, 16);
CONSTRUCT_TYPED_SFIELD(sfInvoiceID, "InvoiceID", UINT256, 17);
CONSTRUCT_TYPED_SFIELD(sfNickname, "Nickname", UINT256, 18);
CONSTRUCT_TYPED_SFIELD(sfAmendment, "Amendment", UINT256, 19);
// 20 is currently unused
CONSTRUCT_TYPED_SFIELD(sfDigest, "Digest", UINT256, 21);
CONSTRUCT_TYPED_SFIELD(sfChannel, "Channel", UINT256, 22);
CONSTRUCT_TYPED_SFIELD(sfConsensusHash, "ConsensusHash", UINT256, 23);
CONSTRUCT_TYPED_SFIELD(sfCheckID, "CheckID", UINT256, 24);
CONSTRUCT_TYPED_SFIELD(sfValidatedHash, "ValidatedHash", UINT256, 25);
CONSTRUCT_TYPED_SFIELD(sfPreviousPageMin, "PreviousPageMin", UINT256, 26);
CONSTRUCT_TYPED_SFIELD(sfNextPageMin, "NextPageMin", UINT256, 27);
CONSTRUCT_TYPED_SFIELD(sfNFTokenBuyOffer, "NFTokenBuyOffer", UINT256, 28);
CONSTRUCT_TYPED_SFIELD(sfNFTokenSellOffer, "NFTokenSellOffer", UINT256, 29);
CONSTRUCT_TYPED_SFIELD(sfHookStateKey, "HookStateKey", UINT256, 30);
CONSTRUCT_TYPED_SFIELD(sfHookHash, "HookHash", UINT256, 31);
CONSTRUCT_TYPED_SFIELD(sfHookNamespace, "HookNamespace", UINT256, 32);
CONSTRUCT_TYPED_SFIELD(sfHookSetTxnID, "HookSetTxnID", UINT256, 33);
// currency amount (common)
CONSTRUCT_TYPED_SFIELD(sfAmount, "Amount", AMOUNT, 1);
CONSTRUCT_TYPED_SFIELD(sfBalance, "Balance", AMOUNT, 2);
CONSTRUCT_TYPED_SFIELD(sfLimitAmount, "LimitAmount", AMOUNT, 3);
CONSTRUCT_TYPED_SFIELD(sfTakerPays, "TakerPays", AMOUNT, 4);
CONSTRUCT_TYPED_SFIELD(sfTakerGets, "TakerGets", AMOUNT, 5);
CONSTRUCT_TYPED_SFIELD(sfLowLimit, "LowLimit", AMOUNT, 6);
CONSTRUCT_TYPED_SFIELD(sfHighLimit, "HighLimit", AMOUNT, 7);
CONSTRUCT_TYPED_SFIELD(sfFee, "Fee", AMOUNT, 8);
CONSTRUCT_TYPED_SFIELD(sfSendMax, "SendMax", AMOUNT, 9);
CONSTRUCT_TYPED_SFIELD(sfDeliverMin, "DeliverMin", AMOUNT, 10);
CONSTRUCT_TYPED_SFIELD(sfAmount2, "Amount2", AMOUNT, 11);
CONSTRUCT_TYPED_SFIELD(sfBidMin, "BidMin", AMOUNT, 12);
CONSTRUCT_TYPED_SFIELD(sfBidMax, "BidMax", AMOUNT, 13);
// currency amount (uncommon)
CONSTRUCT_TYPED_SFIELD(sfMinimumOffer, "MinimumOffer", AMOUNT, 16);
CONSTRUCT_TYPED_SFIELD(sfRippleEscrow, "RippleEscrow", AMOUNT, 17);
CONSTRUCT_TYPED_SFIELD(sfDeliveredAmount, "DeliveredAmount", AMOUNT, 18);
CONSTRUCT_TYPED_SFIELD(sfNFTokenBrokerFee, "NFTokenBrokerFee", AMOUNT, 19);
// Reserve 20 & 21 for Hooks
// currency amount (fees)
CONSTRUCT_TYPED_SFIELD(sfBaseFeeDrops, "BaseFeeDrops", AMOUNT, 22);
CONSTRUCT_TYPED_SFIELD(sfReserveBaseDrops, "ReserveBaseDrops", AMOUNT, 23);
CONSTRUCT_TYPED_SFIELD(sfReserveIncrementDrops, "ReserveIncrementDrops", AMOUNT, 24);
// currency amount (AMM)
CONSTRUCT_TYPED_SFIELD(sfLPTokenOut, "LPTokenOut", AMOUNT, 25);
CONSTRUCT_TYPED_SFIELD(sfLPTokenIn, "LPTokenIn", AMOUNT, 26);
CONSTRUCT_TYPED_SFIELD(sfEPrice, "EPrice", AMOUNT, 27);
CONSTRUCT_TYPED_SFIELD(sfPrice, "Price", AMOUNT, 28);
CONSTRUCT_TYPED_SFIELD(sfSignatureReward, "SignatureReward", AMOUNT, 29);
CONSTRUCT_TYPED_SFIELD(sfMinAccountCreateAmount, "MinAccountCreateAmount", AMOUNT, 30);
CONSTRUCT_TYPED_SFIELD(sfLPTokenBalance, "LPTokenBalance", AMOUNT, 31);
// variable length (common)
CONSTRUCT_TYPED_SFIELD(sfPublicKey, "PublicKey", VL, 1);
CONSTRUCT_TYPED_SFIELD(sfMessageKey, "MessageKey", VL, 2);
CONSTRUCT_TYPED_SFIELD(sfSigningPubKey, "SigningPubKey", VL, 3);
CONSTRUCT_TYPED_SFIELD(sfTxnSignature, "TxnSignature", VL, 4, SField::sMD_Default, SField::notSigning);
CONSTRUCT_TYPED_SFIELD(sfURI, "URI", VL, 5);
CONSTRUCT_TYPED_SFIELD(sfSignature, "Signature", VL, 6, SField::sMD_Default, SField::notSigning);
CONSTRUCT_TYPED_SFIELD(sfDomain, "Domain", VL, 7);
CONSTRUCT_TYPED_SFIELD(sfFundCode, "FundCode", VL, 8);
CONSTRUCT_TYPED_SFIELD(sfRemoveCode, "RemoveCode", VL, 9);
CONSTRUCT_TYPED_SFIELD(sfExpireCode, "ExpireCode", VL, 10);
CONSTRUCT_TYPED_SFIELD(sfCreateCode, "CreateCode", VL, 11);
CONSTRUCT_TYPED_SFIELD(sfMemoType, "MemoType", VL, 12);
CONSTRUCT_TYPED_SFIELD(sfMemoData, "MemoData", VL, 13);
CONSTRUCT_TYPED_SFIELD(sfMemoFormat, "MemoFormat", VL, 14);
// variable length (uncommon)
CONSTRUCT_TYPED_SFIELD(sfFulfillment, "Fulfillment", VL, 16);
CONSTRUCT_TYPED_SFIELD(sfCondition, "Condition", VL, 17);
CONSTRUCT_TYPED_SFIELD(sfMasterSignature, "MasterSignature", VL, 18, SField::sMD_Default, SField::notSigning);
CONSTRUCT_TYPED_SFIELD(sfUNLModifyValidator, "UNLModifyValidator", VL, 19);
CONSTRUCT_TYPED_SFIELD(sfValidatorToDisable, "ValidatorToDisable", VL, 20);
CONSTRUCT_TYPED_SFIELD(sfValidatorToReEnable, "ValidatorToReEnable", VL, 21);
CONSTRUCT_TYPED_SFIELD(sfHookStateData, "HookStateData", VL, 22);
CONSTRUCT_TYPED_SFIELD(sfHookReturnString, "HookReturnString", VL, 23);
CONSTRUCT_TYPED_SFIELD(sfHookParameterName, "HookParameterName", VL, 24);
CONSTRUCT_TYPED_SFIELD(sfHookParameterValue, "HookParameterValue", VL, 25);
CONSTRUCT_TYPED_SFIELD(sfDIDDocument, "DIDDocument", VL, 26);
CONSTRUCT_TYPED_SFIELD(sfData, "Data", VL, 27);
CONSTRUCT_TYPED_SFIELD(sfAssetClass, "AssetClass", VL, 28);
CONSTRUCT_TYPED_SFIELD(sfProvider, "Provider", VL, 29);
// account
CONSTRUCT_TYPED_SFIELD(sfAccount, "Account", ACCOUNT, 1);
CONSTRUCT_TYPED_SFIELD(sfOwner, "Owner", ACCOUNT, 2);
CONSTRUCT_TYPED_SFIELD(sfDestination, "Destination", ACCOUNT, 3);
CONSTRUCT_TYPED_SFIELD(sfIssuer, "Issuer", ACCOUNT, 4);
CONSTRUCT_TYPED_SFIELD(sfAuthorize, "Authorize", ACCOUNT, 5);
CONSTRUCT_TYPED_SFIELD(sfUnauthorize, "Unauthorize", ACCOUNT, 6);
// 7 is currently unused
CONSTRUCT_TYPED_SFIELD(sfRegularKey, "RegularKey", ACCOUNT, 8);
CONSTRUCT_TYPED_SFIELD(sfNFTokenMinter, "NFTokenMinter", ACCOUNT, 9);
CONSTRUCT_TYPED_SFIELD(sfEmitCallback, "EmitCallback", ACCOUNT, 10);
// account (uncommon)
CONSTRUCT_TYPED_SFIELD(sfHookAccount, "HookAccount", ACCOUNT, 16);
CONSTRUCT_TYPED_SFIELD(sfOtherChainSource, "OtherChainSource", ACCOUNT, 18);
CONSTRUCT_TYPED_SFIELD(sfOtherChainDestination, "OtherChainDestination",ACCOUNT, 19);
CONSTRUCT_TYPED_SFIELD(sfAttestationSignerAccount, "AttestationSignerAccount", ACCOUNT, 20);
CONSTRUCT_TYPED_SFIELD(sfAttestationRewardAccount, "AttestationRewardAccount", ACCOUNT, 21);
CONSTRUCT_TYPED_SFIELD(sfLockingChainDoor, "LockingChainDoor", ACCOUNT, 22);
CONSTRUCT_TYPED_SFIELD(sfIssuingChainDoor, "IssuingChainDoor", ACCOUNT, 23);
// vector of 256-bit
CONSTRUCT_TYPED_SFIELD(sfIndexes, "Indexes", VECTOR256, 1, SField::sMD_Never);
CONSTRUCT_TYPED_SFIELD(sfHashes, "Hashes", VECTOR256, 2);
CONSTRUCT_TYPED_SFIELD(sfAmendments, "Amendments", VECTOR256, 3);
CONSTRUCT_TYPED_SFIELD(sfNFTokenOffers, "NFTokenOffers", VECTOR256, 4);
// path set
CONSTRUCT_UNTYPED_SFIELD(sfPaths, "Paths", PATHSET, 1);
// currency
CONSTRUCT_TYPED_SFIELD(sfBaseAsset, "BaseAsset", CURRENCY, 1);
CONSTRUCT_TYPED_SFIELD(sfQuoteAsset, "QuoteAsset", CURRENCY, 2);
// issue
CONSTRUCT_TYPED_SFIELD(sfLockingChainIssue, "LockingChainIssue", ISSUE, 1);
CONSTRUCT_TYPED_SFIELD(sfIssuingChainIssue, "IssuingChainIssue", ISSUE, 2);
CONSTRUCT_TYPED_SFIELD(sfAsset, "Asset", ISSUE, 3);
CONSTRUCT_TYPED_SFIELD(sfAsset2, "Asset2", ISSUE, 4);
// Bridge
CONSTRUCT_TYPED_SFIELD(sfXChainBridge, "XChainBridge", XCHAIN_BRIDGE,
1);
// inner object
// OBJECT/1 is reserved for end of object
CONSTRUCT_UNTYPED_SFIELD(sfTransactionMetaData, "TransactionMetaData", OBJECT, 2);
CONSTRUCT_UNTYPED_SFIELD(sfCreatedNode, "CreatedNode", OBJECT, 3);
CONSTRUCT_UNTYPED_SFIELD(sfDeletedNode, "DeletedNode", OBJECT, 4);
CONSTRUCT_UNTYPED_SFIELD(sfModifiedNode, "ModifiedNode", OBJECT, 5);
CONSTRUCT_UNTYPED_SFIELD(sfPreviousFields, "PreviousFields", OBJECT, 6);
CONSTRUCT_UNTYPED_SFIELD(sfFinalFields, "FinalFields", OBJECT, 7);
CONSTRUCT_UNTYPED_SFIELD(sfNewFields, "NewFields", OBJECT, 8);
CONSTRUCT_UNTYPED_SFIELD(sfTemplateEntry, "TemplateEntry", OBJECT, 9);
CONSTRUCT_UNTYPED_SFIELD(sfMemo, "Memo", OBJECT, 10);
CONSTRUCT_UNTYPED_SFIELD(sfSignerEntry, "SignerEntry", OBJECT, 11);
CONSTRUCT_UNTYPED_SFIELD(sfNFToken, "NFToken", OBJECT, 12);
CONSTRUCT_UNTYPED_SFIELD(sfEmitDetails, "EmitDetails", OBJECT, 13);
CONSTRUCT_UNTYPED_SFIELD(sfHook, "Hook", OBJECT, 14);
// inner object (uncommon)
CONSTRUCT_UNTYPED_SFIELD(sfSigner, "Signer", OBJECT, 16);
// 17 has not been used yet
CONSTRUCT_UNTYPED_SFIELD(sfMajority, "Majority", OBJECT, 18);
CONSTRUCT_UNTYPED_SFIELD(sfDisabledValidator, "DisabledValidator", OBJECT, 19);
CONSTRUCT_UNTYPED_SFIELD(sfEmittedTxn, "EmittedTxn", OBJECT, 20);
CONSTRUCT_UNTYPED_SFIELD(sfHookExecution, "HookExecution", OBJECT, 21);
CONSTRUCT_UNTYPED_SFIELD(sfHookDefinition, "HookDefinition", OBJECT, 22);
CONSTRUCT_UNTYPED_SFIELD(sfHookParameter, "HookParameter", OBJECT, 23);
CONSTRUCT_UNTYPED_SFIELD(sfHookGrant, "HookGrant", OBJECT, 24);
CONSTRUCT_UNTYPED_SFIELD(sfVoteEntry, "VoteEntry", OBJECT, 25);
CONSTRUCT_UNTYPED_SFIELD(sfAuctionSlot, "AuctionSlot", OBJECT, 26);
CONSTRUCT_UNTYPED_SFIELD(sfAuthAccount, "AuthAccount", OBJECT, 27);
CONSTRUCT_UNTYPED_SFIELD(sfXChainClaimProofSig, "XChainClaimProofSig", OBJECT, 28);
CONSTRUCT_UNTYPED_SFIELD(sfXChainCreateAccountProofSig,
"XChainCreateAccountProofSig",
OBJECT, 29);
CONSTRUCT_UNTYPED_SFIELD(sfXChainClaimAttestationCollectionElement,
"XChainClaimAttestationCollectionElement",
OBJECT, 30);
CONSTRUCT_UNTYPED_SFIELD(sfXChainCreateAccountAttestationCollectionElement,
"XChainCreateAccountAttestationCollectionElement",
OBJECT, 31);
CONSTRUCT_UNTYPED_SFIELD(sfPriceData, "PriceData", OBJECT, 32);
// array of objects
// ARRAY/1 is reserved for end of array
// 2 has never been used
CONSTRUCT_UNTYPED_SFIELD(sfSigners, "Signers", ARRAY, 3, SField::sMD_Default, SField::notSigning);
CONSTRUCT_UNTYPED_SFIELD(sfSignerEntries, "SignerEntries", ARRAY, 4);
CONSTRUCT_UNTYPED_SFIELD(sfTemplate, "Template", ARRAY, 5);
CONSTRUCT_UNTYPED_SFIELD(sfNecessary, "Necessary", ARRAY, 6);
CONSTRUCT_UNTYPED_SFIELD(sfSufficient, "Sufficient", ARRAY, 7);
CONSTRUCT_UNTYPED_SFIELD(sfAffectedNodes, "AffectedNodes", ARRAY, 8);
CONSTRUCT_UNTYPED_SFIELD(sfMemos, "Memos", ARRAY, 9);
CONSTRUCT_UNTYPED_SFIELD(sfNFTokens, "NFTokens", ARRAY, 10);
CONSTRUCT_UNTYPED_SFIELD(sfHooks, "Hooks", ARRAY, 11);
CONSTRUCT_UNTYPED_SFIELD(sfVoteSlots, "VoteSlots", ARRAY, 12);
// array of objects (uncommon)
CONSTRUCT_UNTYPED_SFIELD(sfMajorities, "Majorities", ARRAY, 16);
CONSTRUCT_UNTYPED_SFIELD(sfDisabledValidators, "DisabledValidators", ARRAY, 17);
CONSTRUCT_UNTYPED_SFIELD(sfHookExecutions, "HookExecutions", ARRAY, 18);
CONSTRUCT_UNTYPED_SFIELD(sfHookParameters, "HookParameters", ARRAY, 19);
CONSTRUCT_UNTYPED_SFIELD(sfHookGrants, "HookGrants", ARRAY, 20);
CONSTRUCT_UNTYPED_SFIELD(sfXChainClaimAttestations,
"XChainClaimAttestations",
ARRAY, 21);
CONSTRUCT_UNTYPED_SFIELD(sfXChainCreateAccountAttestations,
"XChainCreateAccountAttestations",
ARRAY, 22);
// 23 is unused and available for use
CONSTRUCT_UNTYPED_SFIELD(sfPriceDataSeries, "PriceDataSeries", ARRAY, 24);
CONSTRUCT_UNTYPED_SFIELD(sfAuthAccounts, "AuthAccounts", ARRAY, 25);
// clang-format on
#undef CONSTRUCT_TYPED_SFIELD
#undef CONSTRUCT_UNTYPED_SFIELD
#pragma pop_macro("CONSTRUCT_TYPED_SFIELD")
#pragma pop_macro("CONSTRUCT_UNTYPED_SFIELD")
#undef TYPED_SFIELD
#pragma pop_macro("TYPED_SFIELD")
#undef UNTYPED_SFIELD
#pragma pop_macro("UNTYPED_SFIELD")
SField::SField(
private_access_tag_t,

View File

@@ -47,472 +47,21 @@ TxFormats::TxFormats()
{sfNetworkID, soeOPTIONAL},
};
add(jss::AccountSet,
ttACCOUNT_SET,
{
{sfEmailHash, soeOPTIONAL},
{sfWalletLocator, soeOPTIONAL},
{sfWalletSize, soeOPTIONAL},
{sfMessageKey, soeOPTIONAL},
{sfDomain, soeOPTIONAL},
{sfTransferRate, soeOPTIONAL},
{sfSetFlag, soeOPTIONAL},
{sfClearFlag, soeOPTIONAL},
{sfTickSize, soeOPTIONAL},
{sfNFTokenMinter, soeOPTIONAL},
},
commonFields);
#pragma push_macro("UNWRAP")
#undef UNWRAP
#pragma push_macro("TRANSACTION")
#undef TRANSACTION
add(jss::TrustSet,
ttTRUST_SET,
{
{sfLimitAmount, soeOPTIONAL},
{sfQualityIn, soeOPTIONAL},
{sfQualityOut, soeOPTIONAL},
},
commonFields);
#define UNWRAP(...) __VA_ARGS__
#define TRANSACTION(tag, value, name, fields) \
add(jss::name, tag, UNWRAP fields, commonFields);
add(jss::OfferCreate,
ttOFFER_CREATE,
{
{sfTakerPays, soeREQUIRED},
{sfTakerGets, soeREQUIRED},
{sfExpiration, soeOPTIONAL},
{sfOfferSequence, soeOPTIONAL},
},
commonFields);
#include <xrpl/protocol/detail/transactions.macro>
add(jss::AMMCreate,
ttAMM_CREATE,
{
{sfAmount, soeREQUIRED},
{sfAmount2, soeREQUIRED},
{sfTradingFee, soeREQUIRED},
},
commonFields);
add(jss::AMMDeposit,
ttAMM_DEPOSIT,
{
{sfAsset, soeREQUIRED},
{sfAsset2, soeREQUIRED},
{sfAmount, soeOPTIONAL},
{sfAmount2, soeOPTIONAL},
{sfEPrice, soeOPTIONAL},
{sfLPTokenOut, soeOPTIONAL},
{sfTradingFee, soeOPTIONAL},
},
commonFields);
add(jss::AMMWithdraw,
ttAMM_WITHDRAW,
{
{sfAsset, soeREQUIRED},
{sfAsset2, soeREQUIRED},
{sfAmount, soeOPTIONAL},
{sfAmount2, soeOPTIONAL},
{sfEPrice, soeOPTIONAL},
{sfLPTokenIn, soeOPTIONAL},
},
commonFields);
add(jss::AMMVote,
ttAMM_VOTE,
{
{sfAsset, soeREQUIRED},
{sfAsset2, soeREQUIRED},
{sfTradingFee, soeREQUIRED},
},
commonFields);
add(jss::AMMBid,
ttAMM_BID,
{
{sfAsset, soeREQUIRED},
{sfAsset2, soeREQUIRED},
{sfBidMin, soeOPTIONAL},
{sfBidMax, soeOPTIONAL},
{sfAuthAccounts, soeOPTIONAL},
},
commonFields);
add(jss::AMMDelete,
ttAMM_DELETE,
{
{sfAsset, soeREQUIRED},
{sfAsset2, soeREQUIRED},
},
commonFields);
add(jss::OfferCancel,
ttOFFER_CANCEL,
{
{sfOfferSequence, soeREQUIRED},
},
commonFields);
add(jss::SetRegularKey,
ttREGULAR_KEY_SET,
{
{sfRegularKey, soeOPTIONAL},
},
commonFields);
add(jss::Payment,
ttPAYMENT,
{
{sfDestination, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfSendMax, soeOPTIONAL},
{sfPaths, soeDEFAULT},
{sfInvoiceID, soeOPTIONAL},
{sfDestinationTag, soeOPTIONAL},
{sfDeliverMin, soeOPTIONAL},
},
commonFields);
add(jss::EscrowCreate,
ttESCROW_CREATE,
{
{sfDestination, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfCondition, soeOPTIONAL},
{sfCancelAfter, soeOPTIONAL},
{sfFinishAfter, soeOPTIONAL},
{sfDestinationTag, soeOPTIONAL},
},
commonFields);
add(jss::EscrowFinish,
ttESCROW_FINISH,
{
{sfOwner, soeREQUIRED},
{sfOfferSequence, soeREQUIRED},
{sfFulfillment, soeOPTIONAL},
{sfCondition, soeOPTIONAL},
},
commonFields);
add(jss::EscrowCancel,
ttESCROW_CANCEL,
{
{sfOwner, soeREQUIRED},
{sfOfferSequence, soeREQUIRED},
},
commonFields);
add(jss::EnableAmendment,
ttAMENDMENT,
{
{sfLedgerSequence, soeREQUIRED},
{sfAmendment, soeREQUIRED},
},
commonFields);
add(jss::SetFee,
ttFEE,
{
{sfLedgerSequence, soeOPTIONAL},
// Old version uses raw numbers
{sfBaseFee, soeOPTIONAL},
{sfReferenceFeeUnits, soeOPTIONAL},
{sfReserveBase, soeOPTIONAL},
{sfReserveIncrement, soeOPTIONAL},
// New version uses Amounts
{sfBaseFeeDrops, soeOPTIONAL},
{sfReserveBaseDrops, soeOPTIONAL},
{sfReserveIncrementDrops, soeOPTIONAL},
},
commonFields);
add(jss::UNLModify,
ttUNL_MODIFY,
{
{sfUNLModifyDisabling, soeREQUIRED},
{sfLedgerSequence, soeREQUIRED},
{sfUNLModifyValidator, soeREQUIRED},
},
commonFields);
add(jss::TicketCreate,
ttTICKET_CREATE,
{
{sfTicketCount, soeREQUIRED},
},
commonFields);
// The SignerEntries are optional because a SignerList is deleted by
// setting the SignerQuorum to zero and omitting SignerEntries.
add(jss::SignerListSet,
ttSIGNER_LIST_SET,
{
{sfSignerQuorum, soeREQUIRED},
{sfSignerEntries, soeOPTIONAL},
},
commonFields);
add(jss::PaymentChannelCreate,
ttPAYCHAN_CREATE,
{
{sfDestination, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfSettleDelay, soeREQUIRED},
{sfPublicKey, soeREQUIRED},
{sfCancelAfter, soeOPTIONAL},
{sfDestinationTag, soeOPTIONAL},
},
commonFields);
add(jss::PaymentChannelFund,
ttPAYCHAN_FUND,
{
{sfChannel, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfExpiration, soeOPTIONAL},
},
commonFields);
add(jss::PaymentChannelClaim,
ttPAYCHAN_CLAIM,
{
{sfChannel, soeREQUIRED},
{sfAmount, soeOPTIONAL},
{sfBalance, soeOPTIONAL},
{sfSignature, soeOPTIONAL},
{sfPublicKey, soeOPTIONAL},
},
commonFields);
add(jss::CheckCreate,
ttCHECK_CREATE,
{
{sfDestination, soeREQUIRED},
{sfSendMax, soeREQUIRED},
{sfExpiration, soeOPTIONAL},
{sfDestinationTag, soeOPTIONAL},
{sfInvoiceID, soeOPTIONAL},
},
commonFields);
add(jss::CheckCash,
ttCHECK_CASH,
{
{sfCheckID, soeREQUIRED},
{sfAmount, soeOPTIONAL},
{sfDeliverMin, soeOPTIONAL},
},
commonFields);
add(jss::CheckCancel,
ttCHECK_CANCEL,
{
{sfCheckID, soeREQUIRED},
},
commonFields);
add(jss::AccountDelete,
ttACCOUNT_DELETE,
{
{sfDestination, soeREQUIRED},
{sfDestinationTag, soeOPTIONAL},
},
commonFields);
add(jss::DepositPreauth,
ttDEPOSIT_PREAUTH,
{
{sfAuthorize, soeOPTIONAL},
{sfUnauthorize, soeOPTIONAL},
},
commonFields);
add(jss::NFTokenMint,
ttNFTOKEN_MINT,
{
{sfNFTokenTaxon, soeREQUIRED},
{sfTransferFee, soeOPTIONAL},
{sfIssuer, soeOPTIONAL},
{sfURI, soeOPTIONAL},
{sfAmount, soeOPTIONAL},
{sfDestination, soeOPTIONAL},
{sfExpiration, soeOPTIONAL},
},
commonFields);
add(jss::NFTokenBurn,
ttNFTOKEN_BURN,
{
{sfNFTokenID, soeREQUIRED},
{sfOwner, soeOPTIONAL},
},
commonFields);
add(jss::NFTokenCreateOffer,
ttNFTOKEN_CREATE_OFFER,
{
{sfNFTokenID, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfDestination, soeOPTIONAL},
{sfOwner, soeOPTIONAL},
{sfExpiration, soeOPTIONAL},
},
commonFields);
add(jss::NFTokenCancelOffer,
ttNFTOKEN_CANCEL_OFFER,
{
{sfNFTokenOffers, soeREQUIRED},
},
commonFields);
add(jss::NFTokenAcceptOffer,
ttNFTOKEN_ACCEPT_OFFER,
{
{sfNFTokenBuyOffer, soeOPTIONAL},
{sfNFTokenSellOffer, soeOPTIONAL},
{sfNFTokenBrokerFee, soeOPTIONAL},
},
commonFields);
add(jss::Clawback,
ttCLAWBACK,
{
{sfAmount, soeREQUIRED},
},
commonFields);
add(jss::XChainCreateBridge,
ttXCHAIN_CREATE_BRIDGE,
{
{sfXChainBridge, soeREQUIRED},
{sfSignatureReward, soeREQUIRED},
{sfMinAccountCreateAmount, soeOPTIONAL},
},
commonFields);
add(jss::XChainModifyBridge,
ttXCHAIN_MODIFY_BRIDGE,
{
{sfXChainBridge, soeREQUIRED},
{sfSignatureReward, soeOPTIONAL},
{sfMinAccountCreateAmount, soeOPTIONAL},
},
commonFields);
add(jss::XChainCreateClaimID,
ttXCHAIN_CREATE_CLAIM_ID,
{
{sfXChainBridge, soeREQUIRED},
{sfSignatureReward, soeREQUIRED},
{sfOtherChainSource, soeREQUIRED},
},
commonFields);
add(jss::XChainCommit,
ttXCHAIN_COMMIT,
{
{sfXChainBridge, soeREQUIRED},
{sfXChainClaimID, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfOtherChainDestination, soeOPTIONAL},
},
commonFields);
add(jss::XChainClaim,
ttXCHAIN_CLAIM,
{
{sfXChainBridge, soeREQUIRED},
{sfXChainClaimID, soeREQUIRED},
{sfDestination, soeREQUIRED},
{sfDestinationTag, soeOPTIONAL},
{sfAmount, soeREQUIRED},
},
commonFields);
add(jss::XChainAddClaimAttestation,
ttXCHAIN_ADD_CLAIM_ATTESTATION,
{
{sfXChainBridge, soeREQUIRED},
{sfAttestationSignerAccount, soeREQUIRED},
{sfPublicKey, soeREQUIRED},
{sfSignature, soeREQUIRED},
{sfOtherChainSource, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfAttestationRewardAccount, soeREQUIRED},
{sfWasLockingChainSend, soeREQUIRED},
{sfXChainClaimID, soeREQUIRED},
{sfDestination, soeOPTIONAL},
},
commonFields);
add(jss::XChainAddAccountCreateAttestation,
ttXCHAIN_ADD_ACCOUNT_CREATE_ATTESTATION,
{
{sfXChainBridge, soeREQUIRED},
{sfAttestationSignerAccount, soeREQUIRED},
{sfPublicKey, soeREQUIRED},
{sfSignature, soeREQUIRED},
{sfOtherChainSource, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfAttestationRewardAccount, soeREQUIRED},
{sfWasLockingChainSend, soeREQUIRED},
{sfXChainAccountCreateCount, soeREQUIRED},
{sfDestination, soeREQUIRED},
{sfSignatureReward, soeREQUIRED},
},
commonFields);
add(jss::XChainAccountCreateCommit,
ttXCHAIN_ACCOUNT_CREATE_COMMIT,
{
{sfXChainBridge, soeREQUIRED},
{sfDestination, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfSignatureReward, soeREQUIRED},
},
commonFields);
add(jss::DIDSet,
ttDID_SET,
{
{sfDIDDocument, soeOPTIONAL},
{sfURI, soeOPTIONAL},
{sfData, soeOPTIONAL},
},
commonFields);
add(jss::DIDDelete, ttDID_DELETE, {}, commonFields);
add(jss::OracleSet,
ttORACLE_SET,
{
{sfOracleDocumentID, soeREQUIRED},
{sfProvider, soeOPTIONAL},
{sfURI, soeOPTIONAL},
{sfAssetClass, soeOPTIONAL},
{sfLastUpdateTime, soeREQUIRED},
{sfPriceDataSeries, soeREQUIRED},
},
commonFields);
add(jss::OracleDelete,
ttORACLE_DELETE,
{
{sfOracleDocumentID, soeREQUIRED},
},
commonFields);
add(jss::LedgerStateFix,
ttLEDGER_STATE_FIX,
{
{sfLedgerFixType, soeREQUIRED},
{sfOwner, soeOPTIONAL},
},
commonFields);
#undef TRANSACTION
#pragma pop_macro("TRANSACTION")
#undef UNWRAP
#pragma pop_macro("UNWRAP")
}
TxFormats const&

View File

@@ -140,7 +140,7 @@ AMM::create(
if (flags)
jv[jss::Flags] = *flags;
if (fee_ != 0)
jv[jss::Fee] = std::to_string(fee_);
jv[sfFee] = std::to_string(fee_);
else
jv[jss::Fee] = std::to_string(env_.current()->fees().increment.drops());
submit(jv, seq, ter);

View File

@@ -43,6 +43,8 @@ public:
doApply() override;
};
using CheckCancel = CancelCheck;
} // namespace ripple
#endif

View File

@@ -46,6 +46,8 @@ public:
doApply() override;
};
using OfferCancel = CancelOffer;
} // namespace ripple
#endif

View File

@@ -43,6 +43,8 @@ public:
doApply() override;
};
using CheckCash = CashCheck;
} // namespace ripple
#endif

View File

@@ -69,6 +69,10 @@ private:
applyUNLModify();
};
using EnableAmendment = Change;
using SetFee = Change;
using UNLModify = Change;
} // namespace ripple
#endif

View File

@@ -43,6 +43,8 @@ public:
doApply() override;
};
using CheckCreate = CreateCheck;
} // namespace ripple
#endif

View File

@@ -142,6 +142,8 @@ private:
OfferStream::StepCounter stepCounter_;
};
using OfferCreate = CreateOffer;
} // namespace ripple
#endif

View File

@@ -84,6 +84,8 @@ public:
doApply() override;
};
using TicketCreate = CreateTicket;
} // namespace ripple
#endif

View File

@@ -48,6 +48,8 @@ public:
doApply() override;
};
using AccountDelete = DeleteAccount;
} // namespace ripple
#endif

View File

@@ -59,6 +59,8 @@ public:
beast::Journal j);
};
using OracleDelete = DeleteOracle;
} // namespace ripple
#endif // RIPPLE_TX_DELETEORACLE_H_INCLUDED

View File

@@ -46,6 +46,8 @@ public:
doApply() override;
};
using PaymentChannelCreate = PayChanCreate;
//------------------------------------------------------------------------------
class PayChanFund : public Transactor
@@ -67,6 +69,8 @@ public:
doApply() override;
};
using PaymentChannelFund = PayChanFund;
//------------------------------------------------------------------------------
class PayChanClaim : public Transactor
@@ -85,6 +89,8 @@ public:
doApply() override;
};
using PaymentChannelClaim = PayChanClaim;
} // namespace ripple
#endif

View File

@@ -51,6 +51,8 @@ public:
doApply() override;
};
using AccountSet = SetAccount;
} // namespace ripple
#endif

View File

@@ -52,6 +52,8 @@ public:
doApply() override;
};
using OracleSet = SetOracle;
} // namespace ripple
#endif // RIPPLE_TX_SETORACLE_H_INCLUDED

View File

@@ -97,6 +97,8 @@ private:
const;
};
using SignerListSet = SetSignerList;
} // namespace ripple
#endif

View File

@@ -47,6 +47,8 @@ public:
doApply() override;
};
using TrustSet = SetTrust;
} // namespace ripple
#endif

View File

@@ -67,6 +67,9 @@ public:
TER
doApply() override;
};
using XChainModifyBridge = BridgeModify;
//------------------------------------------------------------------------------
// Claim funds from a `XChainCommit` transaction. This is normally not needed,
@@ -248,6 +251,8 @@ public:
doApply() override;
};
using XChainAccountCreateCommit = XChainCreateAccountCommit;
//------------------------------------------------------------------------------
} // namespace ripple

View File

@@ -76,98 +76,18 @@ with_txn_type(TxType txnType, F&& f)
{
switch (txnType)
{
case ttACCOUNT_DELETE:
return f.template operator()<DeleteAccount>();
case ttACCOUNT_SET:
return f.template operator()<SetAccount>();
case ttCHECK_CANCEL:
return f.template operator()<CancelCheck>();
case ttCHECK_CASH:
return f.template operator()<CashCheck>();
case ttCHECK_CREATE:
return f.template operator()<CreateCheck>();
case ttDEPOSIT_PREAUTH:
return f.template operator()<DepositPreauth>();
case ttOFFER_CANCEL:
return f.template operator()<CancelOffer>();
case ttOFFER_CREATE:
return f.template operator()<CreateOffer>();
case ttESCROW_CREATE:
return f.template operator()<EscrowCreate>();
case ttESCROW_FINISH:
return f.template operator()<EscrowFinish>();
case ttESCROW_CANCEL:
return f.template operator()<EscrowCancel>();
case ttLEDGER_STATE_FIX:
return f.template operator()<LedgerStateFix>();
case ttPAYCHAN_CLAIM:
return f.template operator()<PayChanClaim>();
case ttPAYCHAN_CREATE:
return f.template operator()<PayChanCreate>();
case ttPAYCHAN_FUND:
return f.template operator()<PayChanFund>();
case ttPAYMENT:
return f.template operator()<Payment>();
case ttREGULAR_KEY_SET:
return f.template operator()<SetRegularKey>();
case ttSIGNER_LIST_SET:
return f.template operator()<SetSignerList>();
case ttTICKET_CREATE:
return f.template operator()<CreateTicket>();
case ttTRUST_SET:
return f.template operator()<SetTrust>();
case ttAMENDMENT:
case ttFEE:
case ttUNL_MODIFY:
return f.template operator()<Change>();
case ttNFTOKEN_MINT:
return f.template operator()<NFTokenMint>();
case ttNFTOKEN_BURN:
return f.template operator()<NFTokenBurn>();
case ttNFTOKEN_CREATE_OFFER:
return f.template operator()<NFTokenCreateOffer>();
case ttNFTOKEN_CANCEL_OFFER:
return f.template operator()<NFTokenCancelOffer>();
case ttNFTOKEN_ACCEPT_OFFER:
return f.template operator()<NFTokenAcceptOffer>();
case ttCLAWBACK:
return f.template operator()<Clawback>();
case ttAMM_CREATE:
return f.template operator()<AMMCreate>();
case ttAMM_DEPOSIT:
return f.template operator()<AMMDeposit>();
case ttAMM_WITHDRAW:
return f.template operator()<AMMWithdraw>();
case ttAMM_VOTE:
return f.template operator()<AMMVote>();
case ttAMM_BID:
return f.template operator()<AMMBid>();
case ttAMM_DELETE:
return f.template operator()<AMMDelete>();
case ttXCHAIN_CREATE_BRIDGE:
return f.template operator()<XChainCreateBridge>();
case ttXCHAIN_MODIFY_BRIDGE:
return f.template operator()<BridgeModify>();
case ttXCHAIN_CREATE_CLAIM_ID:
return f.template operator()<XChainCreateClaimID>();
case ttXCHAIN_COMMIT:
return f.template operator()<XChainCommit>();
case ttXCHAIN_CLAIM:
return f.template operator()<XChainClaim>();
case ttXCHAIN_ADD_CLAIM_ATTESTATION:
return f.template operator()<XChainAddClaimAttestation>();
case ttXCHAIN_ADD_ACCOUNT_CREATE_ATTESTATION:
return f.template operator()<XChainAddAccountCreateAttestation>();
case ttXCHAIN_ACCOUNT_CREATE_COMMIT:
return f.template operator()<XChainCreateAccountCommit>();
case ttDID_SET:
return f.template operator()<DIDSet>();
case ttDID_DELETE:
return f.template operator()<DIDDelete>();
case ttORACLE_SET:
return f.template operator()<SetOracle>();
case ttORACLE_DELETE:
return f.template operator()<DeleteOracle>();
#pragma push_macro("TRANSACTION")
#undef TRANSACTION
#define TRANSACTION(tag, value, name, fields) \
case tag: \
return f.template operator()<name>();
#include <xrpl/protocol/detail/transactions.macro>
#undef TRANSACTION
#pragma pop_macro("TRANSACTION")
default:
throw UnknownTxnType(txnType);
}