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  terSUBMITTED // Has been submitted async.
222 };
223 
224 //------------------------------------------------------------------------------
225 
227  // Note: Exact number must stay stable. This code is stored by value
228  // in metadata for historic transactions.
229 
230  // 0: S Success (success)
231  // Causes:
232  // - Success.
233  // Implications:
234  // - Applied
235  // - Forwarded
237 };
238 
239 //------------------------------------------------------------------------------
240 
242  // Note: Exact numbers must stay stable. These codes are stored by
243  // value in metadata for historic transactions.
244 
245  // 100 .. 255 C
246  // Claim fee only (ripple transaction with no good paths, pay to
247  // non-existent account, no path)
248  //
249  // Causes:
250  // - Success, but does not achieve optimal result.
251  // - Invalid transaction or no effect, but claim fee to use the sequence
252  // number.
253  //
254  // Implications:
255  // - Applied
256  // - Forwarded
257  //
258  // Only allowed as a return code of appliedTransaction when !tapRETRY.
259  // Otherwise, treated as terRETRY.
260  //
261  // DO NOT CHANGE THESE NUMBERS: They appear in ledger meta data.
262  tecCLAIM = 100,
264  tecUNFUNDED_ADD = 102, // Unused legacy code
268  tecDIR_FULL = 121,
271  tecNO_DST = 124,
275  tecPATH_DRY = 128,
276  tecUNFUNDED = 129,
279  tecOWNERS = 132,
281  tecNO_AUTH = 134,
282  tecNO_LINE = 135,
284  tecFROZEN = 137,
287  tecNO_ENTRY = 140,
291  tecINTERNAL = 144,
292  tecOVERSIZE = 145,
295  tecEXPIRED = 148,
297  tecKILLED = 150,
299  tecTOO_SOON = 152,
300  tecHOOK_REJECTED [[maybe_unused]] = 153,
335 };
336 
337 //------------------------------------------------------------------------------
338 
339 // For generic purposes, a free function that returns the value of a TE*codes.
340 constexpr TERUnderlyingType
342 {
343  return safe_cast<TERUnderlyingType>(v);
344 }
345 
346 constexpr TERUnderlyingType
348 {
349  return safe_cast<TERUnderlyingType>(v);
350 }
351 
352 constexpr TERUnderlyingType
354 {
355  return safe_cast<TERUnderlyingType>(v);
356 }
357 
358 constexpr TERUnderlyingType
360 {
361  return safe_cast<TERUnderlyingType>(v);
362 }
363 
364 constexpr TERUnderlyingType
366 {
367  return safe_cast<TERUnderlyingType>(v);
368 }
369 
370 constexpr TERUnderlyingType
372 {
373  return safe_cast<TERUnderlyingType>(v);
374 }
375 
376 //------------------------------------------------------------------------------
377 // Template class that is specific to selected ranges of error codes. The
378 // Trait tells std::enable_if which ranges are allowed.
379 template <template <typename> class Trait>
381 {
383 
384 public:
385  // Constructors
386  constexpr TERSubset() : code_(tesSUCCESS)
387  {
388  }
389  constexpr TERSubset(TERSubset const& rhs) = default;
390  constexpr TERSubset(TERSubset&& rhs) = default;
391 
392 private:
393  constexpr explicit TERSubset(int rhs) : code_(rhs)
394  {
395  }
396 
397 public:
398  static constexpr TERSubset
399  fromInt(int from)
400  {
401  return TERSubset(from);
402  }
403 
404  // Trait tells enable_if which types are allowed for construction.
405  template <
406  typename T,
407  typename = std::enable_if_t<
408  Trait<std::remove_cv_t<std::remove_reference_t<T>>>::value>>
409  constexpr TERSubset(T rhs) : code_(TERtoInt(rhs))
410  {
411  }
412 
413  // Assignment
414  constexpr TERSubset&
415  operator=(TERSubset const& rhs) = default;
416  constexpr TERSubset&
417  operator=(TERSubset&& rhs) = default;
418 
419  // Trait tells enable_if which types are allowed for assignment.
420  template <typename T>
421  constexpr auto
423  {
424  code_ = TERtoInt(rhs);
425  return *this;
426  }
427 
428  // Conversion to bool.
429  explicit operator bool() const
430  {
431  return code_ != tesSUCCESS;
432  }
433 
434  // Conversion to Json::Value allows assignment to Json::Objects
435  // without casting.
436  operator Json::Value() const
437  {
438  return Json::Value{code_};
439  }
440 
441  // Streaming operator.
442  friend std::ostream&
444  {
445  return os << rhs.code_;
446  }
447 
448  // Return the underlying value. Not a member so similarly named free
449  // functions can do the same work for the enums.
450  //
451  // It's worth noting that an explicit conversion operator was considered
452  // and rejected. Consider this case, taken from Status.h
453  //
454  // class Status {
455  // int code_;
456  // public:
457  // Status (TER ter)
458  // : code_ (ter) {}
459  // }
460  //
461  // This code compiles with no errors or warnings if TER has an explicit
462  // (unnamed) conversion to int. To avoid silent conversions like these
463  // we provide (only) a named conversion.
464  friend constexpr TERUnderlyingType
466  {
467  return v.code_;
468  }
469 };
470 
471 // Comparison operators.
472 // Only enabled if both arguments return int if TERtiInt is called with them.
473 template <typename L, typename R>
474 constexpr auto
475 operator==(L const& lhs, R const& rhs) -> std::enable_if_t<
476  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
477  std::is_same<decltype(TERtoInt(rhs)), int>::value,
478  bool>
479 {
480  return TERtoInt(lhs) == TERtoInt(rhs);
481 }
482 
483 template <typename L, typename R>
484 constexpr auto
485 operator!=(L const& lhs, R const& rhs) -> std::enable_if_t<
486  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
487  std::is_same<decltype(TERtoInt(rhs)), int>::value,
488  bool>
489 {
490  return TERtoInt(lhs) != TERtoInt(rhs);
491 }
492 
493 template <typename L, typename R>
494 constexpr auto
495 operator<(L const& lhs, R const& rhs) -> std::enable_if_t<
496  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
497  std::is_same<decltype(TERtoInt(rhs)), int>::value,
498  bool>
499 {
500  return TERtoInt(lhs) < TERtoInt(rhs);
501 }
502 
503 template <typename L, typename R>
504 constexpr auto
505 operator<=(L const& lhs, R const& rhs) -> std::enable_if_t<
506  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
507  std::is_same<decltype(TERtoInt(rhs)), int>::value,
508  bool>
509 {
510  return TERtoInt(lhs) <= TERtoInt(rhs);
511 }
512 
513 template <typename L, typename R>
514 constexpr auto
515 operator>(L const& lhs, R const& rhs) -> std::enable_if_t<
516  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
517  std::is_same<decltype(TERtoInt(rhs)), int>::value,
518  bool>
519 {
520  return TERtoInt(lhs) > TERtoInt(rhs);
521 }
522 
523 template <typename L, typename R>
524 constexpr auto
525 operator>=(L const& lhs, R const& rhs) -> std::enable_if_t<
526  std::is_same<decltype(TERtoInt(lhs)), int>::value &&
527  std::is_same<decltype(TERtoInt(rhs)), int>::value,
528  bool>
529 {
530  return TERtoInt(lhs) >= TERtoInt(rhs);
531 }
532 
533 //------------------------------------------------------------------------------
534 
535 // Use traits to build a TERSubset that can convert from any of the TE*codes
536 // enums *except* TECcodes: NotTEC
537 
538 // NOTE: NotTEC is useful for codes returned by preflight in transactors.
539 // Preflight checks occur prior to signature checking. If preflight returned
540 // a tec code, then a malicious user could submit a transaction with a very
541 // large fee and have that fee charged against an account without using that
542 // account's valid signature.
543 template <typename FROM>
545 {
546 };
547 template <>
549 {
550 };
551 template <>
553 {
554 };
555 template <>
557 {
558 };
559 template <>
561 {
562 };
563 template <>
565 {
566 };
567 
569 
570 //------------------------------------------------------------------------------
571 
572 // Use traits to build a TERSubset that can convert from any of the TE*codes
573 // enums as well as from NotTEC.
574 template <typename FROM>
576 {
577 };
578 template <>
580 {
581 };
582 template <>
584 {
585 };
586 template <>
588 {
589 };
590 template <>
592 {
593 };
594 template <>
596 {
597 };
598 template <>
600 {
601 };
602 template <>
604 {
605 };
606 
607 // TER allows all of the subsets.
609 
610 //------------------------------------------------------------------------------
611 
612 inline bool
614 {
615  return ((x) >= telLOCAL_ERROR && (x) < temMALFORMED);
616 }
617 
618 inline bool
620 {
621  return ((x) >= temMALFORMED && (x) < tefFAILURE);
622 }
623 
624 inline bool
626 {
627  return ((x) >= tefFAILURE && (x) < terRETRY);
628 }
629 
630 inline bool
632 {
633  return ((x) >= terRETRY && (x) < tesSUCCESS);
634 }
635 
636 inline bool
638 {
639  return ((x) == tesSUCCESS);
640 }
641 
642 inline bool
644 {
645  return ((x) >= tecCLAIM);
646 }
647 
651 transResults();
652 
653 bool
654 transResultInfo(TER code, std::string& token, std::string& text);
655 
657 transToken(TER code);
658 
660 transHuman(TER code);
661 
663 transCode(std::string const& token);
664 
665 } // namespace ripple
666 
667 #endif
ripple::tecUNFUNDED_OFFER
@ tecUNFUNDED_OFFER
Definition: TER.h:265
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:329
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:307
std::is_same
ripple::tecFROZEN
@ tecFROZEN
Definition: TER.h:284
ripple::tecUNFUNDED_AMM
@ tecUNFUNDED_AMM
Definition: TER.h:309
ripple::tecXCHAIN_BAD_CLAIM_ID
@ tecXCHAIN_BAD_CLAIM_ID
Definition: TER.h:319
std::false_type
ripple::tecNO_TARGET
@ tecNO_TARGET
Definition: TER.h:285
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:294
ripple::tecINSUF_RESERVE_LINE
@ tecINSUF_RESERVE_LINE
Definition: TER.h:269
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:321
ripple::TERSubset::code_
TERUnderlyingType code_
Definition: TER.h:382
ripple::tefBAD_ADD_AUTH
@ tefBAD_ADD_AUTH
Definition: TER.h:162
ripple::tecXCHAIN_CLAIM_NO_QUORUM
@ tecXCHAIN_CLAIM_NO_QUORUM
Definition: TER.h:320
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:226
ripple::TERSubset::operator<<
friend std::ostream & operator<<(std::ostream &os, TERSubset const &rhs)
Definition: TER.h:443
ripple::terNO_LINE
@ terNO_LINE
Definition: TER.h:212
ripple::tecOWNERS
@ tecOWNERS
Definition: TER.h:279
ripple::isTesSuccess
bool isTesSuccess(TER x)
Definition: TER.h:637
ripple::telLOCAL_ERROR
@ telLOCAL_ERROR
Definition: TER.h:52
std::pair
ripple::tecINSUFFICIENT_FUNDS
@ tecINSUFFICIENT_FUNDS
Definition: TER.h:306
ripple::tefINVARIANT_FAILED
@ tefINVARIANT_FAILED
Definition: TER.h:177
ripple::tecNO_REGULAR_KEY
@ tecNO_REGULAR_KEY
Definition: TER.h:278
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:241
ripple::temBAD_REGKEY
@ temBAD_REGKEY
Definition: TER.h:97
ripple::tecXCHAIN_WRONG_CHAIN
@ tecXCHAIN_WRONG_CHAIN
Definition: TER.h:323
ripple::tecXCHAIN_SENDING_ACCOUNT_MISMATCH
@ tecXCHAIN_SENDING_ACCOUNT_MISMATCH
Definition: TER.h:326
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:544
ripple::tecDST_TAG_NEEDED
@ tecDST_TAG_NEEDED
Definition: TER.h:290
ripple::TERSubset::TERtoInt
constexpr friend TERUnderlyingType TERtoInt(TERSubset v)
Definition: TER.h:465
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:313
ripple::tecXCHAIN_NO_CLAIM_ID
@ tecXCHAIN_NO_CLAIM_ID
Definition: TER.h:318
ripple::transToken
std::string transToken(TER code)
Definition: TER.cpp:241
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:300
ripple::temEMPTY_DID
@ temEMPTY_DID
Definition: TER.h:137
ripple::CanCvtToTER
Definition: TER.h:575
ripple::TERtoInt
constexpr TERUnderlyingType TERtoInt(TELcodes v)
Definition: TER.h:341
ripple::tecCANT_ACCEPT_OWN_NFTOKEN_OFFER
@ tecCANT_ACCEPT_OWN_NFTOKEN_OFFER
Definition: TER.h:305
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:316
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:643
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:311
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:259
ripple::temXCHAIN_BRIDGE_BAD_ISSUES
@ temXCHAIN_BRIDGE_BAD_ISSUES
Definition: TER.h:132
ripple::tecKILLED
@ tecKILLED
Definition: TER.h:297
ripple::temUNCERTAIN
@ temUNCERTAIN
Definition: TER.h:122
ripple::terQUEUED
@ terQUEUED
Definition: TER.h:218
ripple::isTerRetry
bool isTerRetry(TER x)
Definition: TER.h:631
ripple::TERSubset::TERSubset
constexpr TERSubset(T rhs)
Definition: TER.h:409
ripple::tefBAD_QUORUM
@ tefBAD_QUORUM
Definition: TER.h:174
ripple::tecOVERSIZE
@ tecOVERSIZE
Definition: TER.h:292
ripple::tecNO_DST_INSUF_XRP
@ tecNO_DST_INSUF_XRP
Definition: TER.h:272
ripple::tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR
@ tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR
Definition: TER.h:332
ripple::temINVALID_FLAG
@ temINVALID_FLAG
Definition: TER.h:110
ripple::tecNFTOKEN_OFFER_TYPE_MISMATCH
@ tecNFTOKEN_OFFER_TYPE_MISMATCH
Definition: TER.h:304
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:314
ripple::tecNO_ALTERNATIVE_KEY
@ tecNO_ALTERNATIVE_KEY
Definition: TER.h:277
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:296
ripple::tecAMM_INVALID_TOKENS
@ tecAMM_INVALID_TOKENS
Definition: TER.h:312
ripple::temBAD_SEND_XRP_PATHS
@ temBAD_SEND_XRP_PATHS
Definition: TER.h:102
ripple::TERSubset
Definition: TER.h:380
ripple::terLAST
@ terLAST
Definition: TER.h:216
ripple::tecFAILED_PROCESSING
@ tecFAILED_PROCESSING
Definition: TER.h:267
ripple::isTefFailure
bool isTefFailure(TER x)
Definition: TER.h:625
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:310
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:276
ripple::TER
TERSubset< CanCvtToTER > TER
Definition: TER.h:608
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:274
ripple::tecUNFUNDED_PAYMENT
@ tecUNFUNDED_PAYMENT
Definition: TER.h:266
ripple::tecXCHAIN_ACCOUNT_CREATE_PAST
@ tecXCHAIN_ACCOUNT_CREATE_PAST
Definition: TER.h:328
ripple::tecINTERNAL
@ tecINTERNAL
Definition: TER.h:291
ripple::TERSubset::operator=
constexpr auto operator=(T rhs) -> std::enable_if_t< Trait< T >::value, TERSubset & >
Definition: TER.h:422
ripple::tecXCHAIN_PAYMENT_FAILED
@ tecXCHAIN_PAYMENT_FAILED
Definition: TER.h:330
ripple::temBAD_AMOUNT
@ temBAD_AMOUNT
Definition: TER.h:88
ripple::tecINSUFF_FEE
@ tecINSUFF_FEE
Definition: TER.h:283
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:322
ripple::temUNKNOWN
@ temUNKNOWN
Definition: TER.h:123
ripple::tecPATH_PARTIAL
@ tecPATH_PARTIAL
Definition: TER.h:263
ripple::tecXCHAIN_BAD_TRANSFER_ISSUE
@ tecXCHAIN_BAD_TRANSFER_ISSUE
Definition: TER.h:317
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:289
ripple::TERSubset::TERSubset
constexpr TERSubset(int rhs)
Definition: TER.h:393
ripple::transHuman
std::string transHuman(TER code)
Definition: TER.cpp:250
ripple::tecUNFUNDED_ADD
@ tecUNFUNDED_ADD
Definition: TER.h:264
ripple::tecDIR_FULL
@ tecDIR_FULL
Definition: TER.h:268
ripple::terNO_ACCOUNT
@ terNO_ACCOUNT
Definition: TER.h:210
ripple::tecTOO_SOON
@ tecTOO_SOON
Definition: TER.h:299
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:226
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:333
ripple::tecNFTOKEN_BUY_SELL_MISMATCH
@ tecNFTOKEN_BUY_SELL_MISMATCH
Definition: TER.h:303
ripple::tecNO_LINE_INSUF_RESERVE
@ tecNO_LINE_INSUF_RESERVE
Definition: TER.h:273
ripple::tecINSUFFICIENT_PAYMENT
@ tecINSUFFICIENT_PAYMENT
Definition: TER.h:308
ripple::tefPAST_SEQ
@ tefPAST_SEQ
Definition: TER.h:169
ripple::tecXCHAIN_SELF_COMMIT
@ tecXCHAIN_SELF_COMMIT
Definition: TER.h:331
ripple::terSUBMITTED
@ terSUBMITTED
Definition: TER.h:221
ripple::tecNO_LINE
@ tecNO_LINE
Definition: TER.h:282
ripple::temSEQ_AND_TICKET
@ temSEQ_AND_TICKET
Definition: TER.h:125
ripple::tecEXPIRED
@ tecEXPIRED
Definition: TER.h:295
ripple::temDISABLED
@ temDISABLED
Definition: TER.h:113
ripple::tecXCHAIN_REWARD_MISMATCH
@ tecXCHAIN_REWARD_MISMATCH
Definition: TER.h:324
ripple::tefALREADY
@ tefALREADY
Definition: TER.h:161
ripple::TERSubset::fromInt
static constexpr TERSubset fromInt(int from)
Definition: TER.h:399
ripple::terNO_AMM
@ terNO_AMM
Definition: TER.h:220
ripple::tecNO_ISSUER
@ tecNO_ISSUER
Definition: TER.h:280
ripple::tecEMPTY_DID
@ tecEMPTY_DID
Definition: TER.h:334
ripple::isTelLocal
bool isTelLocal(TER x)
Definition: TER.h:613
ripple::tefTOO_BIG
@ tefTOO_BIG
Definition: TER.h:178
ripple::tecNO_SUITABLE_NFTOKEN_PAGE
@ tecNO_SUITABLE_NFTOKEN_PAGE
Definition: TER.h:302
ripple::tecHAS_OBLIGATIONS
@ tecHAS_OBLIGATIONS
Definition: TER.h:298
ripple::tecNO_PERMISSION
@ tecNO_PERMISSION
Definition: TER.h:286
ripple::tecMAX_SEQUENCE_REACHED
@ tecMAX_SEQUENCE_REACHED
Definition: TER.h:301
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:275
ripple::telBAD_PUBLIC_KEY
@ telBAD_PUBLIC_KEY
Definition: TER.h:55
ripple::tecINSUFFICIENT_RESERVE
@ tecINSUFFICIENT_RESERVE
Definition: TER.h:288
ripple::TERSubset::TERSubset
constexpr TERSubset()
Definition: TER.h:386
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:287
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:281
ripple::tecCLAIM
@ tecCLAIM
Definition: TER.h:262
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:270
unordered_map
ripple::temXCHAIN_BRIDGE_NONDOOR_OWNER
@ temXCHAIN_BRIDGE_NONDOOR_OWNER
Definition: TER.h:133
ripple::tesSUCCESS
@ tesSUCCESS
Definition: TER.h:236
ripple::tecXCHAIN_NO_SIGNERS_LIST
@ tecXCHAIN_NO_SIGNERS_LIST
Definition: TER.h:325
ripple::temBAD_NFTOKEN_TRANSFER_FEE
@ temBAD_NFTOKEN_TRANSFER_FEE
Definition: TER.h:126
ripple::isTemMalformed
bool isTemMalformed(TER x)
Definition: TER.h:619
ripple::temBAD_WEIGHT
@ temBAD_WEIGHT
Definition: TER.h:116
ripple::tecNO_DST
@ tecNO_DST
Definition: TER.h:271
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:315
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:293
ripple::tecXCHAIN_INSUFF_CREATE_AMOUNT
@ tecXCHAIN_INSUFF_CREATE_AMOUNT
Definition: TER.h:327
string