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