rippled
TER.h
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012 - 2019 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 #ifndef RIPPLE_PROTOCOL_TER_H_INCLUDED
21 #define RIPPLE_PROTOCOL_TER_H_INCLUDED
22 
23 #include <ripple/basics/safe_cast.h>
24 #include <ripple/json/json_value.h>
25 
26 #include <optional>
27 #include <ostream>
28 #include <string>
29 #include <unordered_map>
30 
31 namespace ripple {
32 
33 // See https://xrpl.org/transaction-results.html
34 //
35 // "Transaction Engine Result"
36 // or Transaction ERror.
37 //
38 using TERUnderlyingType = int;
39 
40 //------------------------------------------------------------------------------
41 
43  // Note: Range is stable.
44  // Exact numbers are used in ripple-binary-codec:
45  // https://github.com/ripple/ripple-binary-codec/blob/master/src/enums/definitions.json
46  // Use tokens.
47 
48  // -399 .. -300: L Local error (transaction fee inadequate, exceeds local
49  // limit) Only valid during non-consensus processing. Implications:
50  // - Not forwarded
51  // - No fee check
68 };
69 
70 //------------------------------------------------------------------------------
71 
73  // Note: Range is stable.
74  // Exact numbers are used in ripple-binary-codec:
75  // https://github.com/ripple/ripple-binary-codec/blob/master/src/enums/definitions.json
76  // Use tokens.
77 
78  // -299 .. -200: M Malformed (bad signature)
79  // Causes:
80  // - Transaction corrupt.
81  // Implications:
82  // - Not applied
83  // - Not forwarded
84  // - Reject
85  // - Cannot succeed in any imagined ledger.
86  temMALFORMED = -299,
87 
121 
122  temUNCERTAIN, // An internal intermediate result; should never be returned.
123  temUNKNOWN, // An internal intermediate result; should never be returned.
124 
127 
129 
136 
138 };
139 
140 //------------------------------------------------------------------------------
141 
143  // Note: Range is stable.
144  // Exact numbers are used in ripple-binary-codec:
145  // https://github.com/ripple/ripple-binary-codec/blob/master/src/enums/definitions.json
146  // Use tokens.
147 
148  // -199 .. -100: F
149  // Failure (sequence number previously used)
150  //
151  // Causes:
152  // - Transaction cannot succeed because of ledger state.
153  // - Unexpected ledger state.
154  // - C++ exception.
155  //
156  // Implications:
157  // - Not applied
158  // - Not forwarded
159  // - Could succeed in an imagined ledger.
160  tefFAILURE = -199,
168  tefNO_AUTH_REQUIRED, // Can't set auth if auth is not required.
181 };
182 
183 //------------------------------------------------------------------------------
184 
186  // Note: Range is stable.
187  // Exact numbers are used in ripple-binary-codec:
188  // https://github.com/ripple/ripple-binary-codec/blob/master/src/enums/definitions.json
189  // Use tokens.
190 
191  // -99 .. -1: R Retry
192  // sequence too high, no funds for txn fee, originating -account
193  // non-existent
194  //
195  // Cause:
196  // Prior application of another, possibly non-existent, transaction could
197  // allow this transaction to succeed.
198  //
199  // Implications:
200  // - Not applied
201  // - May be forwarded
202  // - Results indicating the txn was forwarded: terQUEUED
203  // - All others are not forwarded.
204  // - Might succeed later
205  // - Hold
206  // - Makes hole in sequence which jams transactions.
207  terRETRY = -99,
208  terFUNDS_SPENT, // DEPRECATED.
209  terINSUF_FEE_B, // Can't pay fee, therefore don't burden network.
210  terNO_ACCOUNT, // Can't pay fee, therefore don't burden network.
211  terNO_AUTH, // Not authorized to hold IOUs.
212  terNO_LINE, // Internal flag.
213  terOWNERS, // Can't succeed with non-zero owner count.
214  terPRE_SEQ, // Can't pay fee, no point in forwarding, so don't
215  // burden network.
216  terLAST, // DEPRECATED.
217  terNO_RIPPLE, // Rippling not allowed
218  terQUEUED, // Transaction is being held in TxQ until fee drops
219  terPRE_TICKET, // Ticket is not yet in ledger but might be on its way
220  terNO_AMM, // AMM doesn't exist for the asset pair
221 };
222 
223 //------------------------------------------------------------------------------
224 
226  // Note: Exact number must stay stable. This code is stored by value
227  // in metadata for historic transactions.
228 
229  // 0: S Success (success)
230  // Causes:
231  // - Success.
232  // Implications:
233  // - Applied
234  // - Forwarded
236 };
237 
238 //------------------------------------------------------------------------------
239 
241  // Note: Exact numbers must stay stable. These codes are stored by
242  // value in metadata for historic transactions.
243 
244  // 100 .. 255 C
245  // Claim fee only (ripple transaction with no good paths, pay to
246  // non-existent account, no path)
247  //
248  // Causes:
249  // - Success, but does not achieve optimal result.
250  // - Invalid transaction or no effect, but claim fee to use the sequence
251  // number.
252  //
253  // Implications:
254  // - Applied
255  // - Forwarded
256  //
257  // Only allowed as a return code of appliedTransaction when !tapRETRY.
258  // Otherwise, treated as terRETRY.
259  //
260  // DO NOT CHANGE THESE NUMBERS: They appear in ledger meta data.
261  tecCLAIM = 100,
263  tecUNFUNDED_ADD = 102, // Unused legacy code
267  tecDIR_FULL = 121,
270  tecNO_DST = 124,
274  tecPATH_DRY = 128,
275  tecUNFUNDED = 129,
278  tecOWNERS = 132,
280  tecNO_AUTH = 134,
281  tecNO_LINE = 135,
283  tecFROZEN = 137,
286  tecNO_ENTRY = 140,
290  tecINTERNAL = 144,
291  tecOVERSIZE = 145,
294  tecEXPIRED = 148,
296  tecKILLED = 150,
298  tecTOO_SOON = 152,
299  tecHOOK_REJECTED [[maybe_unused]] = 153,
334 };
335 
336 //------------------------------------------------------------------------------
337 
338 // For generic purposes, a free function that returns the value of a TE*codes.
339 constexpr TERUnderlyingType
341 {
342  return safe_cast<TERUnderlyingType>(v);
343 }
344 
345 constexpr TERUnderlyingType
347 {
348  return safe_cast<TERUnderlyingType>(v);
349 }
350 
351 constexpr TERUnderlyingType
353 {
354  return safe_cast<TERUnderlyingType>(v);
355 }
356 
357 constexpr TERUnderlyingType
359 {
360  return safe_cast<TERUnderlyingType>(v);
361 }
362 
363 constexpr TERUnderlyingType
365 {
366  return safe_cast<TERUnderlyingType>(v);
367 }
368 
369 constexpr TERUnderlyingType
371 {
372  return safe_cast<TERUnderlyingType>(v);
373 }
374 
375 //------------------------------------------------------------------------------
376 // Template class that is specific to selected ranges of error codes. The
377 // Trait tells std::enable_if which ranges are allowed.
378 template <template <typename> class Trait>
380 {
382 
383 public:
384  // Constructors
385  constexpr TERSubset() : code_(tesSUCCESS)
386  {
387  }
388  constexpr TERSubset(TERSubset const& rhs) = default;
389  constexpr TERSubset(TERSubset&& rhs) = default;
390 
391 private:
392  constexpr explicit TERSubset(int rhs) : code_(rhs)
393  {
394  }
395 
396 public:
397  static constexpr TERSubset
398  fromInt(int from)
399  {
400  return TERSubset(from);
401  }
402 
403  // Trait tells enable_if which types are allowed for construction.
404  template <
405  typename T,
406  typename = std::enable_if_t<
407  Trait<std::remove_cv_t<std::remove_reference_t<T>>>::value>>
408  constexpr TERSubset(T rhs) : code_(TERtoInt(rhs))
409  {
410  }
411 
412  // Assignment
413  constexpr TERSubset&
414  operator=(TERSubset const& rhs) = default;
415  constexpr TERSubset&
416  operator=(TERSubset&& rhs) = default;
417 
418  // Trait tells enable_if which types are allowed for assignment.
419  template <typename T>
420  constexpr auto
422  {
423  code_ = TERtoInt(rhs);
424  return *this;
425  }
426 
427  // Conversion to bool.
428  explicit operator bool() const
429  {
430  return code_ != tesSUCCESS;
431  }
432 
433  // Conversion to Json::Value allows assignment to Json::Objects
434  // without casting.
435  operator Json::Value() const
436  {
437  return Json::Value{code_};
438  }
439 
440  // Streaming operator.
441  friend std::ostream&
443  {
444  return os << rhs.code_;
445  }
446 
447  // Return the underlying value. Not a member so similarly named free
448  // functions can do the same work for the enums.
449  //
450  // It's worth noting that an explicit conversion operator was considered
451  // and rejected. Consider this case, taken from Status.h
452  //
453  // class Status {
454  // int code_;
455  // public:
456  // Status (TER ter)
457  // : code_ (ter) {}
458  // }
459  //
460  // This code compiles with no errors or warnings if TER has an explicit
461  // (unnamed) conversion to int. To avoid silent conversions like these
462  // we provide (only) a named conversion.
463  friend constexpr TERUnderlyingType
465  {
466  return v.code_;
467  }
468 };
469 
470 // Comparison operators.
471 // Only enabled if both arguments return int if TERtiInt is called with them.
472 template <typename L, typename R>
473 constexpr auto
474 operator==(L const& lhs, R const& rhs) -> std::enable_if_t<
475  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
476  std::is_same<decltype(TERtoInt(rhs)), int>::value,
477  bool>
478 {
479  return TERtoInt(lhs) == TERtoInt(rhs);
480 }
481 
482 template <typename L, typename R>
483 constexpr auto
484 operator!=(L const& lhs, R const& rhs) -> std::enable_if_t<
485  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
486  std::is_same<decltype(TERtoInt(rhs)), int>::value,
487  bool>
488 {
489  return TERtoInt(lhs) != TERtoInt(rhs);
490 }
491 
492 template <typename L, typename R>
493 constexpr auto
494 operator<(L const& lhs, R const& rhs) -> std::enable_if_t<
495  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
496  std::is_same<decltype(TERtoInt(rhs)), int>::value,
497  bool>
498 {
499  return TERtoInt(lhs) < TERtoInt(rhs);
500 }
501 
502 template <typename L, typename R>
503 constexpr auto
504 operator<=(L const& lhs, R const& rhs) -> std::enable_if_t<
505  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
506  std::is_same<decltype(TERtoInt(rhs)), int>::value,
507  bool>
508 {
509  return TERtoInt(lhs) <= TERtoInt(rhs);
510 }
511 
512 template <typename L, typename R>
513 constexpr auto
514 operator>(L const& lhs, R const& rhs) -> std::enable_if_t<
515  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
516  std::is_same<decltype(TERtoInt(rhs)), int>::value,
517  bool>
518 {
519  return TERtoInt(lhs) > TERtoInt(rhs);
520 }
521 
522 template <typename L, typename R>
523 constexpr auto
524 operator>=(L const& lhs, R const& rhs) -> std::enable_if_t<
525  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
526  std::is_same<decltype(TERtoInt(rhs)), int>::value,
527  bool>
528 {
529  return TERtoInt(lhs) >= TERtoInt(rhs);
530 }
531 
532 //------------------------------------------------------------------------------
533 
534 // Use traits to build a TERSubset that can convert from any of the TE*codes
535 // enums *except* TECcodes: NotTEC
536 
537 // NOTE: NotTEC is useful for codes returned by preflight in transactors.
538 // Preflight checks occur prior to signature checking. If preflight returned
539 // a tec code, then a malicious user could submit a transaction with a very
540 // large fee and have that fee charged against an account without using that
541 // account's valid signature.
542 template <typename FROM>
544 {
545 };
546 template <>
548 {
549 };
550 template <>
552 {
553 };
554 template <>
556 {
557 };
558 template <>
560 {
561 };
562 template <>
564 {
565 };
566 
568 
569 //------------------------------------------------------------------------------
570 
571 // Use traits to build a TERSubset that can convert from any of the TE*codes
572 // enums as well as from NotTEC.
573 template <typename FROM>
575 {
576 };
577 template <>
579 {
580 };
581 template <>
583 {
584 };
585 template <>
587 {
588 };
589 template <>
591 {
592 };
593 template <>
595 {
596 };
597 template <>
599 {
600 };
601 template <>
603 {
604 };
605 
606 // TER allows all of the subsets.
608 
609 //------------------------------------------------------------------------------
610 
611 inline bool
613 {
614  return ((x) >= telLOCAL_ERROR && (x) < temMALFORMED);
615 }
616 
617 inline bool
619 {
620  return ((x) >= temMALFORMED && (x) < tefFAILURE);
621 }
622 
623 inline bool
625 {
626  return ((x) >= tefFAILURE && (x) < terRETRY);
627 }
628 
629 inline bool
631 {
632  return ((x) >= terRETRY && (x) < tesSUCCESS);
633 }
634 
635 inline bool
637 {
638  return ((x) == tesSUCCESS);
639 }
640 
641 inline bool
643 {
644  return ((x) >= tecCLAIM);
645 }
646 
650 transResults();
651 
652 bool
653 transResultInfo(TER code, std::string& token, std::string& text);
654 
656 transToken(TER code);
657 
659 transHuman(TER code);
660 
662 transCode(std::string const& token);
663 
664 } // namespace ripple
665 
666 #endif
ripple::tecUNFUNDED_OFFER
@ tecUNFUNDED_OFFER
Definition: TER.h:264
ripple::temXCHAIN_BAD_PROOF
@ temXCHAIN_BAD_PROOF
Definition: TER.h:131
ripple::tecXCHAIN_ACCOUNT_CREATE_TOO_MANY
@ tecXCHAIN_ACCOUNT_CREATE_TOO_MANY
Definition: TER.h:328
ripple::tefNO_TICKET
@ tefNO_TICKET
Definition: TER.h:179
ripple::terPRE_TICKET
@ terPRE_TICKET
Definition: TER.h:219
ripple::tecOBJECT_NOT_FOUND
@ tecOBJECT_NOT_FOUND
Definition: TER.h:306
std::is_same
ripple::tecFROZEN
@ tecFROZEN
Definition: TER.h:283
ripple::tecUNFUNDED_AMM
@ tecUNFUNDED_AMM
Definition: TER.h:308
ripple::tecXCHAIN_BAD_CLAIM_ID
@ tecXCHAIN_BAD_CLAIM_ID
Definition: TER.h:318
std::false_type
ripple::tecNO_TARGET
@ tecNO_TARGET
Definition: TER.h:284
ripple::temBAD_SEND_XRP_MAX
@ temBAD_SEND_XRP_MAX
Definition: TER.h:99
ripple::tefINTERNAL
@ tefINTERNAL
Definition: TER.h:167
ripple::tecINVARIANT_FAILED
@ tecINVARIANT_FAILED
Definition: TER.h:293
ripple::tecINSUF_RESERVE_LINE
@ tecINSUF_RESERVE_LINE
Definition: TER.h:268
std::string
STL class.
ripple::temBAD_OFFER
@ temBAD_OFFER
Definition: TER.h:94
ripple::tecXCHAIN_PROOF_UNKNOWN_KEY
@ tecXCHAIN_PROOF_UNKNOWN_KEY
Definition: TER.h:320
ripple::TERSubset::code_
TERUnderlyingType code_
Definition: TER.h:381
ripple::tefBAD_ADD_AUTH
@ tefBAD_ADD_AUTH
Definition: TER.h:162
ripple::tecXCHAIN_CLAIM_NO_QUORUM
@ tecXCHAIN_CLAIM_NO_QUORUM
Definition: TER.h:319
ripple::terINSUF_FEE_B
@ terINSUF_FEE_B
Definition: TER.h:209
ripple::temBAD_CURRENCY
@ temBAD_CURRENCY
Definition: TER.h:89
ripple::TEScodes
TEScodes
Definition: TER.h:225
ripple::TERSubset::operator<<
friend std::ostream & operator<<(std::ostream &os, TERSubset const &rhs)
Definition: TER.h:442
ripple::terNO_LINE
@ terNO_LINE
Definition: TER.h:212
ripple::tecOWNERS
@ tecOWNERS
Definition: TER.h:278
ripple::isTesSuccess
bool isTesSuccess(TER x)
Definition: TER.h:636
ripple::telLOCAL_ERROR
@ telLOCAL_ERROR
Definition: TER.h:52
std::pair
ripple::tecINSUFFICIENT_FUNDS
@ tecINSUFFICIENT_FUNDS
Definition: TER.h:305
ripple::tefINVARIANT_FAILED
@ tefINVARIANT_FAILED
Definition: TER.h:177
ripple::tecNO_REGULAR_KEY
@ tecNO_REGULAR_KEY
Definition: TER.h:277
ripple::telCAN_NOT_QUEUE_FEE
@ telCAN_NOT_QUEUE_FEE
Definition: TER.h:63
ripple::transResults
std::unordered_map< TERUnderlyingType, std::pair< char const *const, char const *const > > const & transResults()
Definition: TER.cpp:29
ripple::TECcodes
TECcodes
Definition: TER.h:240
ripple::temBAD_REGKEY
@ temBAD_REGKEY
Definition: TER.h:97
ripple::tecXCHAIN_WRONG_CHAIN
@ tecXCHAIN_WRONG_CHAIN
Definition: TER.h:322
ripple::tecXCHAIN_SENDING_ACCOUNT_MISMATCH
@ tecXCHAIN_SENDING_ACCOUNT_MISMATCH
Definition: TER.h:325
ripple::telBAD_DOMAIN
@ telBAD_DOMAIN
Definition: TER.h:53
ripple::temXCHAIN_EQUAL_DOOR_ACCOUNTS
@ temXCHAIN_EQUAL_DOOR_ACCOUNTS
Definition: TER.h:130
ripple::CanCvtToNotTEC
Definition: TER.h:543
ripple::tecDST_TAG_NEEDED
@ tecDST_TAG_NEEDED
Definition: TER.h:289
ripple::TERSubset::TERtoInt
constexpr friend TERUnderlyingType TERtoInt(TERSubset v)
Definition: TER.h:464
ripple::terFUNDS_SPENT
@ terFUNDS_SPENT
Definition: TER.h:208
ripple::temCANNOT_PREAUTH_SELF
@ temCANNOT_PREAUTH_SELF
Definition: TER.h:119
ripple::tecAMM_EMPTY
@ tecAMM_EMPTY
Definition: TER.h:312
ripple::tecXCHAIN_NO_CLAIM_ID
@ tecXCHAIN_NO_CLAIM_ID
Definition: TER.h:317
ripple::transToken
std::string transToken(TER code)
Definition: TER.cpp:240
ripple::telCAN_NOT_QUEUE_FULL
@ telCAN_NOT_QUEUE_FULL
Definition: TER.h:64
ripple::telCAN_NOT_QUEUE
@ telCAN_NOT_QUEUE
Definition: TER.h:59
ripple::TERUnderlyingType
int TERUnderlyingType
Definition: TER.h:38
ripple::telNETWORK_ID_MAKES_TX_NON_CANONICAL
@ telNETWORK_ID_MAKES_TX_NON_CANONICAL
Definition: TER.h:67
ripple::tecHOOK_REJECTED
@ tecHOOK_REJECTED
Definition: TER.h:299
ripple::temEMPTY_DID
@ temEMPTY_DID
Definition: TER.h:137
ripple::CanCvtToTER
Definition: TER.h:574
ripple::TERtoInt
constexpr TERUnderlyingType TERtoInt(TELcodes v)
Definition: TER.h:340
ripple::tecCANT_ACCEPT_OWN_NFTOKEN_OFFER
@ tecCANT_ACCEPT_OWN_NFTOKEN_OFFER
Definition: TER.h:304
ripple::terNO_RIPPLE
@ terNO_RIPPLE
Definition: TER.h:217
ripple::temBAD_ISSUER
@ temBAD_ISSUER
Definition: TER.h:92
ripple::tefCREATED
@ tefCREATED
Definition: TER.h:165
ripple::temBAD_TRANSFER_RATE
@ temBAD_TRANSFER_RATE
Definition: TER.h:106
ripple::tecINCOMPLETE
@ tecINCOMPLETE
Definition: TER.h:315
ripple::temBAD_PATH
@ temBAD_PATH
Definition: TER.h:95
ripple::temDST_IS_SRC
@ temDST_IS_SRC
Definition: TER.h:107
ripple::isTecClaim
bool isTecClaim(TER x)
Definition: TER.h:642
ripple::tefBAD_AUTH
@ tefBAD_AUTH
Definition: TER.h:163
ripple::temXCHAIN_BRIDGE_BAD_REWARD_AMOUNT
@ temXCHAIN_BRIDGE_BAD_REWARD_AMOUNT
Definition: TER.h:135
ripple::tecAMM_FAILED
@ tecAMM_FAILED
Definition: TER.h:310
ripple::operator==
bool operator==(Manifest const &lhs, Manifest const &rhs)
Definition: Manifest.h:165
ripple::transCode
std::optional< TER > transCode(std::string const &token)
Definition: TER.cpp:258
ripple::temXCHAIN_BRIDGE_BAD_ISSUES
@ temXCHAIN_BRIDGE_BAD_ISSUES
Definition: TER.h:132
ripple::tecKILLED
@ tecKILLED
Definition: TER.h:296
ripple::temUNCERTAIN
@ temUNCERTAIN
Definition: TER.h:122
ripple::terQUEUED
@ terQUEUED
Definition: TER.h:218
ripple::isTerRetry
bool isTerRetry(TER x)
Definition: TER.h:630
ripple::TERSubset::TERSubset
constexpr TERSubset(T rhs)
Definition: TER.h:408
ripple::tefBAD_QUORUM
@ tefBAD_QUORUM
Definition: TER.h:174
ripple::tecOVERSIZE
@ tecOVERSIZE
Definition: TER.h:291
ripple::tecNO_DST_INSUF_XRP
@ tecNO_DST_INSUF_XRP
Definition: TER.h:271
ripple::tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR
@ tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR
Definition: TER.h:331
ripple::temINVALID_FLAG
@ temINVALID_FLAG
Definition: TER.h:110
ripple::tecNFTOKEN_OFFER_TYPE_MISMATCH
@ tecNFTOKEN_OFFER_TYPE_MISMATCH
Definition: TER.h:303
ripple::tefBAD_LEDGER
@ tefBAD_LEDGER
Definition: TER.h:164
ripple::temBAD_QUORUM
@ temBAD_QUORUM
Definition: TER.h:115
ripple::telFAILED_PROCESSING
@ telFAILED_PROCESSING
Definition: TER.h:56
ripple::temBAD_AMM_TOKENS
@ temBAD_AMM_TOKENS
Definition: TER.h:128
ripple::operator<=
bool operator<=(STAmount const &lhs, STAmount const &rhs)
Definition: STAmount.h:478
ripple::tecAMM_NOT_EMPTY
@ tecAMM_NOT_EMPTY
Definition: TER.h:313
ripple::tecNO_ALTERNATIVE_KEY
@ tecNO_ALTERNATIVE_KEY
Definition: TER.h:276
ripple::temBAD_SEND_XRP_PARTIAL
@ temBAD_SEND_XRP_PARTIAL
Definition: TER.h:101
ripple::operator>
bool operator>(STAmount const &lhs, STAmount const &rhs)
Definition: STAmount.h:472
ripple::tefMAX_LEDGER
@ tefMAX_LEDGER
Definition: TER.h:172
std::enable_if_t
ripple::tefNFTOKEN_IS_NOT_TRANSFERABLE
@ tefNFTOKEN_IS_NOT_TRANSFERABLE
Definition: TER.h:180
ripple::operator<
bool operator<(CanonicalTXSet::Key const &lhs, CanonicalTXSet::Key const &rhs)
Definition: CanonicalTXSet.cpp:25
ripple::tefMASTER_DISABLED
@ tefMASTER_DISABLED
Definition: TER.h:171
std::ostream
STL class.
ripple::temBAD_LIMIT
@ temBAD_LIMIT
Definition: TER.h:93
ripple::terRETRY
@ terRETRY
Definition: TER.h:207
ripple::temBAD_SIGNER
@ temBAD_SIGNER
Definition: TER.h:114
ripple::tecDUPLICATE
@ tecDUPLICATE
Definition: TER.h:295
ripple::tecAMM_INVALID_TOKENS
@ tecAMM_INVALID_TOKENS
Definition: TER.h:311
ripple::temBAD_SEND_XRP_PATHS
@ temBAD_SEND_XRP_PATHS
Definition: TER.h:102
ripple::TERSubset
Definition: TER.h:379
ripple::terLAST
@ terLAST
Definition: TER.h:216
ripple::tecFAILED_PROCESSING
@ tecFAILED_PROCESSING
Definition: TER.h:266
ripple::isTefFailure
bool isTefFailure(TER x)
Definition: TER.h:624
ripple::operator!=
bool operator!=(Manifest const &lhs, Manifest const &rhs)
Definition: Manifest.h:175
ripple::temDST_NEEDED
@ temDST_NEEDED
Definition: TER.h:108
ripple::temBAD_SEQUENCE
@ temBAD_SEQUENCE
Definition: TER.h:103
ripple::tecAMM_BALANCE
@ tecAMM_BALANCE
Definition: TER.h:309
ripple::terOWNERS
@ terOWNERS
Definition: TER.h:213
ripple::operator>=
bool operator>=(STAmount const &lhs, STAmount const &rhs)
Definition: STAmount.h:484
ripple::tecUNFUNDED
@ tecUNFUNDED
Definition: TER.h:275
ripple::TER
TERSubset< CanCvtToTER > TER
Definition: TER.h:607
ripple::temBAD_SRC_ACCOUNT
@ temBAD_SRC_ACCOUNT
Definition: TER.h:105
ripple::telINSUF_FEE_P
@ telINSUF_FEE_P
Definition: TER.h:57
ripple::TELcodes
TELcodes
Definition: TER.h:42
ripple::terNO_AUTH
@ terNO_AUTH
Definition: TER.h:211
ripple::telREQUIRES_NETWORK_ID
@ telREQUIRES_NETWORK_ID
Definition: TER.h:66
ripple::tecNO_LINE_REDUNDANT
@ tecNO_LINE_REDUNDANT
Definition: TER.h:273
ripple::tecUNFUNDED_PAYMENT
@ tecUNFUNDED_PAYMENT
Definition: TER.h:265
ripple::tecXCHAIN_ACCOUNT_CREATE_PAST
@ tecXCHAIN_ACCOUNT_CREATE_PAST
Definition: TER.h:327
ripple::tecINTERNAL
@ tecINTERNAL
Definition: TER.h:290
ripple::TERSubset::operator=
constexpr auto operator=(T rhs) -> std::enable_if_t< Trait< T >::value, TERSubset & >
Definition: TER.h:421
ripple::tecXCHAIN_PAYMENT_FAILED
@ tecXCHAIN_PAYMENT_FAILED
Definition: TER.h:329
ripple::temBAD_AMOUNT
@ temBAD_AMOUNT
Definition: TER.h:88
ripple::tecINSUFF_FEE
@ tecINSUFF_FEE
Definition: TER.h:282
ripple::temBAD_SEND_XRP_NO_DIRECT
@ temBAD_SEND_XRP_NO_DIRECT
Definition: TER.h:100
ripple::telBAD_PATH_COUNT
@ telBAD_PATH_COUNT
Definition: TER.h:54
ripple::temBAD_SIGNATURE
@ temBAD_SIGNATURE
Definition: TER.h:104
ripple::tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE
@ tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE
Definition: TER.h:321
ripple::temUNKNOWN
@ temUNKNOWN
Definition: TER.h:123
ripple::tecPATH_PARTIAL
@ tecPATH_PARTIAL
Definition: TER.h:262
ripple::tecXCHAIN_BAD_TRANSFER_ISSUE
@ tecXCHAIN_BAD_TRANSFER_ISSUE
Definition: TER.h:316
ripple::temREDUNDANT
@ temREDUNDANT
Definition: TER.h:111
ripple::tefFAILURE
@ tefFAILURE
Definition: TER.h:160
ripple::temBAD_FEE
@ temBAD_FEE
Definition: TER.h:91
ripple::TEFcodes
TEFcodes
Definition: TER.h:142
ripple::telCAN_NOT_QUEUE_BLOCKS
@ telCAN_NOT_QUEUE_BLOCKS
Definition: TER.h:61
ripple::tecNEED_MASTER_KEY
@ tecNEED_MASTER_KEY
Definition: TER.h:288
ripple::TERSubset::TERSubset
constexpr TERSubset(int rhs)
Definition: TER.h:392
ripple::transHuman
std::string transHuman(TER code)
Definition: TER.cpp:249
ripple::tecUNFUNDED_ADD
@ tecUNFUNDED_ADD
Definition: TER.h:263
ripple::tecDIR_FULL
@ tecDIR_FULL
Definition: TER.h:267
ripple::terNO_ACCOUNT
@ terNO_ACCOUNT
Definition: TER.h:210
ripple::tecTOO_SOON
@ tecTOO_SOON
Definition: TER.h:298
ripple::tefNOT_MULTI_SIGNING
@ tefNOT_MULTI_SIGNING
Definition: TER.h:175
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::transResultInfo
bool transResultInfo(TER code, std::string &token, std::string &text)
Definition: TER.cpp:225
ripple::tefNO_AUTH_REQUIRED
@ tefNO_AUTH_REQUIRED
Definition: TER.h:168
ripple::temINVALID_ACCOUNT_ID
@ temINVALID_ACCOUNT_ID
Definition: TER.h:118
ripple::tecXCHAIN_CREATE_ACCOUNT_DISABLED
@ tecXCHAIN_CREATE_ACCOUNT_DISABLED
Definition: TER.h:332
ripple::tecNFTOKEN_BUY_SELL_MISMATCH
@ tecNFTOKEN_BUY_SELL_MISMATCH
Definition: TER.h:302
ripple::tecNO_LINE_INSUF_RESERVE
@ tecNO_LINE_INSUF_RESERVE
Definition: TER.h:272
ripple::tecINSUFFICIENT_PAYMENT
@ tecINSUFFICIENT_PAYMENT
Definition: TER.h:307
ripple::tefPAST_SEQ
@ tefPAST_SEQ
Definition: TER.h:169
ripple::tecXCHAIN_SELF_COMMIT
@ tecXCHAIN_SELF_COMMIT
Definition: TER.h:330
ripple::tecNO_LINE
@ tecNO_LINE
Definition: TER.h:281
ripple::temSEQ_AND_TICKET
@ temSEQ_AND_TICKET
Definition: TER.h:125
ripple::tecEXPIRED
@ tecEXPIRED
Definition: TER.h:294
ripple::temDISABLED
@ temDISABLED
Definition: TER.h:113
ripple::tecXCHAIN_REWARD_MISMATCH
@ tecXCHAIN_REWARD_MISMATCH
Definition: TER.h:323
ripple::tefALREADY
@ tefALREADY
Definition: TER.h:161
ripple::TERSubset::fromInt
static constexpr TERSubset fromInt(int from)
Definition: TER.h:398
ripple::terNO_AMM
@ terNO_AMM
Definition: TER.h:220
ripple::tecNO_ISSUER
@ tecNO_ISSUER
Definition: TER.h:279
ripple::tecEMPTY_DID
@ tecEMPTY_DID
Definition: TER.h:333
ripple::isTelLocal
bool isTelLocal(TER x)
Definition: TER.h:612
ripple::tefTOO_BIG
@ tefTOO_BIG
Definition: TER.h:178
ripple::tecNO_SUITABLE_NFTOKEN_PAGE
@ tecNO_SUITABLE_NFTOKEN_PAGE
Definition: TER.h:301
ripple::tecHAS_OBLIGATIONS
@ tecHAS_OBLIGATIONS
Definition: TER.h:297
ripple::tecNO_PERMISSION
@ tecNO_PERMISSION
Definition: TER.h:285
ripple::tecMAX_SEQUENCE_REACHED
@ tecMAX_SEQUENCE_REACHED
Definition: TER.h:300
ripple::tefWRONG_PRIOR
@ tefWRONG_PRIOR
Definition: TER.h:170
ripple::temRIPPLE_EMPTY
@ temRIPPLE_EMPTY
Definition: TER.h:112
ripple::tecPATH_DRY
@ tecPATH_DRY
Definition: TER.h:274
ripple::telBAD_PUBLIC_KEY
@ telBAD_PUBLIC_KEY
Definition: TER.h:55
ripple::tecINSUFFICIENT_RESERVE
@ tecINSUFFICIENT_RESERVE
Definition: TER.h:287
ripple::TERSubset::TERSubset
constexpr TERSubset()
Definition: TER.h:385
ripple::terPRE_SEQ
@ terPRE_SEQ
Definition: TER.h:214
ripple::TERcodes
TERcodes
Definition: TER.h:185
optional
ripple::temXCHAIN_BRIDGE_BAD_MIN_ACCOUNT_CREATE_AMOUNT
@ temXCHAIN_BRIDGE_BAD_MIN_ACCOUNT_CREATE_AMOUNT
Definition: TER.h:134
ripple::tefBAD_AUTH_MASTER
@ tefBAD_AUTH_MASTER
Definition: TER.h:176
ripple::tecNO_ENTRY
@ tecNO_ENTRY
Definition: TER.h:286
ripple::temBAD_PATH_LOOP
@ temBAD_PATH_LOOP
Definition: TER.h:96
ripple::temMALFORMED
@ temMALFORMED
Definition: TER.h:86
ripple::TEMcodes
TEMcodes
Definition: TER.h:72
ripple::telWRONG_NETWORK
@ telWRONG_NETWORK
Definition: TER.h:65
ripple::temINVALID_COUNT
@ temINVALID_COUNT
Definition: TER.h:120
ripple::tefEXCEPTION
@ tefEXCEPTION
Definition: TER.h:166
ripple::telNO_DST_PARTIAL
@ telNO_DST_PARTIAL
Definition: TER.h:58
ripple::temBAD_TICK_SIZE
@ temBAD_TICK_SIZE
Definition: TER.h:117
ripple::tecNO_AUTH
@ tecNO_AUTH
Definition: TER.h:280
ripple::tecCLAIM
@ tecCLAIM
Definition: TER.h:261
ripple::temBAD_EXPIRATION
@ temBAD_EXPIRATION
Definition: TER.h:90
ripple::temBAD_SEND_XRP_LIMIT
@ temBAD_SEND_XRP_LIMIT
Definition: TER.h:98
ostream
ripple::telCAN_NOT_QUEUE_BALANCE
@ telCAN_NOT_QUEUE_BALANCE
Definition: TER.h:60
ripple::tecINSUF_RESERVE_OFFER
@ tecINSUF_RESERVE_OFFER
Definition: TER.h:269
unordered_map
ripple::temXCHAIN_BRIDGE_NONDOOR_OWNER
@ temXCHAIN_BRIDGE_NONDOOR_OWNER
Definition: TER.h:133
ripple::tesSUCCESS
@ tesSUCCESS
Definition: TER.h:235
ripple::tecXCHAIN_NO_SIGNERS_LIST
@ tecXCHAIN_NO_SIGNERS_LIST
Definition: TER.h:324
ripple::temBAD_NFTOKEN_TRANSFER_FEE
@ temBAD_NFTOKEN_TRANSFER_FEE
Definition: TER.h:126
ripple::isTemMalformed
bool isTemMalformed(TER x)
Definition: TER.h:618
ripple::temBAD_WEIGHT
@ temBAD_WEIGHT
Definition: TER.h:116
ripple::tecNO_DST
@ tecNO_DST
Definition: TER.h:270
ripple::temINVALID
@ temINVALID
Definition: TER.h:109
ripple::TERSubset::operator=
constexpr TERSubset & operator=(TERSubset const &rhs)=default
ripple::tecAMM_ACCOUNT
@ tecAMM_ACCOUNT
Definition: TER.h:314
ripple::telCAN_NOT_QUEUE_BLOCKED
@ telCAN_NOT_QUEUE_BLOCKED
Definition: TER.h:62
Json::Value
Represents a JSON value.
Definition: json_value.h:145
ripple::tefBAD_SIGNATURE
@ tefBAD_SIGNATURE
Definition: TER.h:173
ripple::tecCRYPTOCONDITION_ERROR
@ tecCRYPTOCONDITION_ERROR
Definition: TER.h:292
ripple::tecXCHAIN_INSUFF_CREATE_AMOUNT
@ tecXCHAIN_INSUFF_CREATE_AMOUNT
Definition: TER.h:326
string