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