rippled
TER.cpp
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012, 2013 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #include <ripple/protocol/TER.h>
21 #include <boost/range/adaptor/transformed.hpp>
22 #include <type_traits>
23 #include <unordered_map>
24 
25 namespace ripple {
26 
27 namespace detail {
28 
29 static std::unordered_map<
33 {
34  // clang-format off
35 
36  // Macros are generally ugly, but they can help make code readable to
37  // humans without affecting the compiler.
38 #define MAKE_ERROR(code, desc) { code, { #code, desc } }
39 
40  static
44  {
45  MAKE_ERROR(tecCLAIM, "Fee claimed. Sequence used. No action."),
46  MAKE_ERROR(tecDIR_FULL, "Can not add entry to full directory."),
47  MAKE_ERROR(tecFAILED_PROCESSING, "Failed to correctly process transaction."),
48  MAKE_ERROR(tecINSUF_RESERVE_LINE, "Insufficient reserve to add trust line."),
49  MAKE_ERROR(tecINSUF_RESERVE_OFFER, "Insufficient reserve to create offer."),
50  MAKE_ERROR(tecNO_DST, "Destination does not exist. Send XRP to create it."),
51  MAKE_ERROR(tecNO_DST_INSUF_XRP, "Destination does not exist. Too little XRP sent to create it."),
52  MAKE_ERROR(tecNO_LINE_INSUF_RESERVE, "No such line. Too little reserve to create it."),
53  MAKE_ERROR(tecNO_LINE_REDUNDANT, "Can't set non-existent line to default."),
54  MAKE_ERROR(tecPATH_DRY, "Path could not send partial amount."),
55  MAKE_ERROR(tecPATH_PARTIAL, "Path could not send full amount."),
56  MAKE_ERROR(tecNO_ALTERNATIVE_KEY, "The operation would remove the ability to sign transactions with the account."),
57  MAKE_ERROR(tecNO_REGULAR_KEY, "Regular key is not set."),
58  MAKE_ERROR(tecOVERSIZE, "Object exceeded serialization limits."),
59  MAKE_ERROR(tecUNFUNDED, "Not enough XRP to satisfy the reserve requirement."),
60  MAKE_ERROR(tecUNFUNDED_ADD, "DEPRECATED."),
61  MAKE_ERROR(tecUNFUNDED_OFFER, "Insufficient balance to fund created offer."),
62  MAKE_ERROR(tecUNFUNDED_PAYMENT, "Insufficient XRP balance to send."),
63  MAKE_ERROR(tecOWNERS, "Non-zero owner count."),
64  MAKE_ERROR(tecNO_ISSUER, "Issuer account does not exist."),
65  MAKE_ERROR(tecNO_AUTH, "Not authorized to hold asset."),
66  MAKE_ERROR(tecNO_LINE, "No such line."),
67  MAKE_ERROR(tecINSUFF_FEE, "Insufficient balance to pay fee."),
68  MAKE_ERROR(tecFROZEN, "Asset is frozen."),
69  MAKE_ERROR(tecNO_TARGET, "Target account does not exist."),
70  MAKE_ERROR(tecNO_PERMISSION, "No permission to perform requested operation."),
71  MAKE_ERROR(tecNO_ENTRY, "No matching entry found."),
72  MAKE_ERROR(tecINSUFFICIENT_RESERVE, "Insufficient reserve to complete requested operation."),
73  MAKE_ERROR(tecNEED_MASTER_KEY, "The operation requires the use of the Master Key."),
74  MAKE_ERROR(tecDST_TAG_NEEDED, "A destination tag is required."),
75  MAKE_ERROR(tecINTERNAL, "An internal error has occurred during processing."),
76  MAKE_ERROR(tecCRYPTOCONDITION_ERROR, "Malformed, invalid, or mismatched conditional or fulfillment."),
77  MAKE_ERROR(tecINVARIANT_FAILED, "One or more invariants for the transaction were not satisfied."),
78  MAKE_ERROR(tecEXPIRED, "Expiration time is passed."),
79  MAKE_ERROR(tecDUPLICATE, "Ledger object already exists."),
80  MAKE_ERROR(tecKILLED, "No funds transferred and no offer created."),
81  MAKE_ERROR(tecHAS_OBLIGATIONS, "The account cannot be deleted since it has obligations."),
82  MAKE_ERROR(tecTOO_SOON, "It is too early to attempt the requested operation. Please wait."),
83  MAKE_ERROR(tecMAX_SEQUENCE_REACHED, "The maximum sequence number was reached."),
84  MAKE_ERROR(tecNO_SUITABLE_NFTOKEN_PAGE, "A suitable NFToken page could not be located."),
85  MAKE_ERROR(tecNFTOKEN_BUY_SELL_MISMATCH, "The 'Buy' and 'Sell' NFToken offers are mismatched."),
86  MAKE_ERROR(tecNFTOKEN_OFFER_TYPE_MISMATCH, "The type of NFToken offer is incorrect."),
87  MAKE_ERROR(tecCANT_ACCEPT_OWN_NFTOKEN_OFFER, "An NFToken offer cannot be claimed by its owner."),
88  MAKE_ERROR(tecINSUFFICIENT_FUNDS, "Not enough funds available to complete requested transaction."),
89  MAKE_ERROR(tecOBJECT_NOT_FOUND, "A requested object could not be located."),
90  MAKE_ERROR(tecINSUFFICIENT_PAYMENT, "The payment is not sufficient."),
91 
92  MAKE_ERROR(tefALREADY, "The exact transaction was already in this ledger."),
93  MAKE_ERROR(tefBAD_ADD_AUTH, "Not authorized to add account."),
94  MAKE_ERROR(tefBAD_AUTH, "Transaction's public key is not authorized."),
95  MAKE_ERROR(tefBAD_LEDGER, "Ledger in unexpected state."),
96  MAKE_ERROR(tefBAD_QUORUM, "Signatures provided do not meet the quorum."),
97  MAKE_ERROR(tefBAD_SIGNATURE, "A signature is provided for a non-signer."),
98  MAKE_ERROR(tefCREATED, "Can't add an already created account."),
99  MAKE_ERROR(tefEXCEPTION, "Unexpected program state."),
100  MAKE_ERROR(tefFAILURE, "Failed to apply."),
101  MAKE_ERROR(tefINTERNAL, "Internal error."),
102  MAKE_ERROR(tefMASTER_DISABLED, "Master key is disabled."),
103  MAKE_ERROR(tefMAX_LEDGER, "Ledger sequence too high."),
104  MAKE_ERROR(tefNO_AUTH_REQUIRED, "Auth is not required."),
105  MAKE_ERROR(tefNOT_MULTI_SIGNING, "Account has no appropriate list of multi-signers."),
106  MAKE_ERROR(tefPAST_SEQ, "This sequence number has already passed."),
107  MAKE_ERROR(tefWRONG_PRIOR, "This previous transaction does not match."),
108  MAKE_ERROR(tefBAD_AUTH_MASTER, "Auth for unclaimed account needs correct master key."),
109  MAKE_ERROR(tefINVARIANT_FAILED, "Fee claim violated invariants for the transaction."),
110  MAKE_ERROR(tefTOO_BIG, "Transaction affects too many items."),
111  MAKE_ERROR(tefNO_TICKET, "Ticket is not in ledger."),
112  MAKE_ERROR(tefNFTOKEN_IS_NOT_TRANSFERABLE, "The specified NFToken is not transferable."),
113 
114  MAKE_ERROR(telLOCAL_ERROR, "Local failure."),
115  MAKE_ERROR(telBAD_DOMAIN, "Domain too long."),
116  MAKE_ERROR(telBAD_PATH_COUNT, "Malformed: Too many paths."),
117  MAKE_ERROR(telBAD_PUBLIC_KEY, "Public key is not valid."),
118  MAKE_ERROR(telFAILED_PROCESSING, "Failed to correctly process transaction."),
119  MAKE_ERROR(telINSUF_FEE_P, "Fee insufficient."),
120  MAKE_ERROR(telNO_DST_PARTIAL, "Partial payment to create account not allowed."),
121  MAKE_ERROR(telCAN_NOT_QUEUE, "Can not queue at this time."),
122  MAKE_ERROR(telCAN_NOT_QUEUE_BALANCE, "Can not queue at this time: insufficient balance to pay all queued fees."),
123  MAKE_ERROR(telCAN_NOT_QUEUE_BLOCKS, "Can not queue at this time: would block later queued transaction(s)."),
124  MAKE_ERROR(telCAN_NOT_QUEUE_BLOCKED, "Can not queue at this time: blocking transaction in queue."),
125  MAKE_ERROR(telCAN_NOT_QUEUE_FEE, "Can not queue at this time: fee insufficient to replace queued transaction."),
126  MAKE_ERROR(telCAN_NOT_QUEUE_FULL, "Can not queue at this time: queue is full."),
127 
128  MAKE_ERROR(temMALFORMED, "Malformed transaction."),
129  MAKE_ERROR(temBAD_AMOUNT, "Can only send positive amounts."),
130  MAKE_ERROR(temBAD_CURRENCY, "Malformed: Bad currency."),
131  MAKE_ERROR(temBAD_EXPIRATION, "Malformed: Bad expiration."),
132  MAKE_ERROR(temBAD_FEE, "Invalid fee, negative or not XRP."),
133  MAKE_ERROR(temBAD_ISSUER, "Malformed: Bad issuer."),
134  MAKE_ERROR(temBAD_LIMIT, "Limits must be non-negative."),
135  MAKE_ERROR(temBAD_OFFER, "Malformed: Bad offer."),
136  MAKE_ERROR(temBAD_PATH, "Malformed: Bad path."),
137  MAKE_ERROR(temBAD_PATH_LOOP, "Malformed: Loop in path."),
138  MAKE_ERROR(temBAD_QUORUM, "Malformed: Quorum is unreachable."),
139  MAKE_ERROR(temBAD_REGKEY, "Malformed: Regular key cannot be same as master key."),
140  MAKE_ERROR(temBAD_SEND_XRP_LIMIT, "Malformed: Limit quality is not allowed for XRP to XRP."),
141  MAKE_ERROR(temBAD_SEND_XRP_MAX, "Malformed: Send max is not allowed for XRP to XRP."),
142  MAKE_ERROR(temBAD_SEND_XRP_NO_DIRECT, "Malformed: No Ripple direct is not allowed for XRP to XRP."),
143  MAKE_ERROR(temBAD_SEND_XRP_PARTIAL, "Malformed: Partial payment is not allowed for XRP to XRP."),
144  MAKE_ERROR(temBAD_SEND_XRP_PATHS, "Malformed: Paths are not allowed for XRP to XRP."),
145  MAKE_ERROR(temBAD_SEQUENCE, "Malformed: Sequence is not in the past."),
146  MAKE_ERROR(temBAD_SIGNATURE, "Malformed: Bad signature."),
147  MAKE_ERROR(temBAD_SIGNER, "Malformed: No signer may duplicate account or other signers."),
148  MAKE_ERROR(temBAD_SRC_ACCOUNT, "Malformed: Bad source account."),
149  MAKE_ERROR(temBAD_TRANSFER_RATE, "Malformed: Transfer rate must be >= 1.0 and <= 2.0"),
150  MAKE_ERROR(temBAD_WEIGHT, "Malformed: Weight must be a positive value."),
151  MAKE_ERROR(temDST_IS_SRC, "Destination may not be source."),
152  MAKE_ERROR(temDST_NEEDED, "Destination not specified."),
153  MAKE_ERROR(temINVALID, "The transaction is ill-formed."),
154  MAKE_ERROR(temINVALID_FLAG, "The transaction has an invalid flag."),
155  MAKE_ERROR(temREDUNDANT, "The transaction is redundant."),
156  MAKE_ERROR(temRIPPLE_EMPTY, "PathSet with no paths."),
157  MAKE_ERROR(temUNCERTAIN, "In process of determining result. Never returned."),
158  MAKE_ERROR(temUNKNOWN, "The transaction requires logic that is not implemented yet."),
159  MAKE_ERROR(temDISABLED, "The transaction requires logic that is currently disabled."),
160  MAKE_ERROR(temBAD_TICK_SIZE, "Malformed: Tick size out of range."),
161  MAKE_ERROR(temINVALID_ACCOUNT_ID, "Malformed: A field contains an invalid account ID."),
162  MAKE_ERROR(temCANNOT_PREAUTH_SELF, "Malformed: An account may not preauthorize itself."),
163  MAKE_ERROR(temINVALID_COUNT, "Malformed: Count field outside valid range."),
164  MAKE_ERROR(temSEQ_AND_TICKET, "Transaction contains a TicketSequence and a non-zero Sequence."),
165  MAKE_ERROR(temBAD_NFTOKEN_TRANSFER_FEE, "Malformed: The NFToken transfer fee must be between 1 and 5000, inclusive."),
166 
167  MAKE_ERROR(terRETRY, "Retry transaction."),
168  MAKE_ERROR(terFUNDS_SPENT, "DEPRECATED."),
169  MAKE_ERROR(terINSUF_FEE_B, "Account balance can't pay fee."),
170  MAKE_ERROR(terLAST, "DEPRECATED."),
171  MAKE_ERROR(terNO_RIPPLE, "Path does not permit rippling."),
172  MAKE_ERROR(terNO_ACCOUNT, "The source account does not exist."),
173  MAKE_ERROR(terNO_AUTH, "Not authorized to hold IOUs."),
174  MAKE_ERROR(terNO_LINE, "No such line."),
175  MAKE_ERROR(terPRE_SEQ, "Missing/inapplicable prior transaction."),
176  MAKE_ERROR(terOWNERS, "Non-zero owner count."),
177  MAKE_ERROR(terQUEUED, "Held until escalated fee drops."),
178  MAKE_ERROR(terPRE_TICKET, "Ticket is not yet in ledger."),
179 
180  MAKE_ERROR(tesSUCCESS, "The transaction was applied. Only final in a validated ledger."),
181  };
182  // clang-format on
183 
184 #undef MAKE_ERROR
185 
186  return results;
187 }
188 
189 } // namespace detail
190 
191 bool
193 {
194  auto& results = detail::transResults();
195 
196  auto const r = results.find(TERtoInt(code));
197 
198  if (r == results.end())
199  return false;
200 
201  token = r->second.first;
202  text = r->second.second;
203  return true;
204 }
205 
208 {
209  std::string token;
210  std::string text;
211 
212  return transResultInfo(code, token, text) ? token : "-";
213 }
214 
217 {
218  std::string token;
219  std::string text;
220 
221  return transResultInfo(code, token, text) ? text : "-";
222 }
223 
225 transCode(std::string const& token)
226 {
227  static auto const results = [] {
228  auto& byTer = detail::transResults();
229  auto range = boost::make_iterator_range(byTer.begin(), byTer.end());
230  auto tRange = boost::adaptors::transform(range, [](auto const& r) {
231  return std::make_pair(r.second.first, r.first);
232  });
234  tRange.begin(), tRange.end());
235  return byToken;
236  }();
237 
238  auto const r = results.find(token);
239 
240  if (r == results.end())
241  return std::nullopt;
242 
243  return TER::fromInt(r->second);
244 }
245 
246 } // namespace ripple
ripple::tecUNFUNDED_OFFER
@ tecUNFUNDED_OFFER
Definition: TER.h:248
ripple::tefNO_TICKET
@ tefNO_TICKET
Definition: TER.h:164
ripple::terPRE_TICKET
@ terPRE_TICKET
Definition: TER.h:204
ripple::tecOBJECT_NOT_FOUND
@ tecOBJECT_NOT_FOUND
Definition: TER.h:290
ripple::tecFROZEN
@ tecFROZEN
Definition: TER.h:267
ripple::tecNO_TARGET
@ tecNO_TARGET
Definition: TER.h:268
ripple::temBAD_SEND_XRP_MAX
@ temBAD_SEND_XRP_MAX
Definition: TER.h:95
ripple::tefINTERNAL
@ tefINTERNAL
Definition: TER.h:152
ripple::tecINVARIANT_FAILED
@ tecINVARIANT_FAILED
Definition: TER.h:277
ripple::tecINSUF_RESERVE_LINE
@ tecINSUF_RESERVE_LINE
Definition: TER.h:252
std::string
STL class.
ripple::temBAD_OFFER
@ temBAD_OFFER
Definition: TER.h:90
ripple::tefBAD_ADD_AUTH
@ tefBAD_ADD_AUTH
Definition: TER.h:147
ripple::terINSUF_FEE_B
@ terINSUF_FEE_B
Definition: TER.h:194
ripple::temBAD_CURRENCY
@ temBAD_CURRENCY
Definition: TER.h:85
ripple::terNO_LINE
@ terNO_LINE
Definition: TER.h:197
ripple::tecOWNERS
@ tecOWNERS
Definition: TER.h:262
ripple::telLOCAL_ERROR
@ telLOCAL_ERROR
Definition: TER.h:51
std::pair
ripple::tecINSUFFICIENT_FUNDS
@ tecINSUFFICIENT_FUNDS
Definition: TER.h:289
ripple::tefINVARIANT_FAILED
@ tefINVARIANT_FAILED
Definition: TER.h:162
ripple::tecNO_REGULAR_KEY
@ tecNO_REGULAR_KEY
Definition: TER.h:261
ripple::telCAN_NOT_QUEUE_FEE
@ telCAN_NOT_QUEUE_FEE
Definition: TER.h:62
ripple::temBAD_REGKEY
@ temBAD_REGKEY
Definition: TER.h:93
ripple::telBAD_DOMAIN
@ telBAD_DOMAIN
Definition: TER.h:52
ripple::tecDST_TAG_NEEDED
@ tecDST_TAG_NEEDED
Definition: TER.h:273
ripple::terFUNDS_SPENT
@ terFUNDS_SPENT
Definition: TER.h:193
ripple::temCANNOT_PREAUTH_SELF
@ temCANNOT_PREAUTH_SELF
Definition: TER.h:115
ripple::transToken
std::string transToken(TER code)
Definition: TER.cpp:207
ripple::telCAN_NOT_QUEUE_FULL
@ telCAN_NOT_QUEUE_FULL
Definition: TER.h:63
ripple::telCAN_NOT_QUEUE
@ telCAN_NOT_QUEUE
Definition: TER.h:58
ripple::TERUnderlyingType
int TERUnderlyingType
Definition: TER.h:37
ripple::TERtoInt
constexpr TERUnderlyingType TERtoInt(TELcodes v)
Definition: TER.h:298
ripple::tecCANT_ACCEPT_OWN_NFTOKEN_OFFER
@ tecCANT_ACCEPT_OWN_NFTOKEN_OFFER
Definition: TER.h:288
ripple::terNO_RIPPLE
@ terNO_RIPPLE
Definition: TER.h:202
ripple::temBAD_ISSUER
@ temBAD_ISSUER
Definition: TER.h:88
ripple::tefCREATED
@ tefCREATED
Definition: TER.h:150
ripple::temBAD_TRANSFER_RATE
@ temBAD_TRANSFER_RATE
Definition: TER.h:102
ripple::temBAD_PATH
@ temBAD_PATH
Definition: TER.h:91
ripple::temDST_IS_SRC
@ temDST_IS_SRC
Definition: TER.h:103
ripple::tefBAD_AUTH
@ tefBAD_AUTH
Definition: TER.h:148
ripple::detail::transResults
static std::unordered_map< TERUnderlyingType, std::pair< char const *const, char const *const > > const & transResults()
Definition: TER.cpp:32
ripple::transCode
std::optional< TER > transCode(std::string const &token)
Definition: TER.cpp:225
ripple::tecKILLED
@ tecKILLED
Definition: TER.h:280
ripple::temUNCERTAIN
@ temUNCERTAIN
Definition: TER.h:118
ripple::terQUEUED
@ terQUEUED
Definition: TER.h:203
ripple::tefBAD_QUORUM
@ tefBAD_QUORUM
Definition: TER.h:159
ripple::tecOVERSIZE
@ tecOVERSIZE
Definition: TER.h:275
ripple::tecNO_DST_INSUF_XRP
@ tecNO_DST_INSUF_XRP
Definition: TER.h:255
ripple::temINVALID_FLAG
@ temINVALID_FLAG
Definition: TER.h:106
ripple::tecNFTOKEN_OFFER_TYPE_MISMATCH
@ tecNFTOKEN_OFFER_TYPE_MISMATCH
Definition: TER.h:287
ripple::tefBAD_LEDGER
@ tefBAD_LEDGER
Definition: TER.h:149
ripple::temBAD_QUORUM
@ temBAD_QUORUM
Definition: TER.h:111
ripple::telFAILED_PROCESSING
@ telFAILED_PROCESSING
Definition: TER.h:55
ripple::tecNO_ALTERNATIVE_KEY
@ tecNO_ALTERNATIVE_KEY
Definition: TER.h:260
ripple::temBAD_SEND_XRP_PARTIAL
@ temBAD_SEND_XRP_PARTIAL
Definition: TER.h:97
ripple::tefMAX_LEDGER
@ tefMAX_LEDGER
Definition: TER.h:157
ripple::tefNFTOKEN_IS_NOT_TRANSFERABLE
@ tefNFTOKEN_IS_NOT_TRANSFERABLE
Definition: TER.h:165
ripple::tefMASTER_DISABLED
@ tefMASTER_DISABLED
Definition: TER.h:156
ripple::temBAD_LIMIT
@ temBAD_LIMIT
Definition: TER.h:89
ripple::terRETRY
@ terRETRY
Definition: TER.h:192
ripple::temBAD_SIGNER
@ temBAD_SIGNER
Definition: TER.h:110
ripple::tecDUPLICATE
@ tecDUPLICATE
Definition: TER.h:279
ripple::temBAD_SEND_XRP_PATHS
@ temBAD_SEND_XRP_PATHS
Definition: TER.h:98
ripple::TERSubset< CanCvtToTER >
ripple::terLAST
@ terLAST
Definition: TER.h:201
ripple::tecFAILED_PROCESSING
@ tecFAILED_PROCESSING
Definition: TER.h:250
ripple::temDST_NEEDED
@ temDST_NEEDED
Definition: TER.h:104
ripple::temBAD_SEQUENCE
@ temBAD_SEQUENCE
Definition: TER.h:99
ripple::terOWNERS
@ terOWNERS
Definition: TER.h:198
ripple::tecUNFUNDED
@ tecUNFUNDED
Definition: TER.h:259
ripple::temBAD_SRC_ACCOUNT
@ temBAD_SRC_ACCOUNT
Definition: TER.h:101
ripple::telINSUF_FEE_P
@ telINSUF_FEE_P
Definition: TER.h:56
ripple::terNO_AUTH
@ terNO_AUTH
Definition: TER.h:196
ripple::tecNO_LINE_REDUNDANT
@ tecNO_LINE_REDUNDANT
Definition: TER.h:257
ripple::tecUNFUNDED_PAYMENT
@ tecUNFUNDED_PAYMENT
Definition: TER.h:249
ripple::tecINTERNAL
@ tecINTERNAL
Definition: TER.h:274
ripple::temBAD_AMOUNT
@ temBAD_AMOUNT
Definition: TER.h:84
ripple::tecINSUFF_FEE
@ tecINSUFF_FEE
Definition: TER.h:266
ripple::temBAD_SEND_XRP_NO_DIRECT
@ temBAD_SEND_XRP_NO_DIRECT
Definition: TER.h:96
ripple::telBAD_PATH_COUNT
@ telBAD_PATH_COUNT
Definition: TER.h:53
ripple::temBAD_SIGNATURE
@ temBAD_SIGNATURE
Definition: TER.h:100
ripple::temUNKNOWN
@ temUNKNOWN
Definition: TER.h:119
ripple::tecPATH_PARTIAL
@ tecPATH_PARTIAL
Definition: TER.h:246
ripple::temREDUNDANT
@ temREDUNDANT
Definition: TER.h:107
ripple::tefFAILURE
@ tefFAILURE
Definition: TER.h:145
ripple::range
ClosedInterval< T > range(T low, T high)
Create a closed range interval.
Definition: RangeSet.h:53
ripple::temBAD_FEE
@ temBAD_FEE
Definition: TER.h:87
ripple::telCAN_NOT_QUEUE_BLOCKS
@ telCAN_NOT_QUEUE_BLOCKS
Definition: TER.h:60
ripple::tecNEED_MASTER_KEY
@ tecNEED_MASTER_KEY
Definition: TER.h:272
ripple::transHuman
std::string transHuman(TER code)
Definition: TER.cpp:216
ripple::tecUNFUNDED_ADD
@ tecUNFUNDED_ADD
Definition: TER.h:247
ripple::tecDIR_FULL
@ tecDIR_FULL
Definition: TER.h:251
ripple::terNO_ACCOUNT
@ terNO_ACCOUNT
Definition: TER.h:195
ripple::tecTOO_SOON
@ tecTOO_SOON
Definition: TER.h:282
ripple::tefNOT_MULTI_SIGNING
@ tefNOT_MULTI_SIGNING
Definition: TER.h:160
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::transResultInfo
bool transResultInfo(TER code, std::string &token, std::string &text)
Definition: TER.cpp:192
ripple::tefNO_AUTH_REQUIRED
@ tefNO_AUTH_REQUIRED
Definition: TER.h:153
ripple::temINVALID_ACCOUNT_ID
@ temINVALID_ACCOUNT_ID
Definition: TER.h:114
ripple::tecNFTOKEN_BUY_SELL_MISMATCH
@ tecNFTOKEN_BUY_SELL_MISMATCH
Definition: TER.h:286
ripple::tecNO_LINE_INSUF_RESERVE
@ tecNO_LINE_INSUF_RESERVE
Definition: TER.h:256
ripple::tecINSUFFICIENT_PAYMENT
@ tecINSUFFICIENT_PAYMENT
Definition: TER.h:291
ripple::tefPAST_SEQ
@ tefPAST_SEQ
Definition: TER.h:154
ripple::tecNO_LINE
@ tecNO_LINE
Definition: TER.h:265
ripple::temSEQ_AND_TICKET
@ temSEQ_AND_TICKET
Definition: TER.h:121
ripple::tecEXPIRED
@ tecEXPIRED
Definition: TER.h:278
ripple::temDISABLED
@ temDISABLED
Definition: TER.h:109
ripple::tefALREADY
@ tefALREADY
Definition: TER.h:146
ripple::TERSubset< CanCvtToTER >::fromInt
static constexpr TERSubset fromInt(int from)
Definition: TER.h:356
ripple::tecNO_ISSUER
@ tecNO_ISSUER
Definition: TER.h:263
ripple::tefTOO_BIG
@ tefTOO_BIG
Definition: TER.h:163
ripple::tecNO_SUITABLE_NFTOKEN_PAGE
@ tecNO_SUITABLE_NFTOKEN_PAGE
Definition: TER.h:285
ripple::tecHAS_OBLIGATIONS
@ tecHAS_OBLIGATIONS
Definition: TER.h:281
ripple::tecNO_PERMISSION
@ tecNO_PERMISSION
Definition: TER.h:269
ripple::tecMAX_SEQUENCE_REACHED
@ tecMAX_SEQUENCE_REACHED
Definition: TER.h:284
ripple::tefWRONG_PRIOR
@ tefWRONG_PRIOR
Definition: TER.h:155
ripple::temRIPPLE_EMPTY
@ temRIPPLE_EMPTY
Definition: TER.h:108
ripple::tecPATH_DRY
@ tecPATH_DRY
Definition: TER.h:258
ripple::telBAD_PUBLIC_KEY
@ telBAD_PUBLIC_KEY
Definition: TER.h:54
ripple::tecINSUFFICIENT_RESERVE
@ tecINSUFFICIENT_RESERVE
Definition: TER.h:271
ripple::terPRE_SEQ
@ terPRE_SEQ
Definition: TER.h:199
std::optional
std::make_pair
T make_pair(T... args)
ripple::tefBAD_AUTH_MASTER
@ tefBAD_AUTH_MASTER
Definition: TER.h:161
ripple::tecNO_ENTRY
@ tecNO_ENTRY
Definition: TER.h:270
ripple::temBAD_PATH_LOOP
@ temBAD_PATH_LOOP
Definition: TER.h:92
ripple::temMALFORMED
@ temMALFORMED
Definition: TER.h:82
ripple::temINVALID_COUNT
@ temINVALID_COUNT
Definition: TER.h:116
ripple::tefEXCEPTION
@ tefEXCEPTION
Definition: TER.h:151
ripple::telNO_DST_PARTIAL
@ telNO_DST_PARTIAL
Definition: TER.h:57
ripple::temBAD_TICK_SIZE
@ temBAD_TICK_SIZE
Definition: TER.h:113
ripple::tecNO_AUTH
@ tecNO_AUTH
Definition: TER.h:264
ripple::tecCLAIM
@ tecCLAIM
Definition: TER.h:245
ripple::temBAD_EXPIRATION
@ temBAD_EXPIRATION
Definition: TER.h:86
ripple::temBAD_SEND_XRP_LIMIT
@ temBAD_SEND_XRP_LIMIT
Definition: TER.h:94
ripple::telCAN_NOT_QUEUE_BALANCE
@ telCAN_NOT_QUEUE_BALANCE
Definition: TER.h:59
ripple::tecINSUF_RESERVE_OFFER
@ tecINSUF_RESERVE_OFFER
Definition: TER.h:253
unordered_map
ripple::tesSUCCESS
@ tesSUCCESS
Definition: TER.h:219
ripple::temBAD_NFTOKEN_TRANSFER_FEE
@ temBAD_NFTOKEN_TRANSFER_FEE
Definition: TER.h:122
type_traits
ripple::temBAD_WEIGHT
@ temBAD_WEIGHT
Definition: TER.h:112
ripple::tecNO_DST
@ tecNO_DST
Definition: TER.h:254
ripple::temINVALID
@ temINVALID
Definition: TER.h:105
ripple::telCAN_NOT_QUEUE_BLOCKED
@ telCAN_NOT_QUEUE_BLOCKED
Definition: TER.h:61
ripple::tefBAD_SIGNATURE
@ tefBAD_SIGNATURE
Definition: TER.h:158
ripple::tecCRYPTOCONDITION_ERROR
@ tecCRYPTOCONDITION_ERROR
Definition: TER.h:276