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 
24 namespace ripple {
25 
30 {
31  // clang-format off
32 
33  // Macros are generally ugly, but they can help make code readable to
34  // humans without affecting the compiler.
35 #define MAKE_ERROR(code, desc) { code, { #code, desc } }
36 
37  static
41  {
42  MAKE_ERROR(tecAMM_BALANCE, "AMM has invalid balance."),
43  MAKE_ERROR(tecAMM_INVALID_TOKENS, "AMM invalid LP tokens."),
44  MAKE_ERROR(tecAMM_FAILED, "AMM transaction failed."),
45  MAKE_ERROR(tecAMM_EMPTY, "AMM is in empty state."),
46  MAKE_ERROR(tecAMM_NOT_EMPTY, "AMM is not in empty state."),
47  MAKE_ERROR(tecAMM_ACCOUNT, "This operation is not allowed on an AMM Account."),
48  MAKE_ERROR(tecCLAIM, "Fee claimed. Sequence used. No action."),
49  MAKE_ERROR(tecDIR_FULL, "Can not add entry to full directory."),
50  MAKE_ERROR(tecFAILED_PROCESSING, "Failed to correctly process transaction."),
51  MAKE_ERROR(tecINSUF_RESERVE_LINE, "Insufficient reserve to add trust line."),
52  MAKE_ERROR(tecINSUF_RESERVE_OFFER, "Insufficient reserve to create offer."),
53  MAKE_ERROR(tecNO_DST, "Destination does not exist. Send XRP to create it."),
54  MAKE_ERROR(tecNO_DST_INSUF_XRP, "Destination does not exist. Too little XRP sent to create it."),
55  MAKE_ERROR(tecNO_LINE_INSUF_RESERVE, "No such line. Too little reserve to create it."),
56  MAKE_ERROR(tecNO_LINE_REDUNDANT, "Can't set non-existent line to default."),
57  MAKE_ERROR(tecPATH_DRY, "Path could not send partial amount."),
58  MAKE_ERROR(tecPATH_PARTIAL, "Path could not send full amount."),
59  MAKE_ERROR(tecNO_ALTERNATIVE_KEY, "The operation would remove the ability to sign transactions with the account."),
60  MAKE_ERROR(tecNO_REGULAR_KEY, "Regular key is not set."),
61  MAKE_ERROR(tecOVERSIZE, "Object exceeded serialization limits."),
62  MAKE_ERROR(tecUNFUNDED, "Not enough XRP to satisfy the reserve requirement."),
63  MAKE_ERROR(tecUNFUNDED_ADD, "DEPRECATED."),
64  MAKE_ERROR(tecUNFUNDED_AMM, "Insufficient balance to fund AMM."),
65  MAKE_ERROR(tecUNFUNDED_OFFER, "Insufficient balance to fund created offer."),
66  MAKE_ERROR(tecUNFUNDED_PAYMENT, "Insufficient XRP balance to send."),
67  MAKE_ERROR(tecOWNERS, "Non-zero owner count."),
68  MAKE_ERROR(tecNO_ISSUER, "Issuer account does not exist."),
69  MAKE_ERROR(tecNO_AUTH, "Not authorized to hold asset."),
70  MAKE_ERROR(tecNO_LINE, "No such line."),
71  MAKE_ERROR(tecINSUFF_FEE, "Insufficient balance to pay fee."),
72  MAKE_ERROR(tecFROZEN, "Asset is frozen."),
73  MAKE_ERROR(tecNO_TARGET, "Target account does not exist."),
74  MAKE_ERROR(tecNO_PERMISSION, "No permission to perform requested operation."),
75  MAKE_ERROR(tecNO_ENTRY, "No matching entry found."),
76  MAKE_ERROR(tecINSUFFICIENT_RESERVE, "Insufficient reserve to complete requested operation."),
77  MAKE_ERROR(tecNEED_MASTER_KEY, "The operation requires the use of the Master Key."),
78  MAKE_ERROR(tecDST_TAG_NEEDED, "A destination tag is required."),
79  MAKE_ERROR(tecINTERNAL, "An internal error has occurred during processing."),
80  MAKE_ERROR(tecCRYPTOCONDITION_ERROR, "Malformed, invalid, or mismatched conditional or fulfillment."),
81  MAKE_ERROR(tecINVARIANT_FAILED, "One or more invariants for the transaction were not satisfied."),
82  MAKE_ERROR(tecEXPIRED, "Expiration time is passed."),
83  MAKE_ERROR(tecDUPLICATE, "Ledger object already exists."),
84  MAKE_ERROR(tecKILLED, "No funds transferred and no offer created."),
85  MAKE_ERROR(tecHAS_OBLIGATIONS, "The account cannot be deleted since it has obligations."),
86  MAKE_ERROR(tecTOO_SOON, "It is too early to attempt the requested operation. Please wait."),
87  MAKE_ERROR(tecMAX_SEQUENCE_REACHED, "The maximum sequence number was reached."),
88  MAKE_ERROR(tecNO_SUITABLE_NFTOKEN_PAGE, "A suitable NFToken page could not be located."),
89  MAKE_ERROR(tecNFTOKEN_BUY_SELL_MISMATCH, "The 'Buy' and 'Sell' NFToken offers are mismatched."),
90  MAKE_ERROR(tecNFTOKEN_OFFER_TYPE_MISMATCH, "The type of NFToken offer is incorrect."),
91  MAKE_ERROR(tecCANT_ACCEPT_OWN_NFTOKEN_OFFER, "An NFToken offer cannot be claimed by its owner."),
92  MAKE_ERROR(tecINSUFFICIENT_FUNDS, "Not enough funds available to complete requested transaction."),
93  MAKE_ERROR(tecOBJECT_NOT_FOUND, "A requested object could not be located."),
94  MAKE_ERROR(tecINSUFFICIENT_PAYMENT, "The payment is not sufficient."),
95  MAKE_ERROR(tecINCOMPLETE, "Some work was completed, but more submissions required to finish."),
96  MAKE_ERROR(tecXCHAIN_BAD_TRANSFER_ISSUE, "Bad xchain transfer issue."),
97  MAKE_ERROR(tecXCHAIN_NO_CLAIM_ID, "No such xchain claim id."),
98  MAKE_ERROR(tecXCHAIN_BAD_CLAIM_ID, "Bad xchain claim id."),
99  MAKE_ERROR(tecXCHAIN_CLAIM_NO_QUORUM, "Quorum was not reached on the xchain claim."),
100  MAKE_ERROR(tecXCHAIN_PROOF_UNKNOWN_KEY, "Unknown key for the xchain proof."),
101  MAKE_ERROR(tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE, "Only XRP may be used for xchain create account."),
102  MAKE_ERROR(tecXCHAIN_WRONG_CHAIN, "XChain Transaction was submitted to the wrong chain."),
103  MAKE_ERROR(tecXCHAIN_REWARD_MISMATCH, "The reward amount must match the reward specified in the xchain bridge."),
104  MAKE_ERROR(tecXCHAIN_NO_SIGNERS_LIST, "The account did not have a signers list."),
105  MAKE_ERROR(tecXCHAIN_SENDING_ACCOUNT_MISMATCH,"The sending account did not match the expected sending account."),
106  MAKE_ERROR(tecXCHAIN_INSUFF_CREATE_AMOUNT, "Insufficient amount to create an account."),
107  MAKE_ERROR(tecXCHAIN_ACCOUNT_CREATE_PAST, "The account create count has already passed."),
108  MAKE_ERROR(tecXCHAIN_ACCOUNT_CREATE_TOO_MANY, "There are too many pending account create transactions to submit a new one."),
109  MAKE_ERROR(tecXCHAIN_PAYMENT_FAILED, "Failed to transfer funds in a xchain transaction."),
110  MAKE_ERROR(tecXCHAIN_SELF_COMMIT, "Account cannot commit funds to itself."),
111  MAKE_ERROR(tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR, "Bad public key account pair in an xchain transaction."),
112  MAKE_ERROR(tecXCHAIN_CREATE_ACCOUNT_DISABLED, "This bridge does not support account creation."),
113  MAKE_ERROR(tecEMPTY_DID, "The DID object did not have a URI or DIDDocument field."),
114 
115  MAKE_ERROR(tefALREADY, "The exact transaction was already in this ledger."),
116  MAKE_ERROR(tefBAD_ADD_AUTH, "Not authorized to add account."),
117  MAKE_ERROR(tefBAD_AUTH, "Transaction's public key is not authorized."),
118  MAKE_ERROR(tefBAD_LEDGER, "Ledger in unexpected state."),
119  MAKE_ERROR(tefBAD_QUORUM, "Signatures provided do not meet the quorum."),
120  MAKE_ERROR(tefBAD_SIGNATURE, "A signature is provided for a non-signer."),
121  MAKE_ERROR(tefCREATED, "Can't add an already created account."),
122  MAKE_ERROR(tefEXCEPTION, "Unexpected program state."),
123  MAKE_ERROR(tefFAILURE, "Failed to apply."),
124  MAKE_ERROR(tefINTERNAL, "Internal error."),
125  MAKE_ERROR(tefMASTER_DISABLED, "Master key is disabled."),
126  MAKE_ERROR(tefMAX_LEDGER, "Ledger sequence too high."),
127  MAKE_ERROR(tefNO_AUTH_REQUIRED, "Auth is not required."),
128  MAKE_ERROR(tefNOT_MULTI_SIGNING, "Account has no appropriate list of multi-signers."),
129  MAKE_ERROR(tefPAST_SEQ, "This sequence number has already passed."),
130  MAKE_ERROR(tefWRONG_PRIOR, "This previous transaction does not match."),
131  MAKE_ERROR(tefBAD_AUTH_MASTER, "Auth for unclaimed account needs correct master key."),
132  MAKE_ERROR(tefINVARIANT_FAILED, "Fee claim violated invariants for the transaction."),
133  MAKE_ERROR(tefTOO_BIG, "Transaction affects too many items."),
134  MAKE_ERROR(tefNO_TICKET, "Ticket is not in ledger."),
135  MAKE_ERROR(tefNFTOKEN_IS_NOT_TRANSFERABLE, "The specified NFToken is not transferable."),
136 
137  MAKE_ERROR(telLOCAL_ERROR, "Local failure."),
138  MAKE_ERROR(telBAD_DOMAIN, "Domain too long."),
139  MAKE_ERROR(telBAD_PATH_COUNT, "Malformed: Too many paths."),
140  MAKE_ERROR(telBAD_PUBLIC_KEY, "Public key is not valid."),
141  MAKE_ERROR(telFAILED_PROCESSING, "Failed to correctly process transaction."),
142  MAKE_ERROR(telINSUF_FEE_P, "Fee insufficient."),
143  MAKE_ERROR(telNO_DST_PARTIAL, "Partial payment to create account not allowed."),
144  MAKE_ERROR(telCAN_NOT_QUEUE, "Can not queue at this time."),
145  MAKE_ERROR(telCAN_NOT_QUEUE_BALANCE, "Can not queue at this time: insufficient balance to pay all queued fees."),
146  MAKE_ERROR(telCAN_NOT_QUEUE_BLOCKS, "Can not queue at this time: would block later queued transaction(s)."),
147  MAKE_ERROR(telCAN_NOT_QUEUE_BLOCKED, "Can not queue at this time: blocking transaction in queue."),
148  MAKE_ERROR(telCAN_NOT_QUEUE_FEE, "Can not queue at this time: fee insufficient to replace queued transaction."),
149  MAKE_ERROR(telCAN_NOT_QUEUE_FULL, "Can not queue at this time: queue is full."),
150  MAKE_ERROR(telWRONG_NETWORK, "Transaction specifies a Network ID that differs from that of the local node."),
151  MAKE_ERROR(telREQUIRES_NETWORK_ID, "Transactions submitted to this node/network must include a correct NetworkID field."),
152  MAKE_ERROR(telNETWORK_ID_MAKES_TX_NON_CANONICAL, "Transactions submitted to this node/network must NOT include a NetworkID field."),
153 
154  MAKE_ERROR(temMALFORMED, "Malformed transaction."),
155  MAKE_ERROR(temBAD_AMM_TOKENS, "Malformed: Invalid LPTokens."),
156  MAKE_ERROR(temBAD_AMOUNT, "Can only send positive amounts."),
157  MAKE_ERROR(temBAD_CURRENCY, "Malformed: Bad currency."),
158  MAKE_ERROR(temBAD_EXPIRATION, "Malformed: Bad expiration."),
159  MAKE_ERROR(temBAD_FEE, "Invalid fee, negative or not XRP."),
160  MAKE_ERROR(temBAD_ISSUER, "Malformed: Bad issuer."),
161  MAKE_ERROR(temBAD_LIMIT, "Limits must be non-negative."),
162  MAKE_ERROR(temBAD_OFFER, "Malformed: Bad offer."),
163  MAKE_ERROR(temBAD_PATH, "Malformed: Bad path."),
164  MAKE_ERROR(temBAD_PATH_LOOP, "Malformed: Loop in path."),
165  MAKE_ERROR(temBAD_QUORUM, "Malformed: Quorum is unreachable."),
166  MAKE_ERROR(temBAD_REGKEY, "Malformed: Regular key cannot be same as master key."),
167  MAKE_ERROR(temBAD_SEND_XRP_LIMIT, "Malformed: Limit quality is not allowed for XRP to XRP."),
168  MAKE_ERROR(temBAD_SEND_XRP_MAX, "Malformed: Send max is not allowed for XRP to XRP."),
169  MAKE_ERROR(temBAD_SEND_XRP_NO_DIRECT, "Malformed: No Ripple direct is not allowed for XRP to XRP."),
170  MAKE_ERROR(temBAD_SEND_XRP_PARTIAL, "Malformed: Partial payment is not allowed for XRP to XRP."),
171  MAKE_ERROR(temBAD_SEND_XRP_PATHS, "Malformed: Paths are not allowed for XRP to XRP."),
172  MAKE_ERROR(temBAD_SEQUENCE, "Malformed: Sequence is not in the past."),
173  MAKE_ERROR(temBAD_SIGNATURE, "Malformed: Bad signature."),
174  MAKE_ERROR(temBAD_SIGNER, "Malformed: No signer may duplicate account or other signers."),
175  MAKE_ERROR(temBAD_SRC_ACCOUNT, "Malformed: Bad source account."),
176  MAKE_ERROR(temBAD_TRANSFER_RATE, "Malformed: Transfer rate must be >= 1.0 and <= 2.0"),
177  MAKE_ERROR(temBAD_WEIGHT, "Malformed: Weight must be a positive value."),
178  MAKE_ERROR(temDST_IS_SRC, "Destination may not be source."),
179  MAKE_ERROR(temDST_NEEDED, "Destination not specified."),
180  MAKE_ERROR(temEMPTY_DID, "Malformed: No DID data provided."),
181  MAKE_ERROR(temINVALID, "The transaction is ill-formed."),
182  MAKE_ERROR(temINVALID_FLAG, "The transaction has an invalid flag."),
183  MAKE_ERROR(temREDUNDANT, "The transaction is redundant."),
184  MAKE_ERROR(temRIPPLE_EMPTY, "PathSet with no paths."),
185  MAKE_ERROR(temUNCERTAIN, "In process of determining result. Never returned."),
186  MAKE_ERROR(temUNKNOWN, "The transaction requires logic that is not implemented yet."),
187  MAKE_ERROR(temDISABLED, "The transaction requires logic that is currently disabled."),
188  MAKE_ERROR(temBAD_TICK_SIZE, "Malformed: Tick size out of range."),
189  MAKE_ERROR(temINVALID_ACCOUNT_ID, "Malformed: A field contains an invalid account ID."),
190  MAKE_ERROR(temCANNOT_PREAUTH_SELF, "Malformed: An account may not preauthorize itself."),
191  MAKE_ERROR(temINVALID_COUNT, "Malformed: Count field outside valid range."),
192  MAKE_ERROR(temSEQ_AND_TICKET, "Transaction contains a TicketSequence and a non-zero Sequence."),
193  MAKE_ERROR(temBAD_NFTOKEN_TRANSFER_FEE, "Malformed: The NFToken transfer fee must be between 1 and 5000, inclusive."),
194  MAKE_ERROR(temXCHAIN_EQUAL_DOOR_ACCOUNTS, "Malformed: Bridge must have unique door accounts."),
195  MAKE_ERROR(temXCHAIN_BAD_PROOF, "Malformed: Bad cross-chain claim proof."),
196  MAKE_ERROR(temXCHAIN_BRIDGE_BAD_ISSUES, "Malformed: Bad bridge issues."),
197  MAKE_ERROR(temXCHAIN_BRIDGE_NONDOOR_OWNER, "Malformed: Bridge owner must be one of the door accounts."),
198  MAKE_ERROR(temXCHAIN_BRIDGE_BAD_MIN_ACCOUNT_CREATE_AMOUNT, "Malformed: Bad min account create amount."),
199  MAKE_ERROR(temXCHAIN_BRIDGE_BAD_REWARD_AMOUNT, "Malformed: Bad reward amount."),
200 
201  MAKE_ERROR(terRETRY, "Retry transaction."),
202  MAKE_ERROR(terFUNDS_SPENT, "DEPRECATED."),
203  MAKE_ERROR(terINSUF_FEE_B, "Account balance can't pay fee."),
204  MAKE_ERROR(terLAST, "DEPRECATED."),
205  MAKE_ERROR(terNO_RIPPLE, "Path does not permit rippling."),
206  MAKE_ERROR(terNO_ACCOUNT, "The source account does not exist."),
207  MAKE_ERROR(terNO_AUTH, "Not authorized to hold IOUs."),
208  MAKE_ERROR(terNO_LINE, "No such line."),
209  MAKE_ERROR(terPRE_SEQ, "Missing/inapplicable prior transaction."),
210  MAKE_ERROR(terOWNERS, "Non-zero owner count."),
211  MAKE_ERROR(terQUEUED, "Held until escalated fee drops."),
212  MAKE_ERROR(terPRE_TICKET, "Ticket is not yet in ledger."),
213  MAKE_ERROR(terNO_AMM, "AMM doesn't exist for the asset pair."),
214  MAKE_ERROR(terSUBMITTED, "Transaction has been submitted."),
215 
216  MAKE_ERROR(tesSUCCESS, "The transaction was applied. Only final in a validated ledger."),
217  };
218  // clang-format on
219 
220 #undef MAKE_ERROR
221 
222  return results;
223 }
224 
225 bool
227 {
228  auto& results = transResults();
229 
230  auto const r = results.find(TERtoInt(code));
231 
232  if (r == results.end())
233  return false;
234 
235  token = r->second.first;
236  text = r->second.second;
237  return true;
238 }
239 
242 {
243  std::string token;
244  std::string text;
245 
246  return transResultInfo(code, token, text) ? token : "-";
247 }
248 
251 {
252  std::string token;
253  std::string text;
254 
255  return transResultInfo(code, token, text) ? text : "-";
256 }
257 
259 transCode(std::string const& token)
260 {
261  static auto const results = [] {
262  auto& byTer = transResults();
263  auto range = boost::make_iterator_range(byTer.begin(), byTer.end());
264  auto tRange = boost::adaptors::transform(range, [](auto const& r) {
265  return std::make_pair(r.second.first, r.first);
266  });
268  tRange.begin(), tRange.end());
269  return byToken;
270  }();
271 
272  auto const r = results.find(token);
273 
274  if (r == results.end())
275  return std::nullopt;
276 
277  return TER::fromInt(r->second);
278 }
279 
280 } // namespace ripple
ripple::tecUNFUNDED_OFFER
@ tecUNFUNDED_OFFER
Definition: TER.h:265
ripple::temXCHAIN_BAD_PROOF
@ temXCHAIN_BAD_PROOF
Definition: TER.h:131
ripple::tecXCHAIN_ACCOUNT_CREATE_TOO_MANY
@ tecXCHAIN_ACCOUNT_CREATE_TOO_MANY
Definition: TER.h:329
ripple::tefNO_TICKET
@ tefNO_TICKET
Definition: TER.h:179
ripple::terPRE_TICKET
@ terPRE_TICKET
Definition: TER.h:219
ripple::tecOBJECT_NOT_FOUND
@ tecOBJECT_NOT_FOUND
Definition: TER.h:307
ripple::tecFROZEN
@ tecFROZEN
Definition: TER.h:284
ripple::tecUNFUNDED_AMM
@ tecUNFUNDED_AMM
Definition: TER.h:309
ripple::tecXCHAIN_BAD_CLAIM_ID
@ tecXCHAIN_BAD_CLAIM_ID
Definition: TER.h:319
ripple::tecNO_TARGET
@ tecNO_TARGET
Definition: TER.h:285
ripple::temBAD_SEND_XRP_MAX
@ temBAD_SEND_XRP_MAX
Definition: TER.h:99
ripple::tefINTERNAL
@ tefINTERNAL
Definition: TER.h:167
ripple::tecINVARIANT_FAILED
@ tecINVARIANT_FAILED
Definition: TER.h:294
ripple::tecINSUF_RESERVE_LINE
@ tecINSUF_RESERVE_LINE
Definition: TER.h:269
std::string
STL class.
ripple::temBAD_OFFER
@ temBAD_OFFER
Definition: TER.h:94
ripple::tecXCHAIN_PROOF_UNKNOWN_KEY
@ tecXCHAIN_PROOF_UNKNOWN_KEY
Definition: TER.h:321
ripple::tefBAD_ADD_AUTH
@ tefBAD_ADD_AUTH
Definition: TER.h:162
ripple::tecXCHAIN_CLAIM_NO_QUORUM
@ tecXCHAIN_CLAIM_NO_QUORUM
Definition: TER.h:320
ripple::terINSUF_FEE_B
@ terINSUF_FEE_B
Definition: TER.h:209
ripple::temBAD_CURRENCY
@ temBAD_CURRENCY
Definition: TER.h:89
ripple::terNO_LINE
@ terNO_LINE
Definition: TER.h:212
ripple::tecOWNERS
@ tecOWNERS
Definition: TER.h:279
ripple::telLOCAL_ERROR
@ telLOCAL_ERROR
Definition: TER.h:52
std::pair
ripple::tecINSUFFICIENT_FUNDS
@ tecINSUFFICIENT_FUNDS
Definition: TER.h:306
ripple::tefINVARIANT_FAILED
@ tefINVARIANT_FAILED
Definition: TER.h:177
ripple::tecNO_REGULAR_KEY
@ tecNO_REGULAR_KEY
Definition: TER.h:278
ripple::telCAN_NOT_QUEUE_FEE
@ telCAN_NOT_QUEUE_FEE
Definition: TER.h:63
ripple::transResults
std::unordered_map< TERUnderlyingType, std::pair< char const *const, char const *const > > const & transResults()
Definition: TER.cpp:29
ripple::temBAD_REGKEY
@ temBAD_REGKEY
Definition: TER.h:97
ripple::tecXCHAIN_WRONG_CHAIN
@ tecXCHAIN_WRONG_CHAIN
Definition: TER.h:323
ripple::tecXCHAIN_SENDING_ACCOUNT_MISMATCH
@ tecXCHAIN_SENDING_ACCOUNT_MISMATCH
Definition: TER.h:326
ripple::telBAD_DOMAIN
@ telBAD_DOMAIN
Definition: TER.h:53
ripple::temXCHAIN_EQUAL_DOOR_ACCOUNTS
@ temXCHAIN_EQUAL_DOOR_ACCOUNTS
Definition: TER.h:130
ripple::tecDST_TAG_NEEDED
@ tecDST_TAG_NEEDED
Definition: TER.h:290
ripple::terFUNDS_SPENT
@ terFUNDS_SPENT
Definition: TER.h:208
ripple::temCANNOT_PREAUTH_SELF
@ temCANNOT_PREAUTH_SELF
Definition: TER.h:119
ripple::tecAMM_EMPTY
@ tecAMM_EMPTY
Definition: TER.h:313
ripple::tecXCHAIN_NO_CLAIM_ID
@ tecXCHAIN_NO_CLAIM_ID
Definition: TER.h:318
ripple::transToken
std::string transToken(TER code)
Definition: TER.cpp:241
ripple::telCAN_NOT_QUEUE_FULL
@ telCAN_NOT_QUEUE_FULL
Definition: TER.h:64
ripple::telCAN_NOT_QUEUE
@ telCAN_NOT_QUEUE
Definition: TER.h:59
ripple::TERUnderlyingType
int TERUnderlyingType
Definition: TER.h:38
ripple::telNETWORK_ID_MAKES_TX_NON_CANONICAL
@ telNETWORK_ID_MAKES_TX_NON_CANONICAL
Definition: TER.h:67
ripple::temEMPTY_DID
@ temEMPTY_DID
Definition: TER.h:137
ripple::TERtoInt
constexpr TERUnderlyingType TERtoInt(TELcodes v)
Definition: TER.h:341
ripple::tecCANT_ACCEPT_OWN_NFTOKEN_OFFER
@ tecCANT_ACCEPT_OWN_NFTOKEN_OFFER
Definition: TER.h:305
ripple::terNO_RIPPLE
@ terNO_RIPPLE
Definition: TER.h:217
ripple::temBAD_ISSUER
@ temBAD_ISSUER
Definition: TER.h:92
ripple::tefCREATED
@ tefCREATED
Definition: TER.h:165
ripple::temBAD_TRANSFER_RATE
@ temBAD_TRANSFER_RATE
Definition: TER.h:106
ripple::tecINCOMPLETE
@ tecINCOMPLETE
Definition: TER.h:316
ripple::temBAD_PATH
@ temBAD_PATH
Definition: TER.h:95
ripple::temDST_IS_SRC
@ temDST_IS_SRC
Definition: TER.h:107
ripple::tefBAD_AUTH
@ tefBAD_AUTH
Definition: TER.h:163
ripple::temXCHAIN_BRIDGE_BAD_REWARD_AMOUNT
@ temXCHAIN_BRIDGE_BAD_REWARD_AMOUNT
Definition: TER.h:135
ripple::tecAMM_FAILED
@ tecAMM_FAILED
Definition: TER.h:311
ripple::transCode
std::optional< TER > transCode(std::string const &token)
Definition: TER.cpp:259
ripple::temXCHAIN_BRIDGE_BAD_ISSUES
@ temXCHAIN_BRIDGE_BAD_ISSUES
Definition: TER.h:132
ripple::tecKILLED
@ tecKILLED
Definition: TER.h:297
ripple::temUNCERTAIN
@ temUNCERTAIN
Definition: TER.h:122
ripple::terQUEUED
@ terQUEUED
Definition: TER.h:218
ripple::tefBAD_QUORUM
@ tefBAD_QUORUM
Definition: TER.h:174
ripple::tecOVERSIZE
@ tecOVERSIZE
Definition: TER.h:292
ripple::tecNO_DST_INSUF_XRP
@ tecNO_DST_INSUF_XRP
Definition: TER.h:272
ripple::tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR
@ tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR
Definition: TER.h:332
ripple::temINVALID_FLAG
@ temINVALID_FLAG
Definition: TER.h:110
ripple::tecNFTOKEN_OFFER_TYPE_MISMATCH
@ tecNFTOKEN_OFFER_TYPE_MISMATCH
Definition: TER.h:304
ripple::tefBAD_LEDGER
@ tefBAD_LEDGER
Definition: TER.h:164
ripple::temBAD_QUORUM
@ temBAD_QUORUM
Definition: TER.h:115
ripple::telFAILED_PROCESSING
@ telFAILED_PROCESSING
Definition: TER.h:56
ripple::temBAD_AMM_TOKENS
@ temBAD_AMM_TOKENS
Definition: TER.h:128
ripple::tecAMM_NOT_EMPTY
@ tecAMM_NOT_EMPTY
Definition: TER.h:314
ripple::tecNO_ALTERNATIVE_KEY
@ tecNO_ALTERNATIVE_KEY
Definition: TER.h:277
ripple::temBAD_SEND_XRP_PARTIAL
@ temBAD_SEND_XRP_PARTIAL
Definition: TER.h:101
ripple::tefMAX_LEDGER
@ tefMAX_LEDGER
Definition: TER.h:172
ripple::tefNFTOKEN_IS_NOT_TRANSFERABLE
@ tefNFTOKEN_IS_NOT_TRANSFERABLE
Definition: TER.h:180
ripple::tefMASTER_DISABLED
@ tefMASTER_DISABLED
Definition: TER.h:171
ripple::temBAD_LIMIT
@ temBAD_LIMIT
Definition: TER.h:93
ripple::terRETRY
@ terRETRY
Definition: TER.h:207
ripple::temBAD_SIGNER
@ temBAD_SIGNER
Definition: TER.h:114
ripple::tecDUPLICATE
@ tecDUPLICATE
Definition: TER.h:296
ripple::tecAMM_INVALID_TOKENS
@ tecAMM_INVALID_TOKENS
Definition: TER.h:312
ripple::temBAD_SEND_XRP_PATHS
@ temBAD_SEND_XRP_PATHS
Definition: TER.h:102
ripple::TERSubset< CanCvtToTER >
ripple::terLAST
@ terLAST
Definition: TER.h:216
ripple::tecFAILED_PROCESSING
@ tecFAILED_PROCESSING
Definition: TER.h:267
ripple::temDST_NEEDED
@ temDST_NEEDED
Definition: TER.h:108
ripple::temBAD_SEQUENCE
@ temBAD_SEQUENCE
Definition: TER.h:103
ripple::tecAMM_BALANCE
@ tecAMM_BALANCE
Definition: TER.h:310
ripple::terOWNERS
@ terOWNERS
Definition: TER.h:213
ripple::tecUNFUNDED
@ tecUNFUNDED
Definition: TER.h:276
ripple::temBAD_SRC_ACCOUNT
@ temBAD_SRC_ACCOUNT
Definition: TER.h:105
ripple::telINSUF_FEE_P
@ telINSUF_FEE_P
Definition: TER.h:57
ripple::terNO_AUTH
@ terNO_AUTH
Definition: TER.h:211
ripple::telREQUIRES_NETWORK_ID
@ telREQUIRES_NETWORK_ID
Definition: TER.h:66
ripple::tecNO_LINE_REDUNDANT
@ tecNO_LINE_REDUNDANT
Definition: TER.h:274
ripple::tecUNFUNDED_PAYMENT
@ tecUNFUNDED_PAYMENT
Definition: TER.h:266
ripple::tecXCHAIN_ACCOUNT_CREATE_PAST
@ tecXCHAIN_ACCOUNT_CREATE_PAST
Definition: TER.h:328
ripple::tecINTERNAL
@ tecINTERNAL
Definition: TER.h:291
ripple::tecXCHAIN_PAYMENT_FAILED
@ tecXCHAIN_PAYMENT_FAILED
Definition: TER.h:330
ripple::temBAD_AMOUNT
@ temBAD_AMOUNT
Definition: TER.h:88
ripple::tecINSUFF_FEE
@ tecINSUFF_FEE
Definition: TER.h:283
ripple::temBAD_SEND_XRP_NO_DIRECT
@ temBAD_SEND_XRP_NO_DIRECT
Definition: TER.h:100
ripple::telBAD_PATH_COUNT
@ telBAD_PATH_COUNT
Definition: TER.h:54
ripple::temBAD_SIGNATURE
@ temBAD_SIGNATURE
Definition: TER.h:104
ripple::tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE
@ tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE
Definition: TER.h:322
ripple::temUNKNOWN
@ temUNKNOWN
Definition: TER.h:123
ripple::tecPATH_PARTIAL
@ tecPATH_PARTIAL
Definition: TER.h:263
ripple::tecXCHAIN_BAD_TRANSFER_ISSUE
@ tecXCHAIN_BAD_TRANSFER_ISSUE
Definition: TER.h:317
ripple::temREDUNDANT
@ temREDUNDANT
Definition: TER.h:111
ripple::tefFAILURE
@ tefFAILURE
Definition: TER.h:160
ripple::range
ClosedInterval< T > range(T low, T high)
Create a closed range interval.
Definition: RangeSet.h:54
ripple::temBAD_FEE
@ temBAD_FEE
Definition: TER.h:91
ripple::telCAN_NOT_QUEUE_BLOCKS
@ telCAN_NOT_QUEUE_BLOCKS
Definition: TER.h:61
ripple::tecNEED_MASTER_KEY
@ tecNEED_MASTER_KEY
Definition: TER.h:289
ripple::transHuman
std::string transHuman(TER code)
Definition: TER.cpp:250
ripple::tecUNFUNDED_ADD
@ tecUNFUNDED_ADD
Definition: TER.h:264
ripple::tecDIR_FULL
@ tecDIR_FULL
Definition: TER.h:268
ripple::terNO_ACCOUNT
@ terNO_ACCOUNT
Definition: TER.h:210
ripple::tecTOO_SOON
@ tecTOO_SOON
Definition: TER.h:299
ripple::tefNOT_MULTI_SIGNING
@ tefNOT_MULTI_SIGNING
Definition: TER.h:175
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:226
ripple::tefNO_AUTH_REQUIRED
@ tefNO_AUTH_REQUIRED
Definition: TER.h:168
ripple::temINVALID_ACCOUNT_ID
@ temINVALID_ACCOUNT_ID
Definition: TER.h:118
ripple::tecXCHAIN_CREATE_ACCOUNT_DISABLED
@ tecXCHAIN_CREATE_ACCOUNT_DISABLED
Definition: TER.h:333
ripple::tecNFTOKEN_BUY_SELL_MISMATCH
@ tecNFTOKEN_BUY_SELL_MISMATCH
Definition: TER.h:303
ripple::tecNO_LINE_INSUF_RESERVE
@ tecNO_LINE_INSUF_RESERVE
Definition: TER.h:273
ripple::tecINSUFFICIENT_PAYMENT
@ tecINSUFFICIENT_PAYMENT
Definition: TER.h:308
ripple::tefPAST_SEQ
@ tefPAST_SEQ
Definition: TER.h:169
ripple::tecXCHAIN_SELF_COMMIT
@ tecXCHAIN_SELF_COMMIT
Definition: TER.h:331
ripple::terSUBMITTED
@ terSUBMITTED
Definition: TER.h:221
ripple::tecNO_LINE
@ tecNO_LINE
Definition: TER.h:282
ripple::temSEQ_AND_TICKET
@ temSEQ_AND_TICKET
Definition: TER.h:125
ripple::tecEXPIRED
@ tecEXPIRED
Definition: TER.h:295
ripple::temDISABLED
@ temDISABLED
Definition: TER.h:113
ripple::tecXCHAIN_REWARD_MISMATCH
@ tecXCHAIN_REWARD_MISMATCH
Definition: TER.h:324
ripple::tefALREADY
@ tefALREADY
Definition: TER.h:161
ripple::TERSubset< CanCvtToTER >::fromInt
static constexpr TERSubset fromInt(int from)
Definition: TER.h:399
ripple::terNO_AMM
@ terNO_AMM
Definition: TER.h:220
ripple::tecNO_ISSUER
@ tecNO_ISSUER
Definition: TER.h:280
ripple::tecEMPTY_DID
@ tecEMPTY_DID
Definition: TER.h:334
ripple::tefTOO_BIG
@ tefTOO_BIG
Definition: TER.h:178
ripple::tecNO_SUITABLE_NFTOKEN_PAGE
@ tecNO_SUITABLE_NFTOKEN_PAGE
Definition: TER.h:302
ripple::tecHAS_OBLIGATIONS
@ tecHAS_OBLIGATIONS
Definition: TER.h:298
ripple::tecNO_PERMISSION
@ tecNO_PERMISSION
Definition: TER.h:286
ripple::tecMAX_SEQUENCE_REACHED
@ tecMAX_SEQUENCE_REACHED
Definition: TER.h:301
ripple::tefWRONG_PRIOR
@ tefWRONG_PRIOR
Definition: TER.h:170
ripple::temRIPPLE_EMPTY
@ temRIPPLE_EMPTY
Definition: TER.h:112
ripple::tecPATH_DRY
@ tecPATH_DRY
Definition: TER.h:275
ripple::telBAD_PUBLIC_KEY
@ telBAD_PUBLIC_KEY
Definition: TER.h:55
ripple::tecINSUFFICIENT_RESERVE
@ tecINSUFFICIENT_RESERVE
Definition: TER.h:288
ripple::terPRE_SEQ
@ terPRE_SEQ
Definition: TER.h:214
std::optional
ripple::temXCHAIN_BRIDGE_BAD_MIN_ACCOUNT_CREATE_AMOUNT
@ temXCHAIN_BRIDGE_BAD_MIN_ACCOUNT_CREATE_AMOUNT
Definition: TER.h:134
std::make_pair
T make_pair(T... args)
ripple::tefBAD_AUTH_MASTER
@ tefBAD_AUTH_MASTER
Definition: TER.h:176
ripple::tecNO_ENTRY
@ tecNO_ENTRY
Definition: TER.h:287
ripple::temBAD_PATH_LOOP
@ temBAD_PATH_LOOP
Definition: TER.h:96
ripple::temMALFORMED
@ temMALFORMED
Definition: TER.h:86
ripple::telWRONG_NETWORK
@ telWRONG_NETWORK
Definition: TER.h:65
ripple::temINVALID_COUNT
@ temINVALID_COUNT
Definition: TER.h:120
ripple::tefEXCEPTION
@ tefEXCEPTION
Definition: TER.h:166
ripple::telNO_DST_PARTIAL
@ telNO_DST_PARTIAL
Definition: TER.h:58
ripple::temBAD_TICK_SIZE
@ temBAD_TICK_SIZE
Definition: TER.h:117
ripple::tecNO_AUTH
@ tecNO_AUTH
Definition: TER.h:281
ripple::tecCLAIM
@ tecCLAIM
Definition: TER.h:262
ripple::temBAD_EXPIRATION
@ temBAD_EXPIRATION
Definition: TER.h:90
ripple::temBAD_SEND_XRP_LIMIT
@ temBAD_SEND_XRP_LIMIT
Definition: TER.h:98
ripple::telCAN_NOT_QUEUE_BALANCE
@ telCAN_NOT_QUEUE_BALANCE
Definition: TER.h:60
ripple::tecINSUF_RESERVE_OFFER
@ tecINSUF_RESERVE_OFFER
Definition: TER.h:270
std::unordered_map
STL class.
ripple::temXCHAIN_BRIDGE_NONDOOR_OWNER
@ temXCHAIN_BRIDGE_NONDOOR_OWNER
Definition: TER.h:133
ripple::tesSUCCESS
@ tesSUCCESS
Definition: TER.h:236
ripple::tecXCHAIN_NO_SIGNERS_LIST
@ tecXCHAIN_NO_SIGNERS_LIST
Definition: TER.h:325
ripple::temBAD_NFTOKEN_TRANSFER_FEE
@ temBAD_NFTOKEN_TRANSFER_FEE
Definition: TER.h:126
type_traits
ripple::temBAD_WEIGHT
@ temBAD_WEIGHT
Definition: TER.h:116
ripple::tecNO_DST
@ tecNO_DST
Definition: TER.h:271
ripple::temINVALID
@ temINVALID
Definition: TER.h:109
ripple::tecAMM_ACCOUNT
@ tecAMM_ACCOUNT
Definition: TER.h:315
ripple::telCAN_NOT_QUEUE_BLOCKED
@ telCAN_NOT_QUEUE_BLOCKED
Definition: TER.h:62
ripple::tefBAD_SIGNATURE
@ tefBAD_SIGNATURE
Definition: TER.h:173
ripple::tecCRYPTOCONDITION_ERROR
@ tecCRYPTOCONDITION_ERROR
Definition: TER.h:293
ripple::tecXCHAIN_INSUFF_CREATE_AMOUNT
@ tecXCHAIN_INSUFF_CREATE_AMOUNT
Definition: TER.h:327