diff --git a/include/xrpl/protocol/LedgerFormats.h b/include/xrpl/protocol/LedgerFormats.h index a89d29911..207446966 100644 --- a/include/xrpl/protocol/LedgerFormats.h +++ b/include/xrpl/protocol/LedgerFormats.h @@ -56,7 +56,7 @@ enum LedgerEntryType : std::uint16_t #pragma push_macro("LEDGER_ENTRY") #undef LEDGER_ENTRY -#define LEDGER_ENTRY(tag, value, name, fields) tag = value, +#define LEDGER_ENTRY(tag, value, name, rpcName, fields) tag = value, #include diff --git a/include/xrpl/protocol/detail/ledger_entries.macro b/include/xrpl/protocol/detail/ledger_entries.macro index 3aa09348a..7868f0b33 100644 --- a/include/xrpl/protocol/detail/ledger_entries.macro +++ b/include/xrpl/protocol/detail/ledger_entries.macro @@ -21,6 +21,17 @@ #error "undefined macro: LEDGER_ENTRY" #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 + /** * These objects are listed in order of increasing ledger type ID. * There are many gaps between these IDs. @@ -31,7 +42,7 @@ \sa keylet::nftoffer */ -LEDGER_ENTRY(ltNFTOKEN_OFFER, 0x0037, NFTokenOffer, ({ +LEDGER_ENTRY(ltNFTOKEN_OFFER, 0x0037, NFTokenOffer, nft_offer, ({ {sfOwner, soeREQUIRED}, {sfNFTokenID, soeREQUIRED}, {sfAmount, soeREQUIRED}, @@ -47,7 +58,7 @@ LEDGER_ENTRY(ltNFTOKEN_OFFER, 0x0037, NFTokenOffer, ({ \sa keylet::check */ -LEDGER_ENTRY(ltCHECK, 0x0043, Check, ({ +LEDGER_ENTRY(ltCHECK, 0x0043, Check, check, ({ {sfAccount, soeREQUIRED}, {sfDestination, soeREQUIRED}, {sfSendMax, soeREQUIRED}, @@ -66,7 +77,7 @@ LEDGER_ENTRY(ltCHECK, 0x0043, Check, ({ \sa keylet::hookDefinition */ -LEDGER_ENTRY(ltHOOK_DEFINITION, 'D', HookDefinition, ({ +LEDGER_ENTRY(ltHOOK_DEFINITION, 'D', HookDefinition, hook_definition, ({ {sfHookHash, soeREQUIRED}, {sfHookOn, soeREQUIRED}, {sfHookCanEmit, soeOPTIONAL}, @@ -84,7 +95,7 @@ LEDGER_ENTRY(ltHOOK_DEFINITION, 'D', HookDefinition, ({ \sa keylet::emitted */ -LEDGER_ENTRY(ltEMITTED_TXN, 'E', EmittedTxn, ({ +LEDGER_ENTRY(ltEMITTED_TXN, 'E', EmittedTxn, emitted_txn, ({ {sfEmittedTxn, soeOPTIONAL}, {sfOwnerNode, soeREQUIRED}, })) @@ -93,7 +104,7 @@ LEDGER_ENTRY(ltEMITTED_TXN, 'E', EmittedTxn, ({ \sa keylet::hook */ -LEDGER_ENTRY(ltHOOK, 'H', Hook, ({ +LEDGER_ENTRY(ltHOOK, 'H', Hook, hook, ({ {sfAccount, soeOPTIONAL}, {sfOwnerNode, soeREQUIRED}, {sfPreviousTxnID, soeREQUIRED}, @@ -104,7 +115,7 @@ LEDGER_ENTRY(ltHOOK, 'H', Hook, ({ /** The ledger object which records the last (and largest) sequence for a validator list key * as used in the Import amendment */ -LEDGER_ENTRY(ltIMPORT_VLSEQ, 0x0049, ImportVLSequence, ({ +LEDGER_ENTRY(ltIMPORT_VLSEQ, 0x0049, ImportVLSequence, import_vlseq, ({ {sfPublicKey, soeREQUIRED}, {sfImportSequence, soeREQUIRED}, })) @@ -115,7 +126,7 @@ LEDGER_ENTRY(ltIMPORT_VLSEQ, 0x0049, ImportVLSequence, ({ \sa keylet::negativeUNL */ -LEDGER_ENTRY(ltNEGATIVE_UNL, 0x004e, NegativeUNL, ({ +LEDGER_ENTRY(ltNEGATIVE_UNL, 0x004e, NegativeUNL, nunl, ({ {sfDisabledValidators, soeOPTIONAL}, {sfValidatorToDisable, soeOPTIONAL}, {sfValidatorToReEnable, soeOPTIONAL}, @@ -127,7 +138,7 @@ LEDGER_ENTRY(ltNEGATIVE_UNL, 0x004e, NegativeUNL, ({ \sa keylet::nftpage_min, keylet::nftpage_max, keylet::nftpage */ -LEDGER_ENTRY(ltNFTOKEN_PAGE, 0x0050, NFTokenPage, ({ +LEDGER_ENTRY(ltNFTOKEN_PAGE, 0x0050, NFTokenPage, nft_page, ({ {sfPreviousPageMin, soeOPTIONAL}, {sfNextPageMin, soeOPTIONAL}, {sfNFTokens, soeREQUIRED}, @@ -140,7 +151,7 @@ LEDGER_ENTRY(ltNFTOKEN_PAGE, 0x0050, NFTokenPage, ({ * * \sa keylet::UNLReport */ -LEDGER_ENTRY(ltUNL_REPORT, 0x0052, UNLReport, ({ +LEDGER_ENTRY_DUPLICATE(ltUNL_REPORT, 0x0052, UNLReport, unl_report, ({ {sfImportVLKeys, soeOPTIONAL}, {sfActiveValidators, soeOPTIONAL}, {sfPreviousTxnID, soeREQUIRED}, @@ -153,7 +164,7 @@ LEDGER_ENTRY(ltUNL_REPORT, 0x0052, UNLReport, ({ */ // 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, ({ +LEDGER_ENTRY(ltSIGNER_LIST, 0x0053, SignerList, signer_list, ({ {sfOwnerNode, soeREQUIRED}, {sfSignerQuorum, soeREQUIRED}, {sfSignerEntries, soeREQUIRED}, @@ -166,7 +177,7 @@ LEDGER_ENTRY(ltSIGNER_LIST, 0x0053, SignerList, ({ \sa keylet::ticket */ -LEDGER_ENTRY(ltTICKET, 0x0054, Ticket, ({ +LEDGER_ENTRY(ltTICKET, 0x0054, Ticket, ticket, ({ {sfAccount, soeREQUIRED}, {sfOwnerNode, soeREQUIRED}, {sfTicketSequence, soeREQUIRED}, @@ -178,7 +189,7 @@ LEDGER_ENTRY(ltTICKET, 0x0054, Ticket, ({ \sa keylet::uritoken */ -LEDGER_ENTRY(ltURI_TOKEN, 0x0055, URIToken, ({ +LEDGER_ENTRY(ltURI_TOKEN, 0x0055, URIToken, uri_token, ({ {sfOwner, soeREQUIRED}, {sfOwnerNode, soeREQUIRED}, {sfIssuer, soeREQUIRED}, @@ -194,7 +205,7 @@ LEDGER_ENTRY(ltURI_TOKEN, 0x0055, URIToken, ({ \sa keylet::account */ -LEDGER_ENTRY(ltACCOUNT_ROOT, 0x0061, AccountRoot, ({ +LEDGER_ENTRY(ltACCOUNT_ROOT, 0x0061, AccountRoot, account, ({ {sfAccount, soeREQUIRED}, {sfSequence, soeREQUIRED}, {sfBalance, soeREQUIRED}, @@ -234,7 +245,7 @@ LEDGER_ENTRY(ltACCOUNT_ROOT, 0x0061, AccountRoot, ({ \sa keylet::page, keylet::quality, keylet::book, keylet::next and keylet::ownerDir */ -LEDGER_ENTRY(ltDIR_NODE, 0x0064, DirectoryNode, ({ +LEDGER_ENTRY(ltDIR_NODE, 0x0064, DirectoryNode, directory, ({ {sfOwner, soeOPTIONAL}, // for owner directories {sfTakerPaysCurrency, soeOPTIONAL}, // order book directories {sfTakerPaysIssuer, soeOPTIONAL}, // order book directories @@ -257,7 +268,7 @@ LEDGER_ENTRY(ltDIR_NODE, 0x0064, DirectoryNode, ({ \sa keylet::amendments */ -LEDGER_ENTRY(ltAMENDMENTS, 0x0066, Amendments, ({ +LEDGER_ENTRY(ltAMENDMENTS, 0x0066, Amendments, amendments, ({ {sfAmendments, soeOPTIONAL}, // Enabled {sfMajorities, soeOPTIONAL}, {sfPreviousTxnID, soeOPTIONAL}, @@ -272,7 +283,7 @@ LEDGER_ENTRY(ltAMENDMENTS, 0x0066, Amendments, ({ \sa keylet::skip */ -LEDGER_ENTRY(ltLEDGER_HASHES, 0x0068, LedgerHashes, ({ +LEDGER_ENTRY(ltLEDGER_HASHES, 0x0068, LedgerHashes, hashes, ({ {sfFirstLedgerSequence, soeOPTIONAL}, {sfLastLedgerSequence, soeOPTIONAL}, {sfHashes, soeREQUIRED}, @@ -282,7 +293,7 @@ LEDGER_ENTRY(ltLEDGER_HASHES, 0x0068, LedgerHashes, ({ \sa keylet::bridge */ -LEDGER_ENTRY(ltBRIDGE, 0x0069, Bridge, ({ +LEDGER_ENTRY(ltBRIDGE, 0x0069, Bridge, bridge, ({ {sfAccount, soeREQUIRED}, {sfSignatureReward, soeREQUIRED}, {sfMinAccountCreateAmount, soeOPTIONAL}, @@ -299,7 +310,7 @@ LEDGER_ENTRY(ltBRIDGE, 0x0069, Bridge, ({ \sa keylet::offer */ -LEDGER_ENTRY(ltOFFER, 0x006f, Offer, ({ +LEDGER_ENTRY(ltOFFER, 0x006f, Offer, offer, ({ {sfAccount, soeREQUIRED}, {sfSequence, soeREQUIRED}, {sfTakerPays, soeREQUIRED}, @@ -316,7 +327,7 @@ LEDGER_ENTRY(ltOFFER, 0x006f, Offer, ({ \sa keylet::depositPreauth */ -LEDGER_ENTRY(ltDEPOSIT_PREAUTH, 0x0070, DepositPreauth, ({ +LEDGER_ENTRY_DUPLICATE(ltDEPOSIT_PREAUTH, 0x0070, DepositPreauth, deposit_preauth, ({ {sfAccount, soeREQUIRED}, {sfAuthorize, soeOPTIONAL}, {sfOwnerNode, soeREQUIRED}, @@ -329,7 +340,7 @@ LEDGER_ENTRY(ltDEPOSIT_PREAUTH, 0x0070, DepositPreauth, ({ \sa keylet::xChainClaimID */ -LEDGER_ENTRY(ltXCHAIN_OWNED_CLAIM_ID, 0x0071, XChainOwnedClaimID, ({ +LEDGER_ENTRY(ltXCHAIN_OWNED_CLAIM_ID, 0x0071, XChainOwnedClaimID, xchain_owned_claim_id, ({ {sfAccount, soeREQUIRED}, {sfXChainBridge, soeREQUIRED}, {sfXChainClaimID, soeREQUIRED}, @@ -347,7 +358,7 @@ LEDGER_ENTRY(ltXCHAIN_OWNED_CLAIM_ID, 0x0071, XChainOwnedClaimID, ({ \sa keylet::line */ -LEDGER_ENTRY(ltRIPPLE_STATE, 0x0072, RippleState, ({ +LEDGER_ENTRY(ltRIPPLE_STATE, 0x0072, RippleState, state, ({ {sfBalance, soeREQUIRED}, {sfLowLimit, soeREQUIRED}, {sfHighLimit, soeREQUIRED}, @@ -369,7 +380,7 @@ LEDGER_ENTRY(ltRIPPLE_STATE, 0x0072, RippleState, ({ \sa keylet::fees */ -LEDGER_ENTRY(ltFEE_SETTINGS, 0x0073, FeeSettings, ({ +LEDGER_ENTRY(ltFEE_SETTINGS, 0x0073, FeeSettings, fee, ({ // Old version uses raw numbers {sfBaseFee, soeOPTIONAL}, {sfReferenceFeeUnits, soeOPTIONAL}, @@ -390,7 +401,7 @@ LEDGER_ENTRY(ltFEE_SETTINGS, 0x0073, FeeSettings, ({ \sa keylet::xChainCreateAccountClaimID */ -LEDGER_ENTRY(ltXCHAIN_OWNED_CREATE_ACCOUNT_CLAIM_ID, 0x0074, XChainOwnedCreateAccountClaimID, ({ +LEDGER_ENTRY(ltXCHAIN_OWNED_CREATE_ACCOUNT_CLAIM_ID, 0x0074, XChainOwnedCreateAccountClaimID, xchain_owned_create_account_claim_id, ({ {sfAccount, soeREQUIRED}, {sfXChainBridge, soeREQUIRED}, {sfXChainAccountCreateCount, soeREQUIRED}, @@ -404,7 +415,7 @@ LEDGER_ENTRY(ltXCHAIN_OWNED_CREATE_ACCOUNT_CLAIM_ID, 0x0074, XChainOwnedCreateAc \sa keylet::escrow */ -LEDGER_ENTRY(ltESCROW, 0x0075, Escrow, ({ +LEDGER_ENTRY(ltESCROW, 0x0075, Escrow, escrow, ({ {sfAccount, soeREQUIRED}, {sfDestination, soeREQUIRED}, {sfAmount, soeREQUIRED}, @@ -424,7 +435,7 @@ LEDGER_ENTRY(ltESCROW, 0x0075, Escrow, ({ \sa keylet::hookState */ -LEDGER_ENTRY(ltHOOK_STATE, 0x0076, HookState, ({ +LEDGER_ENTRY(ltHOOK_STATE, 0x0076, HookState, hook_state, ({ {sfOwnerNode, soeREQUIRED}, {sfHookStateKey, soeREQUIRED}, {sfHookStateData, soeREQUIRED}, @@ -434,7 +445,7 @@ LEDGER_ENTRY(ltHOOK_STATE, 0x0076, HookState, ({ \sa keylet::payChan */ -LEDGER_ENTRY(ltPAYCHAN, 0x0078, PayChannel, ({ +LEDGER_ENTRY(ltPAYCHAN, 0x0078, PayChannel, payment_channel, ({ {sfAccount, soeREQUIRED}, {sfDestination, soeREQUIRED}, {sfAmount, soeREQUIRED}, @@ -456,7 +467,7 @@ LEDGER_ENTRY(ltPAYCHAN, 0x0078, PayChannel, ({ \sa keylet::amm */ -LEDGER_ENTRY(ltAMM, 0x0079, AMM, ({ +LEDGER_ENTRY(ltAMM, 0x0079, AMM, amm, ({ {sfAccount, soeREQUIRED}, {sfTradingFee, soeDEFAULT}, {sfVoteSlots, soeOPTIONAL}, @@ -472,7 +483,7 @@ LEDGER_ENTRY(ltAMM, 0x0079, AMM, ({ /** A ledger object which tracks Oracle \sa keylet::oracle */ -LEDGER_ENTRY(ltORACLE, 0x0080, Oracle, ({ +LEDGER_ENTRY(ltORACLE, 0x0080, Oracle, oracle, ({ {sfOwner, soeREQUIRED}, {sfProvider, soeREQUIRED}, {sfPriceDataSeries, soeREQUIRED}, @@ -487,7 +498,7 @@ LEDGER_ENTRY(ltORACLE, 0x0080, Oracle, ({ /** A ledger object which tracks MPTokenIssuance \sa keylet::mptIssuance */ -LEDGER_ENTRY(ltMPTOKEN_ISSUANCE, 0x007e, MPTokenIssuance, ({ +LEDGER_ENTRY(ltMPTOKEN_ISSUANCE, 0x007e, MPTokenIssuance, mpt_issuance, ({ {sfIssuer, soeREQUIRED}, {sfSequence, soeREQUIRED}, {sfTransferFee, soeDEFAULT}, @@ -503,7 +514,7 @@ LEDGER_ENTRY(ltMPTOKEN_ISSUANCE, 0x007e, MPTokenIssuance, ({ /** A ledger object which tracks MPToken \sa keylet::mptoken */ -LEDGER_ENTRY(ltMPTOKEN, 0x007f, MPToken, ({ +LEDGER_ENTRY(ltMPTOKEN, 0x007f, MPToken, mptoken, ({ {sfAccount, soeREQUIRED}, {sfMPTokenIssuanceID, soeREQUIRED}, {sfMPTAmount, soeDEFAULT}, @@ -515,7 +526,7 @@ LEDGER_ENTRY(ltMPTOKEN, 0x007f, MPToken, ({ /** A ledger object which tracks Credential \sa keylet::credential */ -LEDGER_ENTRY(ltCREDENTIAL, 0x0081, Credential, ({ +LEDGER_ENTRY(ltCREDENTIAL, 0x0081, Credential, credential, ({ {sfSubject, soeREQUIRED}, {sfIssuer, soeREQUIRED}, {sfCredentialType, soeREQUIRED}, @@ -531,7 +542,7 @@ LEDGER_ENTRY(ltCREDENTIAL, 0x0081, Credential, ({ \sa keylet::did */ -LEDGER_ENTRY(ltDID, 0x008D, DID, ({ +LEDGER_ENTRY(ltDID, 0x008D, DID, did, ({ {sfAccount, soeREQUIRED}, {sfDIDDocument, soeOPTIONAL}, {sfURI, soeOPTIONAL}, @@ -540,3 +551,6 @@ LEDGER_ENTRY(ltDID, 0x008D, DID, ({ {sfPreviousTxnID, soeREQUIRED}, {sfPreviousTxnLgrSeq, soeREQUIRED}, })) + +#undef EXPAND +#undef LEDGER_ENTRY_DUPLICATE diff --git a/include/xrpl/protocol/jss.h b/include/xrpl/protocol/jss.h index 2fa88ba8b..fefd75996 100644 --- a/include/xrpl/protocol/jss.h +++ b/include/xrpl/protocol/jss.h @@ -45,10 +45,7 @@ namespace jss { JSS(AL_size); // out: GetCounts JSS(AL_hit_rate); // out: GetCounts JSS(Account); // in: TransactionSign; field. -JSS(AccountRoot); // ledger type. -JSS(AMM); // ledger type JSS(AMMID); // field -JSS(Amendments); // ledger type. JSS(Amount); // in: TransactionSign; field. JSS(Authorize); // field JSS(Amount2); // in/out: AMM IOU/XRP pool, deposit, withdraw amount @@ -62,20 +59,13 @@ JSS(BaseAsset); // in: Oracle JSS(BidMax); // in: AMM Bid JSS(BidMin); // in: AMM Bid JSS(Blob); -JSS(Bridge); // ledger type. -JSS(Check); // ledger type. JSS(ClearFlag); // field. JSS(CreateCode); // field. -JSS(Credential); // ledger type. -JSS(DID); // ledger type. JSS(DeliverMax); // out: alias to Amount JSS(DeliverMin); // in: TransactionSign JSS(Destination); // in: TransactionSign; field. -JSS(DirectoryNode); // ledger type. JSS(EPrice); // in: AMM Deposit option -JSS(Escrow); // ledger type. JSS(Fee); // in/out: TransactionSign; field. -JSS(FeeSettings); // ledger type. JSS(FIELDS); // out: RPC server_definitions JSS(Flags); // in/out: TransactionSign; field. JSS(GenesisMints); @@ -100,64 +90,44 @@ JSS(isSigningField); // out: RPC server_definitions // matches definitions.json format JSS(isVLEncoded); // out: RPC server_definitions // matches definitions.json format -JSS(ImportVLSequence); JSS(Invalid); // JSS(Issuer); // in: Credential transactions JSS(InvoiceID); // field JSS(LastLedgerSequence); // in: TransactionSign; field JSS(LastUpdateTime); // field. -JSS(LedgerHashes); // ledger type. JSS(LimitAmount); // field. -JSS(MPToken); // ledger type. -JSS(MPTokenIssuance); // ledger type. JSS(NetworkID); // field. -JSS(NFTokenOffer); // ledger type. -JSS(NFTokenPage); // ledger type. JSS(LPTokenOut); // in: AMM Liquidity Provider deposit tokens JSS(LPTokenIn); // in: AMM Liquidity Provider withdraw tokens JSS(LPToken); // out: AMM Liquidity Provider tokens info -JSS(Offer); // ledger type. JSS(OfferSequence); // field. -JSS(Oracle); // ledger type. JSS(OracleDocumentID); // field JSS(Owner); // field JSS(Paths); // in/out: TransactionSign -JSS(PayChannel); // ledger type. JSS(PriceDataSeries); // field. JSS(PriceData); // field. JSS(Provider); // field. JSS(QuoteAsset); // in: Oracle. -JSS(RippleState); // ledger type. JSS(SLE_hit_rate); // out: GetCounts. JSS(Scale); // field. JSS(SettleDelay); // in: TransactionSign JSS(SendMax); // in: TransactionSign JSS(Sequence); // in/out: TransactionSign; field. JSS(SetFlag); // field. -JSS(Hook); // ledger type. -JSS(HookDefinition); // ledger type. -JSS(HookState); // ledger type. JSS(HookStateData); // field. JSS(HookStateKey); // field. -JSS(EmittedTxn); // ledger type. -JSS(SignerList); // ledger type. JSS(SigningPubKey); // field. JSS(Subject); // in: Credential transactions JSS(TakerGets); // field. JSS(TakerPays); // field. -JSS(Ticket); // ledger type. JSS(TxnSignature); // field. JSS(TradingFee); // in/out: AMM trading fee JSS(TransactionType); // in: TransactionSign. JSS(TransferRate); // in: TransferRate. JSS(URI); // field. -JSS(URIToken); // out: LedgerEntry JSS(VoteSlots); // out: AMM Vote -JSS(XChainOwnedClaimID); // ledger type. -JSS(XChainOwnedCreateAccountClaimID); // ledger type. JSS(aborted); // out: InboundLedger JSS(accepted); // out: LedgerToJson, OwnerInfo, SubmitTransaction -JSS(account); // in/out: many JSS(accountState); // out: LedgerToJson JSS(accountTreeHash); // out: ledger/Ledger.cpp JSS(account_data); // out: AccountInfo @@ -186,8 +156,6 @@ 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 @@ -229,7 +197,6 @@ 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 @@ -237,14 +204,11 @@ JSS(bytes_written); 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 @@ -273,7 +237,6 @@ JSS(converge_time_s); // out: NetworkOPs JSS(cookie); // out: NetworkOPs JSS(count); // in: AccountTx*, ValidatorList JSS(counters); // in/out: retrieve counters -JSS(credential); // in: LedgerEntry Credential JSS(credentials); // in: deposit_authorized JSS(credential_type); // in: LedgerEntry DepositPreauth JSS(coins); @@ -299,7 +262,6 @@ JSS(debug_signing); // in: TransactionSign JSS(deletion_blockers_only); // in: AccountObjects JSS(delivered_amount); // out: insertDeliveredAmount JSS(deposit_authorized); // out: deposit_authorized -JSS(deposit_preauth); // in: AccountObjects, LedgerData JSS(deprecated); // out JSS(descending); // in: AccountTx* JSS(description); // in/out: Reservations @@ -311,11 +273,9 @@ JSS(destination_currencies); // in: PathRequest, RipplePathFind JSS(destination_tag); // in: PathRequest // out: AccountChannels JSS(details); // out: Manifest, server_info -JSS(did); // in: LedgerEntry JSS(dir_entry); // out: DirectoryEntryIterator JSS(dir_index); // out: DirectoryEntryIterator JSS(dir_root); // out: DirectoryEntryIterator -JSS(directory); // in: LedgerEntry JSS(discounted_fee); // out: amm_info JSS(domain); // out: ValidatorInfo, Manifest JSS(drops); // out: TxQ @@ -335,9 +295,7 @@ JSS(errored); JSS(error_code); // out: error JSS(error_exception); // out: Submit JSS(error_message); // out: error -JSS(escrow); // in: LedgerEntry JSS(estimated_time_remaining); -JSS(emitted_txn); // in: LedgerEntry JSS(expand); // in: handler/Ledger JSS(expected_date); // out: any (warnings) JSS(expected_date_UTC); // out: any (warnings) @@ -349,7 +307,6 @@ JSS(failed); // out: InboundLedger JSS(failed_ledgers); // out: catalogue 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_hooks_feeunits); // out: Fee rpc call @@ -378,7 +335,6 @@ JSS(good); // out: RPCVersion JSS(hash); // out: NetworkOPs, InboundLedger, JSS(hash_mismatches); // out: catalogue // LedgerToJson, STTx; field -JSS(hashes); // in: AccountObjects JSS(have_header); // out: InboundLedger JSS(have_state); // out: InboundLedger JSS(have_transactions); // out: InboundLedger @@ -387,9 +343,6 @@ JSS(highest_sequence); // out: AccountInfo JSS(highest_ticket); // out: AccountInfo JSS(historical_perminute); // historical_perminute. JSS(holders); // out: MPTHolders -JSS(hook); // in: LedgerEntry -JSS(hook_definition); // in: LedgerEntry -JSS(hook_state); // in: LedgerEntry JSS(hostid); // out: NetworkOPs JSS(hotwallet); // in: GatewayBalances JSS(id); // websocket. @@ -397,7 +350,6 @@ JSS(ident); // in: AccountCurrencies, AccountInfo, // OwnerInfo JSS(ignore_default); // in: AccountLines JSS(ignore_hash); -JSS(import_vlseq); // in: LedgerEntry JSS(imported); // out: catalogue JSS(inLedger); // out: tx/Transaction JSS(in_queue); @@ -533,9 +485,7 @@ 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 @@ -558,9 +508,7 @@ 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 @@ -569,7 +517,6 @@ 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 @@ -586,7 +533,6 @@ JSS(paths_canonical); // out: RipplePathFind JSS(paths_computed); // out: PathRequest, RipplePathFind JSS(output_file); // in: CatalogueCreate JSS(input_file); // in: CatalogueLoad -JSS(payment_channel); // in: LedgerEntry JSS(pclose); JSS(peer); // in: AccountLines JSS(peer_authorized); // out: AccountLines @@ -677,7 +623,6 @@ 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 @@ -690,7 +635,6 @@ JSS(standard_deviation); // out: get_aggregate_price JSS(start); // in: TxHistory JSS(start_time); JSS(started); -JSS(state); // out: Logic.h, ServerState, LedgerData JSS(state_accounting); // out: NetworkOPs JSS(state_now); // in: Subscribe JSS(status); // error @@ -712,7 +656,6 @@ 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); @@ -779,10 +722,8 @@ JSS(TRANSACTION_FLAGS_INDICES); // out: RPC server_definitions JSS(type_hex); // out: STPathSet JSS(unl); // out: UnlList JSS(unlimited); // out: Connection.h -JSS(unl_report); // in: LedgerEntry JSS(uptime); // out: GetCounts JSS(uri); // out: ValidatorSites -JSS(uri_token); // in: LedgerEntry JSS(url); // in/out: Subscribe, Unsubscribe JSS(url_password); // in: Subscribe JSS(url_username); // in: Subscribe @@ -817,9 +758,6 @@ 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(xchain_owned_create_account_claim_id); // in: LedgerEntry -JSS(NegativeUNL); // out: ValidatorList; ledger type // clang-format on #pragma push_macro("TRANSACTION") @@ -832,6 +770,24 @@ JSS(NegativeUNL); // out: ValidatorList; ledger type #undef TRANSACTION #pragma pop_macro("TRANSACTION") +#pragma push_macro("LEDGER_ENTRY") +#undef LEDGER_ENTRY +#pragma push_macro("LEDGER_ENTRY_DUPLICATE") +#undef LEDGER_ENTRY_DUPLICATE + +#define LEDGER_ENTRY(tag, value, name, rpcName, fields) \ + JSS(name); \ + JSS(rpcName); + +#define LEDGER_ENTRY_DUPLICATE(tag, value, name, rpcName, fields) JSS(rpcName); + +#include + +#undef LEDGER_ENTRY +#pragma pop_macro("LEDGER_ENTRY") +#undef LEDGER_ENTRY_DUPLICATE +#pragma pop_macro("LEDGER_ENTRY_DUPLICATE") + #undef JSS } // namespace jss diff --git a/src/libxrpl/protocol/LedgerFormats.cpp b/src/libxrpl/protocol/LedgerFormats.cpp index 95f6c6081..e7e057b77 100644 --- a/src/libxrpl/protocol/LedgerFormats.cpp +++ b/src/libxrpl/protocol/LedgerFormats.cpp @@ -39,7 +39,7 @@ LedgerFormats::LedgerFormats() #undef LEDGER_ENTRY #define UNWRAP(...) __VA_ARGS__ -#define LEDGER_ENTRY(tag, value, name, fields) \ +#define LEDGER_ENTRY(tag, value, name, rpcName, fields) \ add(jss::name, tag, UNWRAP fields, commonFields); #include diff --git a/src/xrpld/rpc/detail/RPCHelpers.cpp b/src/xrpld/rpc/detail/RPCHelpers.cpp index d3e17d36f..5717e47a6 100644 --- a/src/xrpld/rpc/detail/RPCHelpers.cpp +++ b/src/xrpld/rpc/detail/RPCHelpers.cpp @@ -1058,41 +1058,18 @@ chooseLedgerEntryType(Json::Value const& params) std::pair result{RPC::Status::OK, ltANY}; if (params.isMember(jss::type)) { - static constexpr std::array, 32> - types{ - {{jss::account, ltACCOUNT_ROOT}, - {jss::amendments, ltAMENDMENTS}, - {jss::amm, ltAMM}, - {jss::bridge, ltBRIDGE}, - {jss::check, ltCHECK}, - {jss::credential, ltCREDENTIAL}, - {jss::deposit_preauth, ltDEPOSIT_PREAUTH}, - {jss::did, ltDID}, - {jss::directory, ltDIR_NODE}, - {jss::escrow, ltESCROW}, - {jss::emitted_txn, ltEMITTED_TXN}, - {jss::hook, ltHOOK}, - {jss::hook_definition, ltHOOK_DEFINITION}, - {jss::hook_state, ltHOOK_STATE}, - {jss::fee, ltFEE_SETTINGS}, - {jss::hashes, ltLEDGER_HASHES}, - {jss::import_vlseq, ltIMPORT_VLSEQ}, - {jss::mpt_issuance, ltMPTOKEN_ISSUANCE}, - {jss::mptoken, ltMPTOKEN}, - {jss::nft_offer, ltNFTOKEN_OFFER}, - {jss::nft_page, ltNFTOKEN_PAGE}, - {jss::nunl, ltNEGATIVE_UNL}, - {jss::offer, ltOFFER}, - {jss::oracle, ltORACLE}, - {jss::payment_channel, ltPAYCHAN}, - {jss::signer_list, ltSIGNER_LIST}, - {jss::state, ltRIPPLE_STATE}, - {jss::ticket, ltTICKET}, - {jss::uri_token, ltURI_TOKEN}, - {jss::unl_report, ltUNL_REPORT}, - {jss::xchain_owned_claim_id, ltXCHAIN_OWNED_CLAIM_ID}, - {jss::xchain_owned_create_account_claim_id, - ltXCHAIN_OWNED_CREATE_ACCOUNT_CLAIM_ID}}}; + static constexpr auto types = + std::to_array>({ +#pragma push_macro("LEDGER_ENTRY") +#undef LEDGER_ENTRY + +#define LEDGER_ENTRY(tag, value, name, rpcName, fields) {jss::rpcName, tag}, + +#include + +#undef LEDGER_ENTRY +#pragma pop_macro("LEDGER_ENTRY") + }); auto const& p = params[jss::type]; if (!p.isString())