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 
76  // No longer used or supported. Left here to reserve the space
77  // to avoid accidental reuse.
78  CONTRACT [[deprecated]] = 'c',
79  GENERATOR [[deprecated]] = 'g',
80  NICKNAME [[deprecated]] = 'n',
81 };
82 
83 template <class... Args>
84 static uint256
85 indexHash(LedgerNameSpace space, Args const&... args)
86 {
87  return sha512Half(safe_cast<std::uint16_t>(space), args...);
88 }
89 
90 uint256
91 getBookBase(Book const& book)
92 {
93  assert(isConsistent(book));
94 
95  auto const index = indexHash(
97  book.in.currency,
98  book.out.currency,
99  book.in.account,
100  book.out.account);
101 
102  // Return with quality 0.
103  auto k = keylet::quality({ltDIR_NODE, index}, 0);
104 
105  return k.key;
106 }
107 
108 uint256
109 getQualityNext(uint256 const& uBase)
110 {
111  static constexpr uint256 nextq(
112  "0000000000000000000000000000000000000000000000010000000000000000");
113  return uBase + nextq;
114 }
115 
117 getQuality(uint256 const& uBase)
118 {
119  // VFALCO [base_uint] This assumes a certain storage format
120  return boost::endian::big_to_native(((std::uint64_t*)uBase.end())[-1]);
121 }
122 
123 uint256
124 getTicketIndex(AccountID const& account, std::uint32_t ticketSeq)
125 {
126  return indexHash(
127  LedgerNameSpace::TICKET, account, std::uint32_t(ticketSeq));
128 }
129 
130 uint256
131 getTicketIndex(AccountID const& account, SeqProxy ticketSeq)
132 {
133  assert(ticketSeq.isTicket());
134  return getTicketIndex(account, ticketSeq.value());
135 }
136 
137 //------------------------------------------------------------------------------
138 
139 namespace keylet {
140 
141 Keylet
142 account(AccountID const& id) noexcept
143 {
145 }
146 
147 Keylet
148 child(uint256 const& key) noexcept
149 {
150  return {ltCHILD, key};
151 }
152 
153 Keylet const&
154 skip() noexcept
155 {
156  static Keylet const ret{
158  return ret;
159 }
160 
161 Keylet
162 skip(LedgerIndex ledger) noexcept
163 {
164  return {
166  indexHash(
168  std::uint32_t(static_cast<std::uint32_t>(ledger) >> 16))};
169 }
170 
171 Keylet const&
172 amendments() noexcept
173 {
174  static Keylet const ret{
176  return ret;
177 }
178 
179 Keylet const&
180 fees() noexcept
181 {
182  static Keylet const ret{
184  return ret;
185 }
186 
187 Keylet const&
188 negativeUNL() noexcept
189 {
190  static Keylet const ret{
192  return ret;
193 }
194 
195 Keylet
196 book_t::operator()(Book const& b) const
197 {
198  return {ltDIR_NODE, getBookBase(b)};
199 }
200 
201 Keylet
203  AccountID const& id0,
204  AccountID const& id1,
205  Currency const& currency) noexcept
206 {
207  // There is code in SetTrust that calls us with id0 == id1, to allow users
208  // to locate and delete such "weird" trustlines. If we remove that code, we
209  // could enable this assert:
210  // assert(id0 != id1);
211 
212  // A trust line is shared between two accounts; while we typically think
213  // of this as an "issuer" and a "holder" the relationship is actually fully
214  // bidirectional.
215  //
216  // So that we can generate a unique ID for a trust line, regardess of which
217  // side of the line we're looking at, we define a "canonical" order for the
218  // two accounts (smallest then largest) and hash them in that order:
219  auto const accounts = std::minmax(id0, id1);
220 
221  return {
223  indexHash(
225  accounts.first,
226  accounts.second,
227  currency)};
228 }
229 
230 Keylet
231 offer(AccountID const& id, std::uint32_t seq) noexcept
232 {
233  return {ltOFFER, indexHash(LedgerNameSpace::OFFER, id, seq)};
234 }
235 
236 Keylet
237 quality(Keylet const& k, std::uint64_t q) noexcept
238 {
239  assert(k.type == ltDIR_NODE);
240 
241  // Indexes are stored in big endian format: they print as hex as stored.
242  // Most significant bytes are first and the least significant bytes
243  // represent adjacent entries. We place the quality, in big endian format,
244  // in the 8 right most bytes; this way, incrementing goes to the next entry
245  // for indexes.
246  uint256 x = k.key;
247 
248  // FIXME This is ugly and we can and should do better...
249  ((std::uint64_t*)x.end())[-1] = boost::endian::native_to_big(q);
250 
251  return {ltDIR_NODE, x};
252 }
253 
254 Keylet
255 next_t::operator()(Keylet const& k) const
256 {
257  assert(k.type == ltDIR_NODE);
258  return {ltDIR_NODE, getQualityNext(k.key)};
259 }
260 
261 Keylet
262 ticket_t::operator()(AccountID const& id, std::uint32_t ticketSeq) const
263 {
264  return {ltTICKET, getTicketIndex(id, ticketSeq)};
265 }
266 
267 Keylet
268 ticket_t::operator()(AccountID const& id, SeqProxy ticketSeq) const
269 {
270  return {ltTICKET, getTicketIndex(id, ticketSeq)};
271 }
272 
273 // This function is presently static, since it's never accessed from anywhere
274 // else. If we ever support multiple pages of signer lists, this would be the
275 // keylet used to locate them.
276 static Keylet
278 {
279  return {
281 }
282 
283 Keylet
284 signers(AccountID const& account) noexcept
285 {
286  return signers(account, 0);
287 }
288 
289 Keylet
290 check(AccountID const& id, std::uint32_t seq) noexcept
291 {
292  return {ltCHECK, indexHash(LedgerNameSpace::CHECK, id, seq)};
293 }
294 
295 Keylet
296 depositPreauth(AccountID const& owner, AccountID const& preauthorized) noexcept
297 {
298  return {
300  indexHash(LedgerNameSpace::DEPOSIT_PREAUTH, owner, preauthorized)};
301 }
302 
303 //------------------------------------------------------------------------------
304 
305 Keylet
306 unchecked(uint256 const& key) noexcept
307 {
308  return {ltANY, key};
309 }
310 
311 Keylet
312 ownerDir(AccountID const& id) noexcept
313 {
315 }
316 
317 Keylet
318 page(uint256 const& key, std::uint64_t index) noexcept
319 {
320  if (index == 0)
321  return {ltDIR_NODE, key};
322 
323  return {ltDIR_NODE, indexHash(LedgerNameSpace::DIR_NODE, key, index)};
324 }
325 
326 Keylet
327 escrow(AccountID const& src, std::uint32_t seq) noexcept
328 {
329  return {ltESCROW, indexHash(LedgerNameSpace::ESCROW, src, seq)};
330 }
331 
332 Keylet
333 payChan(AccountID const& src, AccountID const& dst, std::uint32_t seq) noexcept
334 {
335  return {
336  ltPAYCHAN,
338 }
339 
340 Keylet
341 nftpage_min(AccountID const& owner)
342 {
344  std::memcpy(buf.data(), owner.data(), owner.size());
345  return {ltNFTOKEN_PAGE, uint256{buf}};
346 }
347 
348 Keylet
349 nftpage_max(AccountID const& owner)
350 {
351  uint256 id = nft::pageMask;
352  std::memcpy(id.data(), owner.data(), owner.size());
353  return {ltNFTOKEN_PAGE, id};
354 }
355 
356 Keylet
357 nftpage(Keylet const& k, uint256 const& token)
358 {
359  assert(k.type == ltNFTOKEN_PAGE);
360  return {ltNFTOKEN_PAGE, (k.key & ~nft::pageMask) + (token & nft::pageMask)};
361 }
362 
363 Keylet
364 nftoffer(AccountID const& owner, std::uint32_t seq)
365 {
366  return {
368 }
369 
370 Keylet
371 nft_buys(uint256 const& id) noexcept
372 {
374 }
375 
376 Keylet
377 nft_sells(uint256 const& id) noexcept
378 {
380 }
381 
382 Keylet
383 amm(Issue const& issue1, Issue const& issue2) noexcept
384 {
385  auto const& [minI, maxI] = std::minmax(issue1, issue2);
386  return amm(indexHash(
388  minI.account,
389  minI.currency,
390  maxI.account,
391  maxI.currency));
392 }
393 
394 Keylet
395 amm(uint256 const& id) noexcept
396 {
397  return {ltAMM, id};
398 }
399 
400 Keylet
402 {
403  // A door account can support multiple bridges. On the locking chain
404  // there can only be one bridge per lockingChainCurrency. On the issuing
405  // chain there can only be one bridge per issuingChainCurrency.
406  auto const& issue = bridge.issue(chainType);
407  return {
408  ltBRIDGE,
409  indexHash(
410  LedgerNameSpace::BRIDGE, bridge.door(chainType), issue.currency)};
411 }
412 
413 Keylet
415 {
416  return {
418  indexHash(
420  bridge.lockingChainDoor(),
421  bridge.lockingChainIssue(),
422  bridge.issuingChainDoor(),
423  bridge.issuingChainIssue(),
424  seq)};
425 }
426 
427 Keylet
429 {
430  return {
432  indexHash(
434  bridge.lockingChainDoor(),
435  bridge.lockingChainIssue(),
436  bridge.issuingChainDoor(),
437  bridge.issuingChainIssue(),
438  seq)};
439 }
440 
441 Keylet
442 did(AccountID const& account) noexcept
443 {
445 }
446 
447 } // namespace keylet
448 
449 } // namespace ripple
ripple::keylet::ownerDir
Keylet ownerDir(AccountID const &id) noexcept
The root page of an account's directory.
Definition: Indexes.cpp:312
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:172
ripple::ltANY
@ ltANY
A special type, matching any ledger entry type.
Definition: LedgerFormats.h:207
ripple::LedgerNameSpace::GENERATOR
@ GENERATOR
ripple::isConsistent
bool isConsistent(Book const &book)
Definition: Book.cpp:25
ripple::STXChainBridge::ChainType
ChainType
Definition: STXChainBridge.h:42
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::LedgerNameSpace::NFTOKEN_BUY_OFFERS
@ NFTOKEN_BUY_OFFERS
ripple::getBookBase
uint256 getBookBase(Book const &book)
Definition: Indexes.cpp:91
ripple::LedgerNameSpace::CHECK
@ CHECK
ripple::keylet::amm
Keylet amm(Issue const &issue1, Issue const &issue2) noexcept
AMM entry.
Definition: Indexes.cpp:383
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:364
ripple::keylet::offer
Keylet offer(AccountID const &id, std::uint32_t seq) noexcept
An offer from an account.
Definition: Indexes.cpp:231
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:154
ripple::keylet::did
Keylet did(AccountID const &account) noexcept
Definition: Indexes.cpp:442
ripple::keylet::child
Keylet child(uint256 const &key) noexcept
Any item that can be in an owner dir.
Definition: Indexes.cpp:148
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:414
ripple::ltCHECK
@ ltCHECK
A ledger object which describes a check.
Definition: LedgerFormats.h:155
ripple::getQualityNext
uint256 getQualityNext(uint256 const &uBase)
Definition: Indexes.cpp:109
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:220
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:124
ripple::keylet::next_t::operator()
Keylet operator()(Keylet const &k) const
Definition: Indexes.cpp:255
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:85
ripple::keylet::escrow
Keylet escrow(AccountID const &src, std::uint32_t seq) noexcept
An escrow entry.
Definition: Indexes.cpp:327
ripple::keylet::nftpage_min
Keylet nftpage_min(AccountID const &owner)
NFT page keylets.
Definition: Indexes.cpp:341
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:357
ripple::LedgerNameSpace::NEGATIVE_UNL
@ NEGATIVE_UNL
ripple::keylet::account
Keylet account(AccountID const &id) noexcept
AccountID root.
Definition: Indexes.cpp:142
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:401
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:318
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:377
ripple::keylet::nftpage_max
Keylet nftpage_max(AccountID const &owner)
A keylet for the owner's last possible NFT page.
Definition: Indexes.cpp:349
ripple::keylet::ticket_t::operator()
Keylet operator()(AccountID const &id, std::uint32_t ticketSeq) const
Definition: Indexes.cpp:262
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:371
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:202
ripple::LedgerNameSpace::FEE_SETTINGS
@ FEE_SETTINGS
ripple::keylet::unchecked
Keylet unchecked(uint256 const &key) noexcept
Any ledger entry.
Definition: Indexes.cpp:306
ripple::LedgerNameSpace::AMM
@ AMM
ripple::STXChainBridge
Definition: STXChainBridge.h:32
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:196
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:333
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:428
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:180
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:237
ripple::LedgerNameSpace::ACCOUNT
@ ACCOUNT
ripple::LedgerNameSpace::BOOK_DIR
@ BOOK_DIR
ripple::keylet::signers
static Keylet signers(AccountID const &account, std::uint32_t page) noexcept
Definition: Indexes.cpp:277
ripple::keylet::negativeUNL
Keylet const & negativeUNL() noexcept
The (fixed) index of the object containing the ledger negativeUNL.
Definition: Indexes.cpp:188
ripple::keylet::check
Keylet check(AccountID const &id, std::uint32_t seq) noexcept
A Check.
Definition: Indexes.cpp:290
ripple::keylet::depositPreauth
Keylet depositPreauth(AccountID const &owner, AccountID const &preauthorized) noexcept
A DepositPreauth.
Definition: Indexes.cpp:296
ripple::getQuality
std::uint64_t getQuality(uint256 const &uBase)
Definition: Indexes.cpp:117
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