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
132
137};
138
139//------------------------------------------------------------------------------
140
141// Protocol-critical, mixed with custom TER wrapper type, hundreds of usages
142// NOLINTNEXTLINE(cppcoreguidelines-use-enum-class)
144 // Note: Range is stable.
145 // Exact numbers are used in ripple-binary-codec:
146 // https://github.com/XRPLF/xrpl.js/blob/main/packages/ripple-binary-codec/src/enums/definitions.json
147 // Use tokens.
148
149 // -199 .. -100: F
150 // Failure (sequence number previously used)
151 //
152 // Causes:
153 // - Transaction cannot succeed because of ledger state.
154 // - Unexpected ledger state.
155 // - C++ exception.
156 //
157 // Implications:
158 // - Not applied
159 // - Not forwarded
160 // - Could succeed in an imagined ledger.
169 tefNO_AUTH_REQUIRED, // Can't set auth if auth is not required.
187};
188
189//------------------------------------------------------------------------------
190
191// Protocol-critical, mixed with custom TER wrapper type, hundreds of usages
192// NOLINTNEXTLINE(cppcoreguidelines-use-enum-class)
194 // Note: Range is stable.
195 // Exact numbers are used in ripple-binary-codec:
196 // https://github.com/XRPLF/xrpl.js/blob/main/packages/ripple-binary-codec/src/enums/definitions.json
197 // Use tokens.
198
199 // -99 .. -1: R Retry
200 // sequence too high, no funds for txn fee, originating -account
201 // non-existent
202 //
203 // Cause:
204 // Prior application of another, possibly non-existent, transaction could
205 // allow this transaction to succeed.
206 //
207 // Implications:
208 // - Not applied
209 // - May be forwarded
210 // - Results indicating the txn was forwarded: terQUEUED
211 // - All others are not forwarded.
212 // - Might succeed later
213 // - Hold
214 // - Makes hole in sequence which jams transactions.
215 terRETRY = -99,
216 terFUNDS_SPENT, // DEPRECATED.
217 terINSUF_FEE_B, // Can't pay fee, therefore don't burden network.
218 terNO_ACCOUNT, // Can't pay fee, therefore don't burden network.
219 terNO_AUTH, // Not authorized to hold IOUs.
220 terNO_LINE, // Internal flag.
221 terOWNERS, // Can't succeed with non-zero owner count.
222 terPRE_SEQ, // Can't pay fee, no point in forwarding, so don't
223 // burden network.
224 terLAST, // DEPRECATED.
225 terNO_RIPPLE, // Rippling not allowed
226 terQUEUED, // Transaction is being held in TxQ until fee drops
227 terPRE_TICKET, // Ticket is not yet in ledger but might be on its way
228 terNO_AMM, // AMM doesn't exist for the asset pair
229 terADDRESS_COLLISION, // Failed to allocate AccountID when trying to
230 // create a pseudo-account
231 terNO_DELEGATE_PERMISSION, // Delegate does not have permission
232 terLOCKED, // MPT is locked
233 terNO_PERMISSION, // No permission but retry
234};
235
236//------------------------------------------------------------------------------
237
238// Protocol-critical, mixed with custom TER wrapper type, hundreds of usages
239// NOLINTNEXTLINE(cppcoreguidelines-use-enum-class)
241 // Note: Exact number must stay stable. This code is stored by value
242 // in metadata for historic transactions.
243
244 // 0: S Success (success)
245 // Causes:
246 // - Success.
247 // Implications:
248 // - Applied
249 // - Forwarded
251};
252
253//------------------------------------------------------------------------------
254
255// Protocol-critical, mixed with custom TER wrapper type, hundreds of usages
256// NOLINTNEXTLINE(cppcoreguidelines-use-enum-class)
258 // Note: Exact numbers must stay stable. These codes are stored by
259 // value in metadata for historic transactions.
260
261 // 100 .. 255 C
262 // Claim fee only (ripple transaction with no good paths, pay to
263 // non-existent account, no path)
264 //
265 // Causes:
266 // - Success, but does not achieve optimal result.
267 // - Invalid transaction or no effect, but claim fee to use the sequence
268 // number.
269 //
270 // Implications:
271 // - Applied
272 // - Forwarded
273 //
274 // Only allowed as a return code of appliedTransaction when !tapRETRY.
275 // Otherwise, treated as terRETRY.
276 //
277 // DO NOT CHANGE THESE NUMBERS: They appear in ledger meta data.
278 //
279 // Note:
280 // tecNO_ENTRY is often used interchangeably with tecOBJECT_NOT_FOUND.
281 // While there does not seem to be a clear rule which to use when, the
282 // following guidance will help to keep errors consistent with the
283 // majority of (but not all) transaction types:
284 // - tecNO_ENTRY : cannot find the primary ledger object on which the
285 // transaction is being attempted
286 // - tecOBJECT_NOT_FOUND : cannot find the additional object(s) needed to
287 // complete the transaction
288
289 tecCLAIM = 100,
291 tecUNFUNDED_ADD = 102, // Unused legacy code
327 tecHOOK_REJECTED [[maybe_unused]] = 153,
372 // DEPRECATED: This error code tecNO_DELEGATE_PERMISSION is reserved for
373 // backward compatibility with historical data on non-prod networks, can be
374 // reclaimed after those networks reset.
380};
381
382//------------------------------------------------------------------------------
383
384// For generic purposes, a free function that returns the value of a TE*codes.
385constexpr TERUnderlyingType
390
391constexpr TERUnderlyingType
396
397constexpr TERUnderlyingType
402
403constexpr TERUnderlyingType
408
409constexpr TERUnderlyingType
414
415constexpr TERUnderlyingType
420
421//------------------------------------------------------------------------------
422// Template class that is specific to selected ranges of error codes. The
423// Trait tells the requires-clause which ranges are allowed.
424template <template <typename> class Trait>
426{
428
429public:
430 // Constructors
432 {
433 }
434 constexpr TERSubset(TERSubset const& rhs) = default;
435 constexpr TERSubset(TERSubset&& rhs) = default;
436
437private:
438 constexpr explicit TERSubset(int rhs) : code_(rhs)
439 {
440 }
441
442public:
443 static constexpr TERSubset
444 fromInt(int from)
445 {
446 return TERSubset(from);
447 }
448
449 // Trait tells the requires-clause which types are allowed for construction.
450 template <typename T>
451 constexpr TERSubset(T rhs)
452 requires(Trait<std::remove_cv_t<std::remove_reference_t<T>>>::value)
453 : code_(TERtoInt(rhs))
454 {
455 }
456
457 // Assignment
458 constexpr TERSubset&
459 operator=(TERSubset const& rhs) = default;
460 constexpr TERSubset&
461 operator=(TERSubset&& rhs) = default;
462
463 // Trait tells the requires-clause which types are allowed for assignment.
464 template <typename T>
465 constexpr auto
467 requires(Trait<T>::value)
468 {
469 code_ = TERtoInt(rhs);
470 return *this;
471 }
472
473 // Conversion to bool.
474 explicit
475 operator bool() const
476 {
477 return code_ != tesSUCCESS;
478 }
479
480 // Conversion to json::Value allows assignment to json::Objects
481 // without casting.
482 operator json::Value() const
483 {
484 return json::Value{code_};
485 }
486
487 // Streaming operator.
489 operator<<(std::ostream& os, TERSubset const& rhs)
490 {
491 return os << rhs.code_;
492 }
493
494 // Return the underlying value. Not a member so similarly named free
495 // functions can do the same work for the enums.
496 //
497 // It's worth noting that an explicit conversion operator was considered
498 // and rejected. Consider this case, taken from Status.h
499 //
500 // class Status {
501 // int code_;
502 // public:
503 // Status (TER ter)
504 // : code_ (ter) {}
505 // }
506 //
507 // This code compiles with no errors or warnings if TER has an explicit
508 // (unnamed) conversion to int. To avoid silent conversions like these
509 // we provide (only) a named conversion.
510 friend constexpr TERUnderlyingType
512 {
513 return v.code_;
514 }
515};
516
517// Comparison operators.
518// Only enabled if both arguments return int if TERtiInt is called with them.
519template <typename L, typename R>
520constexpr auto
521operator==(L const& lhs, R const& rhs) -> bool
522 requires(
523 std::is_same_v<decltype(TERtoInt(lhs)), int> &&
524 std::is_same_v<decltype(TERtoInt(rhs)), int>)
525{
526 return TERtoInt(lhs) == TERtoInt(rhs);
527}
528
529template <typename L, typename R>
530constexpr auto
531operator!=(L const& lhs, R const& rhs) -> bool
532 requires(
533 std::is_same_v<decltype(TERtoInt(lhs)), int> &&
534 std::is_same_v<decltype(TERtoInt(rhs)), int>)
535{
536 return TERtoInt(lhs) != TERtoInt(rhs);
537}
538
539template <typename L, typename R>
540constexpr auto
541operator<(L const& lhs, R const& rhs) -> bool
542 requires(
543 std::is_same_v<decltype(TERtoInt(lhs)), int> &&
544 std::is_same_v<decltype(TERtoInt(rhs)), int>)
545{
546 return TERtoInt(lhs) < TERtoInt(rhs);
547}
548
549template <typename L, typename R>
550constexpr auto
551operator<=(L const& lhs, R const& rhs) -> bool
552 requires(
553 std::is_same_v<decltype(TERtoInt(lhs)), int> &&
554 std::is_same_v<decltype(TERtoInt(rhs)), int>)
555{
556 return TERtoInt(lhs) <= TERtoInt(rhs);
557}
558
559template <typename L, typename R>
560constexpr auto
561operator>(L const& lhs, R const& rhs) -> bool
562 requires(
563 std::is_same_v<decltype(TERtoInt(lhs)), int> &&
564 std::is_same_v<decltype(TERtoInt(rhs)), int>)
565{
566 return TERtoInt(lhs) > TERtoInt(rhs);
567}
568
569template <typename L, typename R>
570constexpr auto
571operator>=(L const& lhs, R const& rhs) -> bool
572 requires(
573 std::is_same_v<decltype(TERtoInt(lhs)), int> &&
574 std::is_same_v<decltype(TERtoInt(rhs)), int>)
575{
576 return TERtoInt(lhs) >= TERtoInt(rhs);
577}
578
579//------------------------------------------------------------------------------
580
581// Use traits to build a TERSubset that can convert from any of the TE*codes
582// enums *except* TECcodes: NotTEC
583
584// NOTE: NotTEC is useful for codes returned by preflight in transactors.
585// Preflight checks occur prior to signature checking. If preflight returned
586// a tec code, then a malicious user could submit a transaction with a very
587// large fee and have that fee charged against an account without using that
588// account's valid signature.
589template <typename FROM>
591{
592};
593template <>
595{
596};
597template <>
599{
600};
601template <>
603{
604};
605template <>
607{
608};
609template <>
611{
612};
613
615
616//------------------------------------------------------------------------------
617
618// Use traits to build a TERSubset that can convert from any of the TE*codes
619// enums as well as from NotTEC.
620template <typename FROM>
622{
623};
624template <>
626{
627};
628template <>
630{
631};
632template <>
634{
635};
636template <>
638{
639};
640template <>
642{
643};
644template <>
646{
647};
648template <>
650{
651};
652
653// TER allows all of the subsets.
655
656//------------------------------------------------------------------------------
657
658inline bool
659isTelLocal(TER x) noexcept
660{
661 return (x >= telLOCAL_ERROR && x < temMALFORMED);
662}
663
664inline bool
666{
667 return (x >= temMALFORMED && x < tefFAILURE);
668}
669
670inline bool
671isTefFailure(TER x) noexcept
672{
673 return (x >= tefFAILURE && x < terRETRY);
674}
675
676inline bool
677isTerRetry(TER x) noexcept
678{
679 return (x >= terRETRY && x < tesSUCCESS);
680}
681
682inline bool
683isTesSuccess(TER x) noexcept
684{
685 // Makes use of TERSubset::operator bool()
686 return !x;
687}
688
689inline bool
690isTecClaim(TER x) noexcept
691{
692 return (x >= tecCLAIM);
693}
694
697
698bool
699transResultInfo(TER code, std::string& token, std::string& text);
700
702transToken(TER code);
703
705transHuman(TER code);
706
708transCode(std::string const& token);
709
710} // namespace xrpl
711
712// 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:427
static constexpr TERSubset fromInt(int from)
Definition TER.h:444
constexpr TERSubset(int rhs)
Definition TER.h:438
constexpr TERSubset()
Definition TER.h:431
constexpr auto operator=(T rhs) -> TERSubset &requires(Trait< T >::value)
Definition TER.h:466
constexpr TERSubset(TERSubset const &rhs)=default
constexpr TERSubset & operator=(TERSubset &&rhs)=default
friend constexpr TERUnderlyingType TERtoInt(TERSubset v)
Definition TER.h:511
constexpr TERSubset(T rhs)
Definition TER.h:451
friend std::ostream & operator<<(std::ostream &os, TERSubset const &rhs)
Definition TER.h:489
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:193
@ terNO_AMM
Definition TER.h:228
@ terPRE_SEQ
Definition TER.h:222
@ terNO_LINE
Definition TER.h:220
@ terNO_AUTH
Definition TER.h:219
@ terLOCKED
Definition TER.h:232
@ terNO_PERMISSION
Definition TER.h:233
@ terNO_RIPPLE
Definition TER.h:225
@ terINSUF_FEE_B
Definition TER.h:217
@ terFUNDS_SPENT
Definition TER.h:216
@ terOWNERS
Definition TER.h:221
@ terLAST
Definition TER.h:224
@ terADDRESS_COLLISION
Definition TER.h:229
@ terNO_DELEGATE_PERMISSION
Definition TER.h:231
@ terNO_ACCOUNT
Definition TER.h:218
@ terPRE_TICKET
Definition TER.h:227
@ terRETRY
Definition TER.h:215
@ terQUEUED
Definition TER.h:226
bool isTerRetry(TER x) noexcept
Definition TER.h:677
int TERUnderlyingType
Definition TER.h:22
constexpr bool operator==(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
Definition base_uint.h:612
bool operator>=(STAmount const &lhs, STAmount const &rhs)
Definition STAmount.h:658
TEFcodes
Definition TER.h:143
@ tefBAD_PATH_COUNT
Definition TER.h:184
@ tefBAD_QUORUM
Definition TER.h:175
@ tefBAD_AUTH_MASTER
Definition TER.h:177
@ tefINVARIANT_FAILED
Definition TER.h:178
@ tefMAX_LEDGER
Definition TER.h:173
@ tefTOO_BIG
Definition TER.h:179
@ tefMASTER_DISABLED
Definition TER.h:172
@ tefALREADY
Definition TER.h:162
@ tefBAD_LEDGER
Definition TER.h:165
@ tefWRONG_PRIOR
Definition TER.h:171
@ tefNO_AUTH_REQUIRED
Definition TER.h:169
@ tefFAILURE
Definition TER.h:161
@ tefNO_TICKET
Definition TER.h:180
@ tefBAD_SIGNATURE
Definition TER.h:174
@ tefINVALID_LEDGER_FIX_TYPE
Definition TER.h:182
@ tefNO_DST_PARTIAL
Definition TER.h:183
@ tefNO_BYTECODE
Definition TER.h:185
@ tefINTERNAL
Definition TER.h:168
@ tefCREATED
Definition TER.h:166
@ tefBYTECODE_NOT_INCLUDED
Definition TER.h:186
@ tefNFTOKEN_IS_NOT_TRANSFERABLE
Definition TER.h:181
@ tefBAD_AUTH
Definition TER.h:164
@ tefEXCEPTION
Definition TER.h:167
@ tefPAST_SEQ
Definition TER.h:170
@ tefBAD_ADD_AUTH
Definition TER.h:163
@ tefNOT_MULTI_SIGNING
Definition TER.h:176
std::string transHuman(TER code)
Definition TER.cpp:266
bool transResultInfo(TER code, std::string &token, std::string &text)
Definition TER.cpp:242
constexpr Dest safeCast(Src s) noexcept
Definition safe_cast.h:21
std::string transToken(TER code)
Definition TER.cpp:257
bool operator!=(SecretKey const &lhs, SecretKey const &rhs)=delete
TERSubset< CanCvtToNotTEC > NotTEC
Definition TER.h:614
bool isTefFailure(TER x) noexcept
Definition TER.h:671
bool operator<=(STAmount const &lhs, STAmount const &rhs)
Definition STAmount.h:652
bool isTelLocal(TER x) noexcept
Definition TER.h:659
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:386
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
@ temTEMP_DISABLED
Definition TER.h:136
@ temBAD_FEE
Definition TER.h:80
@ temINVALID
Definition TER.h:98
@ temBAD_CIPHERTEXT
Definition TER.h:134
@ temBAD_SEQUENCE
Definition TER.h:92
@ temBAD_MPT
Definition TER.h:133
@ temINVALID_BYTECODE
Definition TER.h:135
@ 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:683
TERSubset< CanCvtToTER > TER
Definition TER.h:654
std::optional< TER > transCode(std::string const &token)
Definition TER.cpp:275
TECcodes
Definition TER.h:257
@ tecINVALID_UPDATE_TIME
Definition TER.h:362
@ tecXCHAIN_INSUFF_CREATE_AMOUNT
Definition TER.h:354
@ tecCLAIM
Definition TER.h:289
@ tecOUT_OF_GAS
Definition TER.h:378
@ tecINSUF_RESERVE_OFFER
Definition TER.h:297
@ tecBYTECODE_REJECTED
Definition TER.h:379
@ tecHOOK_REJECTED
Definition TER.h:327
@ tecDIR_FULL
Definition TER.h:295
@ tecWRONG_ASSET
Definition TER.h:368
@ tecPSEUDO_ACCOUNT
Definition TER.h:370
@ tecCANT_ACCEPT_OWN_NFTOKEN_OFFER
Definition TER.h:332
@ tecAMM_EMPTY
Definition TER.h:340
@ tecLOCKED
Definition TER.h:366
@ tecNO_LINE_INSUF_RESERVE
Definition TER.h:300
@ tecPATH_PARTIAL
Definition TER.h:290
@ tecAMM_INVALID_TOKENS
Definition TER.h:339
@ tecINSUF_RESERVE_LINE
Definition TER.h:296
@ tecNEED_MASTER_KEY
Definition TER.h:316
@ tecINSUFF_FEE
Definition TER.h:310
@ tecAMM_FAILED
Definition TER.h:338
@ tecUNFUNDED_PAYMENT
Definition TER.h:293
@ tecNO_ENTRY
Definition TER.h:314
@ tecAMM_NOT_EMPTY
Definition TER.h:341
@ tecXCHAIN_NO_SIGNERS_LIST
Definition TER.h:352
@ tecNO_TARGET
Definition TER.h:312
@ tecPATH_DRY
Definition TER.h:302
@ tecXCHAIN_SENDING_ACCOUNT_MISMATCH
Definition TER.h:353
@ tecXCHAIN_BAD_TRANSFER_ISSUE
Definition TER.h:344
@ tecINCOMPLETE
Definition TER.h:343
@ tecNO_DST_INSUF_XRP
Definition TER.h:299
@ tecUNFUNDED_AMM
Definition TER.h:336
@ tecOBJECT_NOT_FOUND
Definition TER.h:334
@ tecNO_SPONSOR_PERMISSION
Definition TER.h:377
@ tecNO_AUTH
Definition TER.h:308
@ tecEMPTY_DID
Definition TER.h:361
@ tecNO_SUITABLE_NFTOKEN_PAGE
Definition TER.h:329
@ tecXCHAIN_WRONG_CHAIN
Definition TER.h:350
@ tecINTERNAL
Definition TER.h:318
@ tecXCHAIN_PROOF_UNKNOWN_KEY
Definition TER.h:348
@ tecXCHAIN_ACCOUNT_CREATE_PAST
Definition TER.h:355
@ tecAMM_BALANCE
Definition TER.h:337
@ tecXCHAIN_PAYMENT_FAILED
Definition TER.h:357
@ tecXCHAIN_NO_CLAIM_ID
Definition TER.h:345
@ tecNO_LINE_REDUNDANT
Definition TER.h:301
@ tecFAILED_PROCESSING
Definition TER.h:294
@ tecARRAY_TOO_LARGE
Definition TER.h:365
@ tecXCHAIN_ACCOUNT_CREATE_TOO_MANY
Definition TER.h:356
@ tecNFTOKEN_BUY_SELL_MISMATCH
Definition TER.h:330
@ tecTOO_SOON
Definition TER.h:326
@ tecBAD_CREDENTIALS
Definition TER.h:367
@ tecINVARIANT_FAILED
Definition TER.h:321
@ tecFROZEN
Definition TER.h:311
@ tecAMM_ACCOUNT
Definition TER.h:342
@ tecINSUFFICIENT_FUNDS
Definition TER.h:333
@ tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE
Definition TER.h:349
@ tecUNFUNDED_OFFER
Definition TER.h:292
@ tecNO_DELEGATE_PERMISSION
Definition TER.h:375
@ tecXCHAIN_BAD_CLAIM_ID
Definition TER.h:346
@ tecBAD_PROOF
Definition TER.h:376
@ tecEXPIRED
Definition TER.h:322
@ tecNO_LINE
Definition TER.h:309
@ tecCRYPTOCONDITION_ERROR
Definition TER.h:320
@ tecNO_ALTERNATIVE_KEY
Definition TER.h:304
@ tecARRAY_EMPTY
Definition TER.h:364
@ tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR
Definition TER.h:359
@ tecUNFUNDED_ADD
Definition TER.h:291
@ tecNFTOKEN_OFFER_TYPE_MISMATCH
Definition TER.h:331
@ tecXCHAIN_CREATE_ACCOUNT_DISABLED
Definition TER.h:360
@ tecOWNERS
Definition TER.h:306
@ tecPRECISION_LOSS
Definition TER.h:371
@ tecINSUFFICIENT_RESERVE
Definition TER.h:315
@ tecXCHAIN_SELF_COMMIT
Definition TER.h:358
@ tecKILLED
Definition TER.h:324
@ tecXCHAIN_CLAIM_NO_QUORUM
Definition TER.h:347
@ tecXCHAIN_REWARD_MISMATCH
Definition TER.h:351
@ tecMAX_SEQUENCE_REACHED
Definition TER.h:328
@ tecLIMIT_EXCEEDED
Definition TER.h:369
@ tecNO_REGULAR_KEY
Definition TER.h:305
@ tecNO_PERMISSION
Definition TER.h:313
@ tecTOKEN_PAIR_NOT_FOUND
Definition TER.h:363
@ tecDST_TAG_NEEDED
Definition TER.h:317
@ tecOVERSIZE
Definition TER.h:319
@ tecNO_ISSUER
Definition TER.h:307
@ tecDUPLICATE
Definition TER.h:323
@ tecHAS_OBLIGATIONS
Definition TER.h:325
@ tecNO_DST
Definition TER.h:298
@ tecUNFUNDED
Definition TER.h:303
@ tecINSUFFICIENT_PAYMENT
Definition TER.h:335
bool isTecClaim(TER x) noexcept
Definition TER.h:690
bool operator>(STAmount const &lhs, STAmount const &rhs)
Definition STAmount.h:646
bool isTemMalformed(TER x) noexcept
Definition TER.h:665
TEScodes
Definition TER.h:240
@ tesSUCCESS
Definition TER.h:250