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