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