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