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