Files
rippled/include/xrpl/protocol/detail/ledger_entries.macro
2025-07-10 17:19:38 +01:00

529 lines
21 KiB
Plaintext

//------------------------------------------------------------------------------
/*
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.
*/
//==============================================================================
#if !defined(LEDGER_ENTRY)
#error "undefined macro: LEDGER_ENTRY"
#endif
#if !defined(LEDGER_ENTRY_FIELD)
#error "undefined macro: LEDGER_ENTRY_FIELD"
#endif
#if !defined(DEFINE_LEDGER_ENTRY_FIELDS)
#error "undefined macro: DEFINE_LEDGER_ENTRY_FIELDS"
#endif
#if !defined(LEDGER_ENTRIES_BEGIN)
#error "undefined macro: LEDGER_ENTRIES_BEGIN"
#endif
#if !defined(LEDGER_ENTRIES_END)
#error "undefined macro: LEDGER_ENTRIES_END"
#endif
#ifndef LEDGER_ENTRY_DUPLICATE
// The EXPAND macro is needed for Windows
// https://stackoverflow.com/questions/5134523/msvc-doesnt-expand-va-args-correctly
#define EXPAND(x) x
// The `LEDGER_ENTRY_DUPLICATE macro is needed to avoid JSS conflicts
// Since some transactions and ledger entries have the same name (like `DepositPreauth`)
// The compiler won't accept two instances of `JSS(DepositPreauth)`
#define LEDGER_ENTRY_DUPLICATE(...) EXPAND(LEDGER_ENTRY(__VA_ARGS__))
#endif
LEDGER_ENTRIES_BEGIN
/**
* These objects are listed in order of increasing ledger type ID.
* There are many gaps between these IDs.
* You are welcome to fill them with new object types.
*/
/** A ledger object which identifies an offer to buy or sell an NFT.
\sa keylet::nftoffer
*/
LEDGER_ENTRY(ltNFTOKEN_OFFER, 0x0037, NFTokenOffer, nft_offer, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfOwner, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfNFTokenID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAmount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfNFTokenOfferNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfDestination, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfExpiration, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object which describes a check.
\sa keylet::check
*/
LEDGER_ENTRY(ltCHECK, 0x0043, Check, check, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfDestination, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSendMax, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSequence, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfDestinationNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfExpiration, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfInvoiceID, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfSourceTag, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfDestinationTag, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** The ledger object which tracks the DID.
\sa keylet::did
*/
LEDGER_ENTRY(ltDID, 0x0049, DID, did, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfDIDDocument, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfURI, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfData, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** The ledger object which tracks the current negative UNL state.
\note This is a singleton: only one such object exists in the ledger.
\sa keylet::negativeUNL
*/
LEDGER_ENTRY(ltNEGATIVE_UNL, 0x004e, NegativeUNL, nunl, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfDisabledValidators, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfValidatorToDisable, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfValidatorToReEnable, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeOPTIONAL)
))
/** A ledger object which contains a list of NFTs
\sa keylet::nftpage_min, keylet::nftpage_max, keylet::nftpage
*/
LEDGER_ENTRY(ltNFTOKEN_PAGE, 0x0050, NFTokenPage, nft_page, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfPreviousPageMin, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfNextPageMin, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfNFTokens, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object which contains a signer list for an account.
\sa keylet::signers
*/
// All fields are soeREQUIRED because there is always a SignerEntries.
// If there are no SignerEntries the node is deleted.
LEDGER_ENTRY(ltSIGNER_LIST, 0x0053, SignerList, signer_list, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSignerQuorum, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSignerEntries, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSignerListID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object which describes a ticket.
\sa keylet::ticket
*/
LEDGER_ENTRY(ltTICKET, 0x0054, Ticket, ticket, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfTicketSequence, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object which describes an account.
\sa keylet::account
*/
LEDGER_ENTRY(ltACCOUNT_ROOT, 0x0061, AccountRoot, account, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSequence, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfBalance, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerCount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAccountTxnID, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfRegularKey, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfEmailHash, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfWalletLocator, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfWalletSize, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfMessageKey, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfTransferRate, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfDomain, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfTickSize, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfTicketCount, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfNFTokenMinter, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfMintedNFTokens, soeDEFAULT)
LEDGER_ENTRY_FIELD(sfBurnedNFTokens, soeDEFAULT)
LEDGER_ENTRY_FIELD(sfFirstNFTokenSequence, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfAMMID, soeOPTIONAL) // pseudo-account designator
LEDGER_ENTRY_FIELD(sfVaultID, soeOPTIONAL) // pseudo-account designator
))
/** A ledger object which contains a list of object identifiers.
\sa keylet::page, keylet::quality, keylet::book, keylet::next and
keylet::ownerDir
*/
LEDGER_ENTRY(ltDIR_NODE, 0x0064, DirectoryNode, directory, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfOwner, soeOPTIONAL) // for owner directories
LEDGER_ENTRY_FIELD(sfTakerPaysCurrency, soeOPTIONAL) // order book directories
LEDGER_ENTRY_FIELD(sfTakerPaysIssuer, soeOPTIONAL) // order book directories
LEDGER_ENTRY_FIELD(sfTakerGetsCurrency, soeOPTIONAL) // order book directories
LEDGER_ENTRY_FIELD(sfTakerGetsIssuer, soeOPTIONAL) // order book directories
LEDGER_ENTRY_FIELD(sfExchangeRate, soeOPTIONAL) // order book directories
LEDGER_ENTRY_FIELD(sfIndexes, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfRootIndex, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfIndexNext, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfIndexPrevious, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfNFTokenID, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfDomainID, soeOPTIONAL)
))
/** The ledger object which lists details about amendments on the network.
\note This is a singleton: only one such object exists in the ledger.
\sa keylet::amendments
*/
LEDGER_ENTRY(ltAMENDMENTS, 0x0066, Amendments, amendments, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAmendments, soeOPTIONAL) // Enabled
LEDGER_ENTRY_FIELD(sfMajorities, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeOPTIONAL)
))
/** A ledger object that contains a list of ledger hashes.
This type is used to store the ledger hashes which the protocol uses
to implement skip lists that allow for efficient backwards (and, in
theory, forward) forward iteration across large ledger ranges.
\sa keylet::skip
*/
LEDGER_ENTRY(ltLEDGER_HASHES, 0x0068, LedgerHashes, hashes, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfFirstLedgerSequence, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfLastLedgerSequence, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfHashes, soeREQUIRED)
))
/** The ledger object which lists details about sidechains.
\sa keylet::bridge
*/
LEDGER_ENTRY(ltBRIDGE, 0x0069, Bridge, bridge, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSignatureReward, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfMinAccountCreateAmount, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfXChainBridge, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfXChainClaimID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfXChainAccountCreateCount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfXChainAccountClaimCount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object which describes an offer on the DEX.
\sa keylet::offer
*/
LEDGER_ENTRY(ltOFFER, 0x006f, Offer, offer, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSequence, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfTakerPays, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfTakerGets, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfBookDirectory, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfBookNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfExpiration, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfDomainID, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfAdditionalBooks, soeOPTIONAL)
))
/** A ledger object which describes a deposit preauthorization.
\sa keylet::depositPreauth
*/
LEDGER_ENTRY_DUPLICATE(ltDEPOSIT_PREAUTH, 0x0070, DepositPreauth, deposit_preauth, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAuthorize, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAuthorizeCredentials, soeOPTIONAL)
))
/** A claim id for a cross chain transaction.
\sa keylet::xChainClaimID
*/
LEDGER_ENTRY(ltXCHAIN_OWNED_CLAIM_ID, 0x0071, XChainOwnedClaimID, xchain_owned_claim_id, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfXChainBridge, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfXChainClaimID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOtherChainSource, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfXChainClaimAttestations, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSignatureReward, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object which describes a bidirectional trust line.
@note Per Vinnie Falco this should be renamed to ltTRUST_LINE
\sa keylet::line
*/
LEDGER_ENTRY(ltRIPPLE_STATE, 0x0072, RippleState, state, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfBalance, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfLowLimit, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfHighLimit, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfLowNode, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfLowQualityIn, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfLowQualityOut, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfHighNode, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfHighQualityIn, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfHighQualityOut, soeOPTIONAL)
))
/** The ledger object which lists the network's fee settings.
\note This is a singleton: only one such object exists in the ledger.
\sa keylet::fees
*/
LEDGER_ENTRY(ltFEE_SETTINGS, 0x0073, FeeSettings, fee, DEFINE_LEDGER_ENTRY_FIELDS(
// Old version uses raw numbers
LEDGER_ENTRY_FIELD(sfBaseFee, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfReferenceFeeUnits, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfReserveBase, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfReserveIncrement, soeOPTIONAL)
// New version uses Amounts
LEDGER_ENTRY_FIELD(sfBaseFeeDrops, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfReserveBaseDrops, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfReserveIncrementDrops, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeOPTIONAL)
))
/** A claim id for a cross chain create account transaction.
\sa keylet::xChainCreateAccountClaimID
*/
LEDGER_ENTRY(ltXCHAIN_OWNED_CREATE_ACCOUNT_CLAIM_ID, 0x0074, XChainOwnedCreateAccountClaimID, xchain_owned_create_account_claim_id, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfXChainBridge, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfXChainAccountCreateCount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfXChainCreateAccountAttestations, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object describing a single escrow.
\sa keylet::escrow
*/
LEDGER_ENTRY(ltESCROW, 0x0075, Escrow, escrow, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfDestination, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAmount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfCondition, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfCancelAfter, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfFinishAfter, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfSourceTag, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfDestinationTag, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfDestinationNode, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfTransferRate, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfIssuerNode, soeOPTIONAL)
))
/** A ledger object describing a single unidirectional XRP payment channel.
\sa keylet::payChan
*/
LEDGER_ENTRY(ltPAYCHAN, 0x0078, PayChannel, payment_channel, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfDestination, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAmount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfBalance, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPublicKey, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSettleDelay, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfExpiration, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfCancelAfter, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfSourceTag, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfDestinationTag, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfDestinationNode, soeOPTIONAL)
))
/** The ledger object which tracks the AMM.
\sa keylet::amm
*/
LEDGER_ENTRY(ltAMM, 0x0079, AMM, amm, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfTradingFee, soeDEFAULT)
LEDGER_ENTRY_FIELD(sfVoteSlots, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfAuctionSlot, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfLPTokenBalance, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAsset, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAsset2, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeOPTIONAL)
))
/** A ledger object which tracks MPTokenIssuance
\sa keylet::mptIssuance
*/
LEDGER_ENTRY(ltMPTOKEN_ISSUANCE, 0x007e, MPTokenIssuance, mpt_issuance, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfIssuer, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSequence, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfTransferFee, soeDEFAULT)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAssetScale, soeDEFAULT)
LEDGER_ENTRY_FIELD(sfMaximumAmount, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfOutstandingAmount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfLockedAmount, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfMPTokenMetadata, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfDomainID, soeOPTIONAL)
))
/** A ledger object which tracks MPToken
\sa keylet::mptoken
*/
LEDGER_ENTRY(ltMPTOKEN, 0x007f, MPToken, mptoken, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfMPTokenIssuanceID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfMPTAmount, soeDEFAULT)
LEDGER_ENTRY_FIELD(sfLockedAmount, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object which tracks Oracle
\sa keylet::oracle
*/
LEDGER_ENTRY(ltORACLE, 0x0080, Oracle, oracle, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfOwner, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfProvider, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPriceDataSeries, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAssetClass, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfLastUpdateTime, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfURI, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object which tracks Credential
\sa keylet::credential
*/
LEDGER_ENTRY(ltCREDENTIAL, 0x0081, Credential, credential, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfSubject, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfIssuer, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfCredentialType, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfExpiration, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfURI, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfIssuerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSubjectNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object which tracks PermissionedDomain
\sa keylet::permissionedDomain
*/
LEDGER_ENTRY(ltPERMISSIONED_DOMAIN, 0x0082, PermissionedDomain, permissioned_domain, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfOwner, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSequence, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAcceptedCredentials, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object representing permissions an account has delegated to another account.
\sa keylet::delegate
*/
LEDGER_ENTRY(ltDELEGATE, 0x0083, Delegate, delegate, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAuthorize, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPermissions, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
))
/** A ledger object representing a single asset vault.
\sa keylet::mptoken
*/
LEDGER_ENTRY(ltVAULT, 0x0084, Vault, vault, DEFINE_LEDGER_ENTRY_FIELDS(
LEDGER_ENTRY_FIELD(sfPreviousTxnID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfPreviousTxnLgrSeq, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfSequence, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwnerNode, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfOwner, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAccount, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfData, soeOPTIONAL)
LEDGER_ENTRY_FIELD(sfAsset, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAssetsTotal, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAssetsAvailable, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfAssetsMaximum, soeDEFAULT)
LEDGER_ENTRY_FIELD(sfLossUnrealized, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfShareMPTID, soeREQUIRED)
LEDGER_ENTRY_FIELD(sfWithdrawalPolicy, soeREQUIRED)
// no SharesTotal ever (use MPTIssuance.sfOutstandingAmount)
// no PermissionedDomainID ever (use MPTIssuance.sfDomainID)
))
#undef EXPAND
#undef LEDGER_ENTRY_DUPLICATE
LEDGER_ENTRIES_END