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