rippled
LedgerFormats.cpp
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012, 2013 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #include <ripple/protocol/LedgerFormats.h>
21 #include <ripple/protocol/jss.h>
22 #include <utility>
23 
24 namespace ripple {
25 
27 {
28  // clang-format off
29  // Fields shared by all ledger formats:
30  static const std::initializer_list<SOElement> commonFields{
34  };
35 
36  add(jss::AccountRoot,
38  {
60  },
61  commonFields);
62 
63  add(jss::DirectoryNode,
64  ltDIR_NODE,
65  {
66  {sfOwner, soeOPTIONAL}, // for owner directories
67  {sfTakerPaysCurrency, soeOPTIONAL}, // order book directories
68  {sfTakerPaysIssuer, soeOPTIONAL}, // order book directories
69  {sfTakerGetsCurrency, soeOPTIONAL}, // order book directories
70  {sfTakerGetsIssuer, soeOPTIONAL}, // order book directories
71  {sfExchangeRate, soeOPTIONAL}, // order book directories
77  },
78  commonFields);
79 
80  add(jss::Offer,
81  ltOFFER,
82  {
93  },
94  commonFields);
95 
96  add(jss::RippleState,
98  {
110  },
111  commonFields);
112 
113  add(jss::Escrow,
114  ltESCROW,
115  {
128  },
129  commonFields);
130 
131  add(jss::LedgerHashes,
133  {
137  },
138  commonFields);
139 
140  add(jss::Amendments,
141  ltAMENDMENTS,
142  {
143  {sfAmendments, soeOPTIONAL}, // Enabled
145  },
146  commonFields);
147 
148  add(jss::FeeSettings,
150  {
151  // Old version uses raw numbers
156  // New version uses Amounts
160  },
161  commonFields);
162 
163  add(jss::Ticket,
164  ltTICKET,
165  {
171  },
172  commonFields);
173 
174  // All fields are soeREQUIRED because there is always a
175  // SignerEntries. If there are no SignerEntries the node is deleted.
176  add(jss::SignerList,
178  {
185  },
186  commonFields);
187 
188  add(jss::PayChannel,
189  ltPAYCHAN,
190  {
205  },
206  commonFields);
207 
208  add(jss::Check,
209  ltCHECK,
210  {
223  },
224  commonFields);
225 
226  add(jss::DepositPreauth,
228  {
234  },
235  commonFields);
236 
237  add(jss::NegativeUNL,
239  {
243  },
244  commonFields);
245 
246  add(jss::NFTokenPage,
248  {
254  },
255  commonFields);
256 
257  add(jss::NFTokenOffer,
259  {
260  {sfOwner, soeREQUIRED},
269  },
270  commonFields);
271 
272  add(jss::AMM,
273  ltAMM,
274  {
280  {sfAsset, soeREQUIRED},
283  },
284  commonFields);
285 
286  add(jss::Bridge,
287  ltBRIDGE,
288  {
299  },
300  commonFields);
301 
302  add(jss::XChainOwnedClaimID,
304  {
314  },
315  commonFields);
316 
317  add(jss::XChainOwnedCreateAccountClaimID,
319  {
327  },
328  commonFields);
329 
330  add(jss::DID,
331  ltDID,
332  {
335  {sfURI, soeOPTIONAL},
336  {sfData, soeOPTIONAL},
340  },
341  commonFields);
342  // clang-format on
343 }
344 
345 LedgerFormats const&
347 {
348  static LedgerFormats instance;
349  return instance;
350 }
351 
352 } // namespace ripple
ripple::sfIndexNext
const SF_UINT64 sfIndexNext
ripple::sfSignerListID
const SF_UINT32 sfSignerListID
ripple::sfHighQualityIn
const SF_UINT32 sfHighQualityIn
ripple::sfPreviousTxnLgrSeq
const SF_UINT32 sfPreviousTxnLgrSeq
ripple::sfOwnerCount
const SF_UINT32 sfOwnerCount
ripple::sfFirstNFTokenSequence
const SF_UINT32 sfFirstNFTokenSequence
ripple::sfSourceTag
const SF_UINT32 sfSourceTag
ripple::sfRootIndex
const SF_UINT256 sfRootIndex
ripple::ltTICKET
@ ltTICKET
A ledger object which describes a ticket.
Definition: LedgerFormats.h:80
ripple::sfBaseFeeDrops
const SF_AMOUNT sfBaseFeeDrops
ripple::sfReserveBase
const SF_UINT32 sfReserveBase
ripple::sfAsset
const SF_ISSUE sfAsset
ripple::sfSendMax
const SF_AMOUNT sfSendMax
utility
ripple::sfOwnerNode
const SF_UINT64 sfOwnerNode
ripple::sfDestination
const SF_ACCOUNT sfDestination
ripple::sfAmount
const SF_AMOUNT sfAmount
ripple::sfNFTokenID
const SF_UINT256 sfNFTokenID
ripple::ltLEDGER_HASHES
@ ltLEDGER_HASHES
A ledger object that contains a list of ledger hashes.
Definition: LedgerFormats.h:109
ripple::sfWalletSize
const SF_UINT32 sfWalletSize
ripple::sfFirstLedgerSequence
const SF_UINT32 sfFirstLedgerSequence
ripple::sfVoteSlots
const SField sfVoteSlots
ripple::sfOwner
const SF_ACCOUNT sfOwner
ripple::sfSequence
const SF_UINT32 sfSequence
ripple::sfRegularKey
const SF_ACCOUNT sfRegularKey
ripple::sfLPTokenBalance
const SF_AMOUNT sfLPTokenBalance
ripple::sfBookDirectory
const SF_UINT256 sfBookDirectory
ripple::sfTakerPaysCurrency
const SF_UINT160 sfTakerPaysCurrency
ripple::sfLedgerIndex
const SF_UINT256 sfLedgerIndex
ripple::ltSIGNER_LIST
@ ltSIGNER_LIST
A ledger object which contains a signer list for an account.
Definition: LedgerFormats.h:86
ripple::sfMintedNFTokens
const SF_UINT32 sfMintedNFTokens
ripple::sfOtherChainSource
const SF_ACCOUNT sfOtherChainSource
ripple::soeREQUIRED
@ soeREQUIRED
Definition: SOTemplate.h:35
ripple::sfTicketSequence
const SF_UINT32 sfTicketSequence
ripple::ltCHECK
@ ltCHECK
A ledger object which describes a check.
Definition: LedgerFormats.h:155
ripple::ltFEE_SETTINGS
@ ltFEE_SETTINGS
The ledger object which lists the network's fee settings.
Definition: LedgerFormats.h:137
ripple::sfXChainAccountClaimCount
const SF_UINT64 sfXChainAccountClaimCount
ripple::sfTakerGetsCurrency
const SF_UINT160 sfTakerGetsCurrency
ripple::sfNFTokenOfferNode
const SF_UINT64 sfNFTokenOfferNode
ripple::sfTradingFee
const SF_UINT16 sfTradingFee
ripple::sfXChainClaimID
const SF_UINT64 sfXChainClaimID
ripple::ltDIR_NODE
@ ltDIR_NODE
A ledger object which contains a list of object identifiers.
Definition: LedgerFormats.h:66
ripple::sfExpiration
const SF_UINT32 sfExpiration
ripple::sfSignerQuorum
const SF_UINT32 sfSignerQuorum
ripple::sfIndexes
const SF_VECTOR256 sfIndexes
ripple::sfTakerGetsIssuer
const SF_UINT160 sfTakerGetsIssuer
ripple::sfLowNode
const SF_UINT64 sfLowNode
ripple::sfTakerPays
const SF_AMOUNT sfTakerPays
ripple::ltAMENDMENTS
@ ltAMENDMENTS
The ledger object which lists details about amendments on the network.
Definition: LedgerFormats.h:117
ripple::sfLowQualityOut
const SF_UINT32 sfLowQualityOut
ripple::sfLowLimit
const SF_AMOUNT sfLowLimit
ripple::ltOFFER
@ ltOFFER
A ledger object which describes an offer on the DEX.
Definition: LedgerFormats.h:92
ripple::sfAsset2
const SF_ISSUE sfAsset2
ripple::sfSettleDelay
const SF_UINT32 sfSettleDelay
ripple::sfSignatureReward
const SF_AMOUNT sfSignatureReward
ripple::sfNFTokenMinter
const SF_ACCOUNT sfNFTokenMinter
ripple::ltESCROW
@ ltESCROW
A ledger object describing a single escrow.
Definition: LedgerFormats.h:143
ripple::ltDID
@ ltDID
The ledger object which tracks the DID.
Definition: LedgerFormats.h:193
ripple::sfXChainClaimAttestations
const SField sfXChainClaimAttestations
ripple::sfReserveIncrement
const SF_UINT32 sfReserveIncrement
ripple::sfIndexPrevious
const SF_UINT64 sfIndexPrevious
ripple::ltNFTOKEN_OFFER
@ ltNFTOKEN_OFFER
A ledger object which identifies an offer to buy or sell an NFT.
Definition: LedgerFormats.h:181
ripple::soeOPTIONAL
@ soeOPTIONAL
Definition: SOTemplate.h:36
ripple::sfBookNode
const SF_UINT64 sfBookNode
ripple::LedgerFormats::LedgerFormats
LedgerFormats()
Create the object.
Definition: LedgerFormats.cpp:26
ripple::sfLowQualityIn
const SF_UINT32 sfLowQualityIn
ripple::sfValidatorToDisable
const SF_VL sfValidatorToDisable
ripple::sfTicketCount
const SF_UINT32 sfTicketCount
ripple::sfAccountTxnID
const SF_UINT256 sfAccountTxnID
ripple::ltDEPOSIT_PREAUTH
@ ltDEPOSIT_PREAUTH
A ledger object which describes a deposit preauthorization.
Definition: LedgerFormats.h:161
ripple::sfDestinationNode
const SF_UINT64 sfDestinationNode
ripple::sfTakerGets
const SF_AMOUNT sfTakerGets
ripple::sfTransferRate
const SF_UINT32 sfTransferRate
ripple::sfTickSize
const SF_UINT8 sfTickSize
ripple::sfPreviousTxnID
const SF_UINT256 sfPreviousTxnID
ripple::sfAuthorize
const SF_ACCOUNT sfAuthorize
ripple::sfHighLimit
const SF_AMOUNT sfHighLimit
ripple::sfExchangeRate
const SF_UINT64 sfExchangeRate
ripple::sfAMMID
const SF_UINT256 sfAMMID
ripple::sfReserveIncrementDrops
const SF_AMOUNT sfReserveIncrementDrops
ripple::sfReserveBaseDrops
const SF_AMOUNT sfReserveBaseDrops
ripple::LedgerFormats::getInstance
static LedgerFormats const & getInstance()
Definition: LedgerFormats.cpp:346
ripple::sfEmailHash
const SF_UINT128 sfEmailHash
ripple::sfNFTokens
const SField sfNFTokens
ripple::sfSignerEntries
const SField sfSignerEntries
ripple::sfBaseFee
const SF_UINT64 sfBaseFee
ripple::sfHashes
const SF_VECTOR256 sfHashes
ripple::sfURI
const SF_VL sfURI
ripple::sfMinAccountCreateAmount
const SF_AMOUNT sfMinAccountCreateAmount
ripple::ltNFTOKEN_PAGE
@ ltNFTOKEN_PAGE
A ledger object which contains a list of NFTs.
Definition: LedgerFormats.h:175
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::ltXCHAIN_OWNED_CREATE_ACCOUNT_CLAIM_ID
@ ltXCHAIN_OWNED_CREATE_ACCOUNT_CLAIM_ID
A claim id for a cross chain create account transaction.
Definition: LedgerFormats.h:129
ripple::sfDIDDocument
const SF_VL sfDIDDocument
ripple::sfWalletLocator
const SF_UINT256 sfWalletLocator
ripple::sfLedgerEntryType
const SF_UINT16 sfLedgerEntryType
ripple::ltBRIDGE
@ ltBRIDGE
The ledger object which lists details about sidechains.
Definition: LedgerFormats.h:99
ripple::ltNEGATIVE_UNL
@ ltNEGATIVE_UNL
The ledger object which tracks the current negative UNL state.
Definition: LedgerFormats.h:169
ripple::sfCondition
const SF_VL sfCondition
ripple::sfTakerPaysIssuer
const SF_UINT160 sfTakerPaysIssuer
ripple::sfInvoiceID
const SF_UINT256 sfInvoiceID
ripple::sfFlags
const SF_UINT32 sfFlags
ripple::ltACCOUNT_ROOT
@ ltACCOUNT_ROOT
A ledger object which describes an account.
Definition: LedgerFormats.h:59
ripple::sfDestinationTag
const SF_UINT32 sfDestinationTag
ripple::sfXChainAccountCreateCount
const SF_UINT64 sfXChainAccountCreateCount
ripple::sfData
const SF_VL sfData
ripple::sfBalance
const SF_AMOUNT sfBalance
ripple::sfReferenceFeeUnits
const SF_UINT32 sfReferenceFeeUnits
ripple::sfNextPageMin
const SF_UINT256 sfNextPageMin
ripple::sfCancelAfter
const SF_UINT32 sfCancelAfter
ripple::sfMessageKey
const SF_VL sfMessageKey
ripple::sfHighQualityOut
const SF_UINT32 sfHighQualityOut
ripple::sfXChainCreateAccountAttestations
const SField sfXChainCreateAccountAttestations
ripple::ltXCHAIN_OWNED_CLAIM_ID
@ ltXCHAIN_OWNED_CLAIM_ID
A claim id for a cross chain transaction.
Definition: LedgerFormats.h:123
ripple::sfPreviousPageMin
const SF_UINT256 sfPreviousPageMin
ripple::LedgerFormats
Holds the list of known ledger entry formats.
Definition: LedgerFormats.h:312
ripple::sfFinishAfter
const SF_UINT32 sfFinishAfter
ripple::sfAccount
const SF_ACCOUNT sfAccount
ripple::ltRIPPLE_STATE
@ ltRIPPLE_STATE
A ledger object which describes a bidirectional trust line.
Definition: LedgerFormats.h:74
ripple::sfDomain
const SF_VL sfDomain
ripple::sfLastLedgerSequence
const SF_UINT32 sfLastLedgerSequence
ripple::sfBurnedNFTokens
const SF_UINT32 sfBurnedNFTokens
ripple::sfMajorities
const SField sfMajorities
ripple::sfAuctionSlot
const SField sfAuctionSlot
ripple::sfXChainBridge
const SF_XCHAIN_BRIDGE sfXChainBridge
ripple::sfDisabledValidators
const SField sfDisabledValidators
ripple::sfPublicKey
const SF_VL sfPublicKey
ripple::sfHighNode
const SF_UINT64 sfHighNode
ripple::ltAMM
@ ltAMM
The ledger object which tracks the AMM.
Definition: LedgerFormats.h:187
ripple::soeDEFAULT
@ soeDEFAULT
Definition: SOTemplate.h:37
ripple::KnownFormats< LedgerEntryType, LedgerFormats >::add
Item const & add(char const *name, LedgerEntryType type, std::initializer_list< SOElement > uniqueFields, std::initializer_list< SOElement > commonFields={})
Add a new format.
Definition: KnownFormats.h:170
ripple::sfAmendments
const SF_VECTOR256 sfAmendments
ripple::ltPAYCHAN
@ ltPAYCHAN
A ledger object describing a single unidirectional XRP payment channel.
Definition: LedgerFormats.h:149
ripple::sfValidatorToReEnable
const SF_VL sfValidatorToReEnable
std::initializer_list