rippled
Indexes.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/Indexes.h>
21 #include <ripple/protocol/LedgerFormats.h>
22 #include <ripple/protocol/SField.h>
23 #include <ripple/protocol/STXChainBridge.h>
24 #include <ripple/protocol/SeqProxy.h>
25 #include <ripple/protocol/digest.h>
26 #include <ripple/protocol/nftPageMask.h>
27 
28 #include <algorithm>
29 #include <cassert>
30 
31 namespace ripple {
32 
51  ACCOUNT = 'a',
52  DIR_NODE = 'd',
53  TRUST_LINE = 'r',
54  OFFER = 'o',
55  OWNER_DIR = 'O',
56  BOOK_DIR = 'B',
57  SKIP_LIST = 's',
58  ESCROW = 'u',
59  AMENDMENTS = 'f',
60  FEE_SETTINGS = 'e',
61  TICKET = 'T',
62  SIGNER_LIST = 'S',
63  XRP_PAYMENT_CHANNEL = 'x',
64  CHECK = 'C',
65  DEPOSIT_PREAUTH = 'p',
66  NEGATIVE_UNL = 'N',
67  NFTOKEN_OFFER = 'q',
68  NFTOKEN_BUY_OFFERS = 'h',
69  NFTOKEN_SELL_OFFERS = 'i',
70  AMM = 'A',
71  BRIDGE = 'H',
72  XCHAIN_CLAIM_ID = 'Q',
74  DID = 'I',
75  ORACLE = 'R',
76 
77  // No longer used or supported. Left here to reserve the space
78  // to avoid accidental reuse.
79  CONTRACT [[deprecated]] = 'c',
80  GENERATOR [[deprecated]] = 'g',
81  NICKNAME [[deprecated]] = 'n',
82 };
83 
84 template <class... Args>
85 static uint256
86 indexHash(LedgerNameSpace space, Args const&... args)
87 {
88  return sha512Half(safe_cast<std::uint16_t>(space), args...);
89 }
90 
91 uint256
92 getBookBase(Book const& book)
93 {
94  assert(isConsistent(book));
95 
96  auto const index = indexHash(
98  book.in.currency,
99  book.out.currency,
100  book.in.account,
101  book.out.account);
102 
103  // Return with quality 0.
104  auto k = keylet::quality({ltDIR_NODE, index}, 0);
105 
106  return k.key;
107 }
108 
109 uint256
110 getQualityNext(uint256 const& uBase)
111 {
112  static constexpr uint256 nextq(
113  "0000000000000000000000000000000000000000000000010000000000000000");
114  return uBase + nextq;
115 }
116 
118 getQuality(uint256 const& uBase)
119 {
120  // VFALCO [base_uint] This assumes a certain storage format
121  return boost::endian::big_to_native(((std::uint64_t*)uBase.end())[-1]);
122 }
123 
124 uint256
125 getTicketIndex(AccountID const& account, std::uint32_t ticketSeq)
126 {
127  return indexHash(
128  LedgerNameSpace::TICKET, account, std::uint32_t(ticketSeq));
129 }
130 
131 uint256
132 getTicketIndex(AccountID const& account, SeqProxy ticketSeq)
133 {
134  assert(ticketSeq.isTicket());
135  return getTicketIndex(account, ticketSeq.value());
136 }
137 
138 //------------------------------------------------------------------------------
139 
140 namespace keylet {
141 
142 Keylet
143 account(AccountID const& id) noexcept
144 {
146 }
147 
148 Keylet
149 child(uint256 const& key) noexcept
150 {
151  return {ltCHILD, key};
152 }
153 
154 Keylet const&
155 skip() noexcept
156 {
157  static Keylet const ret{
159  return ret;
160 }
161 
162 Keylet
163 skip(LedgerIndex ledger) noexcept
164 {
165  return {
167  indexHash(
169  std::uint32_t(static_cast<std::uint32_t>(ledger) >> 16))};
170 }
171 
172 Keylet const&
173 amendments() noexcept
174 {
175  static Keylet const ret{
177  return ret;
178 }
179 
180 Keylet const&
181 fees() noexcept
182 {
183  static Keylet const ret{
185  return ret;
186 }
187 
188 Keylet const&
189 negativeUNL() noexcept
190 {
191  static Keylet const ret{
193  return ret;
194 }
195 
196 Keylet
197 book_t::operator()(Book const& b) const
198 {
199  return {ltDIR_NODE, getBookBase(b)};
200 }
201 
202 Keylet
204  AccountID const& id0,
205  AccountID const& id1,
206  Currency const& currency) noexcept
207 {
208  // There is code in SetTrust that calls us with id0 == id1, to allow users
209  // to locate and delete such "weird" trustlines. If we remove that code, we
210  // could enable this assert:
211  // assert(id0 != id1);
212 
213  // A trust line is shared between two accounts; while we typically think
214  // of this as an "issuer" and a "holder" the relationship is actually fully
215  // bidirectional.
216  //
217  // So that we can generate a unique ID for a trust line, regardess of which
218  // side of the line we're looking at, we define a "canonical" order for the
219  // two accounts (smallest then largest) and hash them in that order:
220  auto const accounts = std::minmax(id0, id1);
221 
222  return {
224  indexHash(
226  accounts.first,
227  accounts.second,
228  currency)};
229 }
230 
231 Keylet
232 offer(AccountID const& id, std::uint32_t seq) noexcept
233 {
234  return {ltOFFER, indexHash(LedgerNameSpace::OFFER, id, seq)};
235 }
236 
237 Keylet
238 quality(Keylet const& k, std::uint64_t q) noexcept
239 {
240  assert(k.type == ltDIR_NODE);
241 
242  // Indexes are stored in big endian format: they print as hex as stored.
243  // Most significant bytes are first and the least significant bytes
244  // represent adjacent entries. We place the quality, in big endian format,
245  // in the 8 right most bytes; this way, incrementing goes to the next entry
246  // for indexes.
247  uint256 x = k.key;
248 
249  // FIXME This is ugly and we can and should do better...
250  ((std::uint64_t*)x.end())[-1] = boost::endian::native_to_big(q);
251 
252  return {ltDIR_NODE, x};
253 }
254 
255 Keylet
256 next_t::operator()(Keylet const& k) const
257 {
258  assert(k.type == ltDIR_NODE);
259  return {ltDIR_NODE, getQualityNext(k.key)};
260 }
261 
262 Keylet
263 ticket_t::operator()(AccountID const& id, std::uint32_t ticketSeq) const
264 {
265  return {ltTICKET, getTicketIndex(id, ticketSeq)};
266 }
267 
268 Keylet
269 ticket_t::operator()(AccountID const& id, SeqProxy ticketSeq) const
270 {
271  return {ltTICKET, getTicketIndex(id, ticketSeq)};
272 }
273 
274 // This function is presently static, since it's never accessed from anywhere
275 // else. If we ever support multiple pages of signer lists, this would be the
276 // keylet used to locate them.
277 static Keylet
279 {
280  return {
282 }
283 
284 Keylet
285 signers(AccountID const& account) noexcept
286 {
287  return signers(account, 0);
288 }
289 
290 Keylet
291 check(AccountID const& id, std::uint32_t seq) noexcept
292 {
293  return {ltCHECK, indexHash(LedgerNameSpace::CHECK, id, seq)};
294 }
295 
296 Keylet
297 depositPreauth(AccountID const& owner, AccountID const& preauthorized) noexcept
298 {
299  return {
301  indexHash(LedgerNameSpace::DEPOSIT_PREAUTH, owner, preauthorized)};
302 }
303 
304 //------------------------------------------------------------------------------
305 
306 Keylet
307 unchecked(uint256 const& key) noexcept
308 {
309  return {ltANY, key};
310 }
311 
312 Keylet
313 ownerDir(AccountID const& id) noexcept
314 {
316 }
317 
318 Keylet
319 page(uint256 const& key, std::uint64_t index) noexcept
320 {
321  if (index == 0)
322  return {ltDIR_NODE, key};
323 
324  return {ltDIR_NODE, indexHash(LedgerNameSpace::DIR_NODE, key, index)};
325 }
326 
327 Keylet
328 escrow(AccountID const& src, std::uint32_t seq) noexcept
329 {
330  return {ltESCROW, indexHash(LedgerNameSpace::ESCROW, src, seq)};
331 }
332 
333 Keylet
334 payChan(AccountID const& src, AccountID const& dst, std::uint32_t seq) noexcept
335 {
336  return {
337  ltPAYCHAN,
339 }
340 
341 Keylet
342 nftpage_min(AccountID const& owner)
343 {
345  std::memcpy(buf.data(), owner.data(), owner.size());
346  return {ltNFTOKEN_PAGE, uint256{buf}};
347 }
348 
349 Keylet
350 nftpage_max(AccountID const& owner)
351 {
352  uint256 id = nft::pageMask;
353  std::memcpy(id.data(), owner.data(), owner.size());
354  return {ltNFTOKEN_PAGE, id};
355 }
356 
357 Keylet
358 nftpage(Keylet const& k, uint256 const& token)
359 {
360  assert(k.type == ltNFTOKEN_PAGE);
361  return {ltNFTOKEN_PAGE, (k.key & ~nft::pageMask) + (token & nft::pageMask)};
362 }
363 
364 Keylet
365 nftoffer(AccountID const& owner, std::uint32_t seq)
366 {
367  return {
369 }
370 
371 Keylet
372 nft_buys(uint256 const& id) noexcept
373 {
375 }
376 
377 Keylet
378 nft_sells(uint256 const& id) noexcept
379 {
381 }
382 
383 Keylet
384 amm(Issue const& issue1, Issue const& issue2) noexcept
385 {
386  auto const& [minI, maxI] = std::minmax(issue1, issue2);
387  return amm(indexHash(
389  minI.account,
390  minI.currency,
391  maxI.account,
392  maxI.currency));
393 }
394 
395 Keylet
396 amm(uint256 const& id) noexcept
397 {
398  return {ltAMM, id};
399 }
400 
401 Keylet
403 {
404  // A door account can support multiple bridges. On the locking chain
405  // there can only be one bridge per lockingChainCurrency. On the issuing
406  // chain there can only be one bridge per issuingChainCurrency.
407  auto const& issue = bridge.issue(chainType);
408  return {
409  ltBRIDGE,
410  indexHash(
411  LedgerNameSpace::BRIDGE, bridge.door(chainType), issue.currency)};
412 }
413 
414 Keylet
416 {
417  return {
419  indexHash(
421  bridge.lockingChainDoor(),
422  bridge.lockingChainIssue(),
423  bridge.issuingChainDoor(),
424  bridge.issuingChainIssue(),
425  seq)};
426 }
427 
428 Keylet
430 {
431  return {
433  indexHash(
435  bridge.lockingChainDoor(),
436  bridge.lockingChainIssue(),
437  bridge.issuingChainDoor(),
438  bridge.issuingChainIssue(),
439  seq)};
440 }
441 
442 Keylet
443 did(AccountID const& account) noexcept
444 {
446 }
447 
448 Keylet
449 oracle(AccountID const& account, std::uint32_t const& documentID) noexcept
450 {
451  return {ltORACLE, indexHash(LedgerNameSpace::ORACLE, account, documentID)};
452 }
453 
454 } // namespace keylet
455 
456 } // namespace ripple
ripple::keylet::ownerDir
Keylet ownerDir(AccountID const &id) noexcept
The root page of an account's directory.
Definition: Indexes.cpp:313
ripple::LedgerNameSpace::DIR_NODE
@ DIR_NODE
ripple::LedgerNameSpace::NFTOKEN_OFFER
@ NFTOKEN_OFFER
ripple::ltTICKET
@ ltTICKET
A ledger object which describes a ticket.
Definition: LedgerFormats.h:80
ripple::LedgerNameSpace::NICKNAME
@ NICKNAME
ripple::Keylet
A pair of SHAMap key and LedgerEntryType.
Definition: Keylet.h:38
ripple::Issue
A currency issued by an account.
Definition: Issue.h:35
ripple::LedgerNameSpace::OFFER
@ OFFER
ripple::LedgerNameSpace::NFTOKEN_SELL_OFFERS
@ NFTOKEN_SELL_OFFERS
ripple::keylet::amendments
Keylet const & amendments() noexcept
The index of the amendment table.
Definition: Indexes.cpp:173
ripple::ltANY
@ ltANY
A special type, matching any ledger entry type.
Definition: LedgerFormats.h:212
ripple::ltORACLE
@ ltORACLE
A ledger object which tracks Oracle.
Definition: LedgerFormats.h:198
ripple::LedgerNameSpace::GENERATOR
@ GENERATOR
ripple::isConsistent
bool isConsistent(Book const &book)
Definition: Book.cpp:25
ripple::STXChainBridge::ChainType
ChainType
Definition: STXChainBridge.h:43
ripple::LedgerNameSpace::AMENDMENTS
@ AMENDMENTS
ripple::Book::out
Issue out
Definition: Book.h:37
ripple::ltLEDGER_HASHES
@ ltLEDGER_HASHES
A ledger object that contains a list of ledger hashes.
Definition: LedgerFormats.h:109
ripple::keylet::oracle
Keylet oracle(AccountID const &account, std::uint32_t const &documentID) noexcept
Definition: Indexes.cpp:449
ripple::LedgerNameSpace::NFTOKEN_BUY_OFFERS
@ NFTOKEN_BUY_OFFERS
ripple::getBookBase
uint256 getBookBase(Book const &book)
Definition: Indexes.cpp:92
ripple::LedgerNameSpace::CHECK
@ CHECK
ripple::keylet::amm
Keylet amm(Issue const &issue1, Issue const &issue2) noexcept
AMM entry.
Definition: Indexes.cpp:384
ripple::base_uint::end
iterator end()
Definition: base_uint.h:138
ripple::ltSIGNER_LIST
@ ltSIGNER_LIST
A ledger object which contains a signer list for an account.
Definition: LedgerFormats.h:86
ripple::keylet::nftoffer
Keylet nftoffer(AccountID const &owner, std::uint32_t seq)
An offer from an account to buy or sell an NFT.
Definition: Indexes.cpp:365
ripple::keylet::offer
Keylet offer(AccountID const &id, std::uint32_t seq) noexcept
An offer from an account.
Definition: Indexes.cpp:232
ripple::LedgerNameSpace::XCHAIN_CLAIM_ID
@ XCHAIN_CLAIM_ID
ripple::Issue::currency
Currency currency
Definition: Issue.h:38
ripple::keylet::skip
Keylet const & skip() noexcept
The index of the "short" skip list.
Definition: Indexes.cpp:155
ripple::keylet::did
Keylet did(AccountID const &account) noexcept
Definition: Indexes.cpp:443
ripple::keylet::child
Keylet child(uint256 const &key) noexcept
Any item that can be in an owner dir.
Definition: Indexes.cpp:149
ripple::LedgerNameSpace::SIGNER_LIST
@ SIGNER_LIST
ripple::LedgerNameSpace::XCHAIN_CREATE_ACCOUNT_CLAIM_ID
@ XCHAIN_CREATE_ACCOUNT_CLAIM_ID
ripple::keylet::xChainClaimID
Keylet xChainClaimID(STXChainBridge const &bridge, std::uint64_t seq)
Definition: Indexes.cpp:415
ripple::ltCHECK
@ ltCHECK
A ledger object which describes a check.
Definition: LedgerFormats.h:155
ripple::getQualityNext
uint256 getQualityNext(uint256 const &uBase)
Definition: Indexes.cpp:110
ripple::ltFEE_SETTINGS
@ ltFEE_SETTINGS
The ledger object which lists the network's fee settings.
Definition: LedgerFormats.h:137
ripple::LedgerNameSpace
LedgerNameSpace
Type-specific prefix for calculating ledger indices.
Definition: Indexes.cpp:50
ripple::LedgerNameSpace::SKIP_LIST
@ SKIP_LIST
ripple::ltCHILD
@ ltCHILD
A special type, matching any ledger type except directory nodes.
Definition: LedgerFormats.h:225
ripple::base_uint::data
pointer data()
Definition: base_uint.h:122
algorithm
ripple::getTicketIndex
uint256 getTicketIndex(AccountID const &account, std::uint32_t ticketSeq)
Definition: Indexes.cpp:125
ripple::keylet::next_t::operator()
Keylet operator()(Keylet const &k) const
Definition: Indexes.cpp:256
ripple::base_uint::size
constexpr static std::size_t size()
Definition: base_uint.h:519
ripple::ltDIR_NODE
@ ltDIR_NODE
A ledger object which contains a list of object identifiers.
Definition: LedgerFormats.h:66
ripple::nft::pageMask
constexpr uint256 pageMask(std::string_view("0000000000000000000000000000000000000000ffffffffffffffffffffffff"))
ripple::uint256
base_uint< 256 > uint256
Definition: base_uint.h:550
ripple::SeqProxy::isTicket
constexpr bool isTicket() const
Definition: SeqProxy.h:94
ripple::Keylet::key
uint256 key
Definition: Keylet.h:40
ripple::base_uint< 256 >
ripple::ltAMENDMENTS
@ ltAMENDMENTS
The ledger object which lists details about amendments on the network.
Definition: LedgerFormats.h:117
ripple::indexHash
static uint256 indexHash(LedgerNameSpace space, Args const &... args)
Definition: Indexes.cpp:86
ripple::keylet::escrow
Keylet escrow(AccountID const &src, std::uint32_t seq) noexcept
An escrow entry.
Definition: Indexes.cpp:328
ripple::keylet::nftpage_min
Keylet nftpage_min(AccountID const &owner)
NFT page keylets.
Definition: Indexes.cpp:342
ripple::ltOFFER
@ ltOFFER
A ledger object which describes an offer on the DEX.
Definition: LedgerFormats.h:92
ripple::keylet::nftpage
Keylet nftpage(Keylet const &k, uint256 const &token)
Definition: Indexes.cpp:358
ripple::LedgerNameSpace::NEGATIVE_UNL
@ NEGATIVE_UNL
ripple::keylet::account
Keylet account(AccountID const &id) noexcept
AccountID root.
Definition: Indexes.cpp:143
ripple::ltESCROW
@ ltESCROW
A ledger object describing a single escrow.
Definition: LedgerFormats.h:143
std::minmax
T minmax(T... args)
ripple::ltDID
@ ltDID
The ledger object which tracks the DID.
Definition: LedgerFormats.h:193
ripple::LedgerNameSpace::DEPOSIT_PREAUTH
@ DEPOSIT_PREAUTH
ripple::keylet::bridge
Keylet bridge(STXChainBridge const &bridge, STXChainBridge::ChainType chainType)
Definition: Indexes.cpp:402
ripple::ltNFTOKEN_OFFER
@ ltNFTOKEN_OFFER
A ledger object which identifies an offer to buy or sell an NFT.
Definition: LedgerFormats.h:181
ripple::keylet::page
Keylet page(uint256 const &key, std::uint64_t index) noexcept
A page in a directory.
Definition: Indexes.cpp:319
ripple::LedgerNameSpace::CONTRACT
@ CONTRACT
ripple::LedgerNameSpace::OWNER_DIR
@ OWNER_DIR
std::array< std::uint8_t, 32 >
ripple::Keylet::type
LedgerEntryType type
Definition: Keylet.h:41
ripple::ltDEPOSIT_PREAUTH
@ ltDEPOSIT_PREAUTH
A ledger object which describes a deposit preauthorization.
Definition: LedgerFormats.h:161
ripple::keylet::nft_sells
Keylet nft_sells(uint256 const &id) noexcept
The directory of sell offers for the specified NFT.
Definition: Indexes.cpp:378
ripple::keylet::nftpage_max
Keylet nftpage_max(AccountID const &owner)
A keylet for the owner's last possible NFT page.
Definition: Indexes.cpp:350
ripple::keylet::ticket_t::operator()
Keylet operator()(AccountID const &id, std::uint32_t ticketSeq) const
Definition: Indexes.cpp:263
ripple::LedgerNameSpace::TRUST_LINE
@ TRUST_LINE
std::uint16_t
ripple::keylet::nft_buys
Keylet nft_buys(uint256 const &id) noexcept
The directory of buy offers for the specified NFT.
Definition: Indexes.cpp:372
ripple::keylet::line
Keylet line(AccountID const &id0, AccountID const &id1, Currency const &currency) noexcept
The index of a trust line for a given currency.
Definition: Indexes.cpp:203
ripple::LedgerNameSpace::FEE_SETTINGS
@ FEE_SETTINGS
ripple::keylet::unchecked
Keylet unchecked(uint256 const &key) noexcept
Any ledger entry.
Definition: Indexes.cpp:307
ripple::LedgerNameSpace::AMM
@ AMM
ripple::STXChainBridge
Definition: STXChainBridge.h:33
ripple::SeqProxy::value
constexpr std::uint32_t value() const
Definition: SeqProxy.h:82
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::keylet::book_t::operator()
Keylet operator()(Book const &b) const
Definition: Indexes.cpp:197
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::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::keylet::payChan
Keylet payChan(AccountID const &src, AccountID const &dst, std::uint32_t seq) noexcept
A PaymentChannel.
Definition: Indexes.cpp:334
ripple::LedgerNameSpace::DID
@ DID
ripple::ltACCOUNT_ROOT
@ ltACCOUNT_ROOT
A ledger object which describes an account.
Definition: LedgerFormats.h:59
ripple::sha512Half
sha512_half_hasher::result_type sha512Half(Args const &... args)
Returns the SHA512-Half of a series of objects.
Definition: digest.h:216
cassert
ripple::SeqProxy
A type that represents either a sequence value or a ticket value.
Definition: SeqProxy.h:55
ripple::LedgerNameSpace::XRP_PAYMENT_CHANNEL
@ XRP_PAYMENT_CHANNEL
ripple::LedgerNameSpace::TICKET
@ TICKET
ripple::keylet::xChainCreateAccountClaimID
Keylet xChainCreateAccountClaimID(STXChainBridge const &bridge, std::uint64_t seq)
Definition: Indexes.cpp:429
ripple::ltXCHAIN_OWNED_CLAIM_ID
@ ltXCHAIN_OWNED_CLAIM_ID
A claim id for a cross chain transaction.
Definition: LedgerFormats.h:123
ripple::keylet::fees
Keylet const & fees() noexcept
The (fixed) index of the object containing the ledger fees.
Definition: Indexes.cpp:181
std::memcpy
T memcpy(T... args)
ripple::LedgerNameSpace::ESCROW
@ ESCROW
ripple::Book
Specifies an order book.
Definition: Book.h:33
ripple::ltRIPPLE_STATE
@ ltRIPPLE_STATE
A ledger object which describes a bidirectional trust line.
Definition: LedgerFormats.h:74
ripple::keylet::quality
Keylet quality(Keylet const &k, std::uint64_t q) noexcept
The initial directory page for a specific quality.
Definition: Indexes.cpp:238
ripple::LedgerNameSpace::ACCOUNT
@ ACCOUNT
ripple::LedgerNameSpace::ORACLE
@ ORACLE
ripple::LedgerNameSpace::BOOK_DIR
@ BOOK_DIR
ripple::keylet::signers
static Keylet signers(AccountID const &account, std::uint32_t page) noexcept
Definition: Indexes.cpp:278
ripple::keylet::negativeUNL
Keylet const & negativeUNL() noexcept
The (fixed) index of the object containing the ledger negativeUNL.
Definition: Indexes.cpp:189
ripple::keylet::check
Keylet check(AccountID const &id, std::uint32_t seq) noexcept
A Check.
Definition: Indexes.cpp:291
ripple::keylet::depositPreauth
Keylet depositPreauth(AccountID const &owner, AccountID const &preauthorized) noexcept
A DepositPreauth.
Definition: Indexes.cpp:297
ripple::getQuality
std::uint64_t getQuality(uint256 const &uBase)
Definition: Indexes.cpp:118
ripple::ltAMM
@ ltAMM
The ledger object which tracks the AMM.
Definition: LedgerFormats.h:187
ripple::Book::in
Issue in
Definition: Book.h:36
ripple::Issue::account
AccountID account
Definition: Issue.h:39
ripple::ltPAYCHAN
@ ltPAYCHAN
A ledger object describing a single unidirectional XRP payment channel.
Definition: LedgerFormats.h:149
ripple::LedgerNameSpace::BRIDGE
@ BRIDGE