View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0006434 | Taler | other | public | 2020-07-21 09:24 | 2021-08-24 16:23 |
Reporter | Florian Dold | Assigned To | Christian Grothoff | ||
Priority | high | Severity | tweak | Reproducibility | have not tried |
Status | closed | Resolution | fixed | ||
Product Version | git (master) | ||||
Target Version | 0.8 | Fixed in Version | 0.8 | ||
Summary | 0006434: clean up error codes | ||||
Description | We should make a pass over the error codes list before we release 0.9. There are many ECs that are not used, and others that have a name that's too generic, when it is actually an error that is very specific to some component (such as sync). | ||||
Tags | No tags attached. | ||||
|
We also should consistently use a TALER_EC_{COMPONENT}_{ENDPOINT} prefix where applicable (so for ECs >= 1000). In some cases, we recycle non-generic ECs across components or endpoints, which should be avoided. In some cases, we re-use an EC and give the "real" error in the "detail", which we should avoid (the detail should be to elaborate in a way that the EC cannot). For all generic ECs, we should document what the 'detail' should specify (like the name of the field in the case of a parameter missing or being malformed). We should decide about additional generic ECs to add. I propose: failure to hash a contract, unexpected serialization failure for single-statement transaction, failure to start database transaction, failure to commit database transaction (all without 'details', or if details are given in private endpoints, then with the Postgres message). For malformed fields where it would make sense to provide the *value* of the field in the 'detail', I am not sure if we should have a generic EC, or always have a _specific_ EC that encodes the name of the field. (I tend to having another libtalermhd error reporting function, give that the field name and parameter value and report both strings with a generic EC. Florian/Jonathan: any thoughts?) |
|
Let's discuss this a bit. |
|
I think we should have generic error codes for request parameters that are missing or malformed. Encoding the field name in the EC is IMHO counter-productive. It doesn't help clients with error handling, it doesn't help generate better error messages (to the contrary!). For specific *semantic* checks of request parameters (or payloads), we should have specific error codes (we mostly already do this). IMHO we should also get rid of the extra optional fields (which we mostly don't use anyway!) in the ErrorDetail schema (https://docs.taler.net/core/api-common.html#tsref-type-ErrorDetail). The generic error response would be interface ErrorResponseBody { code: number; hint: string; // hint must include the alphanumeric code name, but can contain more prose, too details?: any; } And for specific error codes, we can further refine the details with a more precise type. Why have the details in a separate fields and not at the top level? Because it makes types (both in the specification and in implementations in languages that have more expressive type systems) clearer. I can have a generic DatabaseErrorDetails or HttpRequestErrorDetail type and re-use them or even combine them. Regarding generic errors: The one you propose make sense. I would also keep "INTERNAL_INVARIANT_FAILURE" (duplicate of INTERNAL_LOGIC_ERROR), "ENDPOINT_UNKNOWN", "NOT_IMPLEMENTED". JSON_INVALID should probably become REQUEST_JSON_INVALID, because there are other cases where JSON can be invalid. The wallet has WALLET_UNEXPECTED_EXCEPTION, which we could change to a generic UNEXPECTED_EXCEPTION, which is similar to INTERNAL_INVARIANT_FAILURE but comes with a stack trace. The current generic error codes CLIENT_INTERNAL_FAILURE and INVALID should be removed or at least be redefined to something more concrete. |
|
Also, the wallet right now uses separate fields for the alphanumeric name of the error code and the "message" part. So the "hint" field is specific to the *type* of the error, and the "message" is specific to the *instance* of the error. We should converge on one approach for both the wallet error messages and the other components. I.e., do we want this: { code: 7001, hint: "Error: WALLET_UNEXPECTED_EXCEPTION", message: "unexpected exception (BUG: transaction closed before transaction function returned)" } or do we want { code: 7001, hint: "WALLET_UNEXPECTED_EXCEPTION: unexpected exception (BUG: transaction closed before transaction function returned)" } or some variation thereof? IMHO it's very important to have the alphanumeric error code in the JSON, but it is often awkward having to combine it with an "error instance"-specific message. |
|
I'm for "hint: WALLET_UNEXPECTED_FOO: text from the comment we wrote on the enum value of WALLET_UNEXPECTED_FOO". Plus "details". |
|
That works for me, as long as all UIs actually render the details as pretty-printed JSON when no specific error handling is implemented for that particular error code. Otherwise, in the example from above, the "BUG: transaction closed before transaction function returned" (which is the message from the actual JavaScript exception) would be hidden. |
|
Agreed. I expect that 'details' will often be a string, and in cases where not I think any reasonable auto-rendering of the JSON will be good (like if it is a simple object, we might show the key:value pairs as a table, and an array as comma-separated values). |
|
The "details" should never be a plain string, as this would mean you can't add additional diagnostics information to an existing error code without breaking the schema in a backwards-incompatible way. We should either: (a) require the details to be a subtype of { message?: string } (i.e. every concrete details object *can* contain a message but doesn't have to, and *if* the message field is present it must be a string) (b) lift the optional message field to the top-level of the error JSON I'd be fine with both. The wallet currently does (b) but it's not hard to switch to (a). |
|
I think having a 'message' string is very common, while having other details is rare. Let's go with: { code: 7001, hint: "WALLET_UNEXPECTED_EXCEPTION: unexpected exception", message: "BUG: transaction closed before transaction function returned)", // optional details: any, // optional } |
|
I've used some insane bash script to find deltas between what is documented in GANA and the HTTP status codes actually used in the code, for every EC. Attached. Basically, for the given status codes (#1), the code uses (#2) while GANA claims it should be (#3). missmatches.txt (3,393 bytes)
ALLOCATION_FAILURE - MHD_HTTP_BAD_REQUEST - INTERNAL_SERVER_ERROR COINS_INVALID_COIN_PUB - MHD_HTTP_BAD_REQUEST - UNINITIALIZED DEPOSIT_CURRENCY_MISMATCH - MHD_HTTP_BAD_REQUEST - PRECONDITION_FAILED DEPOSITS_INVALID_COIN_PUB - MHD_HTTP_BAD_REQUEST - UNINITIALIZED DEPOSITS_INVALID_H_CONTRACT_TERMS - MHD_HTTP_BAD_REQUEST - UNINITIALIZED DEPOSITS_INVALID_H_WIRE - MHD_HTTP_BAD_REQUEST - UNINITIALIZED DEPOSITS_INVALID_MERCHANT_PUB - MHD_HTTP_BAD_REQUEST - UNINITIALIZED KEYS_TIMETRAVEL_FORBIDDEN - MHD_HTTP_BAD_REQUEST - FORBIDDEN MELT_COIN_EXPIRED_NO_ZOMBIE - MHD_HTTP_BAD_REQUEST - UNINITIALIZED MELT_CURRENCY_MISMATCH - MHD_HTTP_BAD_REQUEST - PRECONDITION_FAILED POST_INSTANCES_BAD_CURRENCY - MHD_HTTP_BAD_REQUEST - CONFLICT RESERVES_INVALID_RESERVE_PUB - MHD_HTTP_BAD_REQUEST - UNINITIALIZED RESERVES_INVALID_RESERVE_PUB - MHD_HTTP_BAD_REQUEST - UNINITIALIZED REVEAL_INVALID_RCH - MHD_HTTP_BAD_REQUEST - UNINITIALIZED TRANSFERS_INVALID_WTID - MHD_HTTP_BAD_REQUEST - UNINITIALIZED BANK_TRANSFER_REQUEST_UID_REUSED - MHD_HTTP_CONFLICT - UNINITIALIZED DEPOSIT_CONFIRMATION_SIGNATURE_INVALID - MHD_HTTP_FORBIDDEN - UNINITIALIZED DEPOSIT_CONFIRMATION_SIGNATURE_INVALID - MHD_HTTP_FORBIDDEN - UNINITIALIZED DEPOSITS_GET_MERCHANT_SIGNATURE_INVALID - MHD_HTTP_FORBIDDEN - BAD_REQUEST KEYS_HAVE_NOT_NUMERIC - MHD_HTTP_FORBIDDEN - BAD_REQUEST MELT_COIN_SIGNATURE_INVALID - MHD_HTTP_FORBIDDEN - BAD_REQUEST MELT_DENOMINATION_SIGNATURE_INVALID - MHD_HTTP_FORBIDDEN - BAD_REQUEST RECOUP_DENOMINATION_SIGNATURE_INVALID - MHD_HTTP_FORBIDDEN - BAD_REQUEST REFUND_MERCHANT_SIGNATURE_INVALID - MHD_HTTP_FORBIDDEN - BAD_REQUEST REVEAL_LINK_SIGNATURE_INVALID - MHD_HTTP_FORBIDDEN - BAD_REQUEST WITHDRAW_RESERVE_SIGNATURE_INVALID - MHD_HTTP_FORBIDDEN - BAD_REQUEST PRODUCTS_LOCK_INSUFFICIENT_STOCKS - MHD_HTTP_GONE - CONFLICT DB_COIN_HISTORY_STORE_ERROR - MHD_HTTP_INTERNAL_SERVER_ERROR - UNINITIALIZED EXCHANGE_BAD_CONFIGURATION - MHD_HTTP_INTERNAL_SERVER_ERROR - UNINITIALIZED EXCHANGE_BAD_CONFIGURATION - MHD_HTTP_INTERNAL_SERVER_ERROR - UNINITIALIZED INTERNAL_INVARIANT_FAILURE - MHD_HTTP_INTERNAL_SERVER_ERROR - UNINITIALIZED INTERNAL_INVARIANT_FAILURE - MHD_HTTP_INTERNAL_SERVER_ERROR - UNINITIALIZED INTERNAL_INVARIANT_FAILURE - MHD_HTTP_INTERNAL_SERVER_ERROR - UNINITIALIZED PAY_DB_STORE_PAYMENTS_ERROR - MHD_HTTP_INTERNAL_SERVER_ERROR - UNINITIALIZED PAY_DB_STORE_PAYMENTS_ERROR - MHD_HTTP_INTERNAL_SERVER_ERROR - UNINITIALIZED PAY_MERCHANT_FIELD_MISSING - MHD_HTTP_INTERNAL_SERVER_ERROR - BAD_REQUEST POST_TRANSFERS_EXCHANGE_KEYS_FAILURE - MHD_HTTP_INTERNAL_SERVER_ERROR - FAILED_DEPENDENCY REVEAL_AMOUNT_INSUFFICIENT - MHD_HTTP_INTERNAL_SERVER_ERROR - BAD_REQUEST TIP_PICKUP_DB_ERROR_HARD - MHD_HTTP_INTERNAL_SERVER_ERROR - UNINITIALIZED TIP_PICKUP_DB_ERROR_SOFT - MHD_HTTP_INTERNAL_SERVER_ERROR - UNINITIALIZED PAY_PAYMENT_INSUFFICIENT_DUE_TO_FEES - MHD_HTTP_NOT_ACCEPTABLE - ACCEPTED PAY_PAYMENT_INSUFFICIENT - MHD_HTTP_NOT_ACCEPTABLE - ACCEPTED PROPOSAL_INSTANCE_CONFIGURATION_LACKS_WIRE - MHD_HTTP_NOT_FOUND - UNINITIALIZED RESERVE_STATUS_UNKNOWN - MHD_HTTP_NOT_FOUND - UNINITIALIZED REVEAL_SESSION_UNKNOWN - MHD_HTTP_NOT_FOUND - BAD_REQUEST NONE - MHD_HTTP_OK - UNINITIALIZED SYNC_MALFORMED_CONTENT_LENGTH - MHD_HTTP_PAYLOAD_TOO_LARGE - BAD_REQUEST DEPOSIT_COIN_SIGNATURE_INVALID - MHD_HTTP_UNAUTHORIZED - BAD_REQUEST DEPOSIT_DENOMINATION_SIGNATURE_INVALID - MHD_HTTP_UNAUTHORIZED - BAD_REQUEST |
|
Missmatches have been fixed in docs/exchange/merchant/gana. What remains to be done is to purge dead EC codes, and to rename EC codes to better reflect the subsystem they are in use for. Plus to look at which ones to make generic. |
|
Attaching a proposed table with renames to do. special prefixes: DEAD_ => not in use anymore UNIFY_ => several different old constants get the same name, old value for now after __ AMBIGUOUS_ => one existing constant should be split up into multiple New constants have prefixes like: GENERIC_ => widely used EXCHANGE_GENERIC_ => widely used in exchange EXCHANGE_ => in exchange MERCHANT_GENERIC_ => widely used in merchant MERCHANT_ => in merchant SYNC_ => by sync AUDITOR => by auditor ANASTASIS => by anastasis BANK => by bank table.txt (35,917 bytes)
ABORT_COINS_ARRAY_EMPTY MERCHANT_POST_ORDERS_ID_ABORT_COINS_ARRAY_EMPTY ABORT_CONTRACT_HASH_MISSMATCH MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_HASH_MISSMATCH ABORT_CONTRACT_NOT_FOUND MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_NOT_FOUND ABORT_DB_FETCH_TRANSACTION_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__ABORT_DB_FETCH_TRANSACTION_ERROR ABORT_DB_STORE_ABORT_ERROR UNIFY_GENERIC_DB_STORE_FAILED__ABORT_DB_STORE_ABORT_ERROR ABORT_DB_STORE_TRANSACTION_ERROR UNIFY_GENERIC_DB_COMMIT_FAILED_HARD__ABORT_DB_STORE_TRANSACTION_ERROR ABORT_EXCHANGE_KEYS_FAILURE MERCHANT_POST_ORDERS_ID_ABORT_EXCHANGE_KEYS_FAILURE ABORT_EXCHANGE_LOOKUP_FAILED MERCHANT_POST_ORDERS_ID_ABORT_EXCHANGE_LOOKUP_FAILED ABORT_EXCHANGE_REFUND_FAILED MERCHANT_POST_ORDERS_ID_ABORT_EXCHANGE_REFUND_FAILED ABORT_EXCHANGE_TIMEOUT UNIFY_MERCHANT_GENERIC_EXCHANGE_TIMEOUT__ABORT_EXCHANGE_TIMEOUT ABORT_REFUND_REFUSED_PAYMENT_COMPLETE MERCHANT_POST_ORDERS_ID_ABORT_REFUND_REFUSED_PAYMENT_COMPLETE ADMIN_ADD_INCOMING_CURRENCY_UNSUPPORTED DEAD_ADMIN_ADD_INCOMING_CURRENCY_UNSUPPORTED ADMIN_ADD_INCOMING_DB_STORE DEAD_ADMIN_ADD_INCOMING_DB_STORE ADMIN_ADD_INCOMING_WIREFORMAT_UNSUPPORTED DEAD_ADMIN_ADD_INCOMING_WIREFORMAT_UNSUPPORTED ALLOCATION_FAILURE GENERIC_ALLOCATION_FAILURE AMOUNT_DEPOSITS_OVERFLOW DEAD_AMOUNT_DEPOSITS_OVERFLOW ANASTASIS_FOO_ERROR ANASTASIS_FOO_ERROR AUDITOR_EXCHANGES_REPLY_MALFORMED UNIFY_GENERIC_REPLY_MALFORMED__AUDITOR_EXCHANGES_REPLY_MALFORMED AUDITOR_EXCHANGE_STORE_DB_ERROR UNIFY_GENERIC_DB_STORE_FAILED__AUDITOR_DEPOSIT_CONFIRMATION_STORE_DB_ERROR BANK_BAD_FORMAT_AMOUNT BANK_BAD_FORMAT_AMOUNT BANK_CURRENCY_MISMATCH BANK_CURRENCY_MISMATCH BANK_JSON_INVALID BANK_JSON_INVALID BANK_LOGIN_FAILED BANK_LOGIN_FAILED BANK_NEGATIVE_NUMBER_AMOUNT BANK_NEGATIVE_NUMBER_AMOUNT BANK_NUMBER_TOO_BIG BANK_NUMBER_TOO_BIG BANK_PARAMETER_MISSING_OR_INVALID BANK_PARAMETER_MISSING_OR_INVALID BANK_REJECT_NO_RIGHTS BANK_REJECT_NO_RIGHTS BANK_SAME_ACCOUNT BANK_SAME_ACCOUNT BANK_SOFT_EXCEPTION BANK_SOFT_EXCEPTION BANK_TRANSACTION_NOT_FOUND BANK_TRANSACTION_NOT_FOUND BANK_TRANSFER_REQUEST_UID_REUSED BANK_TRANSFER_REQUEST_UID_REUSED BANK_UNALLOWED_DEBIT BANK_UNALLOWED_DEBIT BANK_UNKNOWN_ACCOUNT BANK_UNKNOWN_ACCOUNT BANK_UNMANAGED_EXCEPTION BANK_UNMANAGED_EXCEPTION BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT CHECK_PAYMENT_DB_FETCH_CONTRACT_TERMS_ERROR DEAD_CHECK_PAYMENT_DB_FETCH_CONTRACT_TERMS_ERROR CHECK_PAYMENT_DB_FETCH_ORDER_ERROR DEAD_CHECK_PAYMENT_DB_FETCH_ORDER_ERROR CHECK_PAYMENT_FAILED_COMPUTE_PROPOSAL_HASH DEAD_CHECK_PAYMENT_FAILED_COMPUTE_PROPOSAL_HASH CHECK_PAYMENT_ORDER_ID_UNKNOWN DEAD_CHECK_PAYMENT_ORDER_ID_UNKNOWN CHECK_PAYMENT_RESPONSE_MALFORMED AMBIGUOUS_CHECK_PAYMENT_RESPONSE_MALFORMED CLIENT_INTERNAL_FAILURE MERCHANT_POST_ORDER_CLAIM_CLIENT_INTERNAL_FAILURE COIN_CONFLICTING_DENOMINATION_KEY EXCHANGE_GENERIC_COIN_CONFLICTING_DENOMINATION_KEY COIN_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS DEAD_COIN_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS COINS_INVALID_COIN_PUB EXCHANGE_GENERIC_COINS_INVALID_COIN_PUB DB_COIN_HISTORY_STORE_ERROR UNIFY_GENERIC_DB_STORE_FAILED__DB_COIN_HISTORY_STORE_ERROR DB_COMMIT_FAILED_HARD GENERIC_DB_COMMIT_ERROR DB_COMMIT_FAILED_ON_RETRY GENERIC_DB_SOFT_ERROR DB_SETUP_FAILED GENERIC_DB_SETUP_FAILED DB_START_FAILED UNIFY_GENERIC_DB_START_FAILED DELETE_INSTANCES_ID_DB_HARD_FAILURE UNIFY_GENERIC_DB_COMMIT_FAILED__HARD_DELETE_INSTANCES_ID_DB_HARD_FAILURE DELETE_INSTANCES_ID_NO_SUCH_INSTANCE UNIFY_MERCHANT_GENERIC_INSTANCE_UNKNOWN__DELETE_INSTANCES_ID_NO_SUCH_INSTANCE DENOMINATION_KEY_LOST EXCHANGE_KEYS_DENOMINATION_KEY_LOST DEPOSIT_COIN_SIGNATURE_INVALID EXCHANGE_DEPOSIT_COIN_SIGNATURE_INVALID DEPOSIT_CONFIRMATION_SIGNATURE_INVALID AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID DEPOSIT_CONFIRMATION_STORE_DB_ERROR UNIFY_GENERIC_DB_STORE_FAILED__DEPOSIT_CONFIRMATION_STORE_DB_ERROR DEPOSIT_CURRENCY_MISMATCH UNIFY_GENERIC_CURRENCY_MISMATCH__DEPOSIT_CURRENCY_MISMATCH DEPOSIT_DB_DENOMINATION_KEY_UNKNOWN DEAD_DEPOSIT_DB_DENOMINATION_KEY_UNKNOWN DEPOSIT_DENOMINATION_EXPIRED EXCHANGE_GENERIC_DEPOSIT_DENOMINATION_EXPIRED DEPOSIT_DENOMINATION_KEY_UNKNOWN UNIFY_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN__DEPOSIT_DENOMINATION_KEY_UNKNOWN DEPOSIT_DENOMINATION_SIGNATURE_INVALID UNIFY_EXCHANGE_DENOMINATION_SIGNATURE_INVALID__DEPOSIT_DENOMINATION_SIGNATURE_INVALID DEPOSIT_DENOMINATION_VALIDITY_IN_FUTURE EXCHANGE_DEPOSIT_DENOMINATION_VALIDITY_IN_FUTURE DEPOSIT_HISTORY_DB_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__DEPOSIT_HISTORY_DB_ERROR DEPOSIT_INSUFFICIENT_FUNDS EXCHANGE_DEPOSIT_INSUFFICIENT_FUNDS DEPOSIT_INVALID_SIGNATURE_BY_EXCHANGE EXCHANGE_DEPOSIT_INVALID_SIGNATURE_BY_EXCHANGE DEPOSIT_INVALID_TIMESTAMP DEAD_DEPOSIT_INVALID_TIMESTAMP DEPOSIT_INVALID_WIRE_FORMAT_ACCOUNT_NUMBER DEAD_DEPOSIT_INVALID_WIRE_FORMAT_ACCOUNT_NUMBER DEPOSIT_INVALID_WIRE_FORMAT_CONTRACT_HASH_CONFLICT EXCHANGE_DEPOSIT_INVALID_WIRE_FORMAT_CONTRACT_HASH_CONFLICT DEPOSIT_INVALID_WIRE_FORMAT_JSON EXCHANGE_DEPOSIT_INVALID_WIRE_FORMAT_JSON DEPOSIT_INVALID_WIRE_FORMAT_TYPE DEAD_DEPOSIT_INVALID_WIRE_FORMAT_TYPE DEPOSIT_NEGATIVE_VALUE_AFTER_FEE EXCHANGE_DEPOSIT_NEGATIVE_VALUE_AFTER_FEE DEPOSIT_REFUND_DEADLINE_AFTER_WIRE_DEADLINE EXCHANGE_DEPOSIT_REFUND_DEADLINE_AFTER_WIRE_DEADLINE DEPOSITS_GET_DB_FEE_INCONSISTENT EXCHANGE_DEPOSITS_GET_DB_FEE_INCONSISTENT DEPOSITS_GET_DB_FETCH_FAILED EXCHANGE_DEPOSITS_GET_DB_FETCH_FAILED DEPOSITS_GET_MERCHANT_SIGNATURE_INVALID EXCHANGE_DEPOSITS_GET_MERCHANT_SIGNATURE_INVALID DEPOSITS_GET_NOT_FOUND EXCHANGE_GET_DEPOSITS_NOT_FOUND DEPOSITS_GET_WTID_RESOLUTION_ERROR DEAD_DEPOSITS_GET_WTID_RESOLUTION_ERROR DEPOSITS_INVALID_BODY_BY_EXCHANGE EXCHANGE_DEPOSITS_GET_INVALID_BODY_BY_EXCHANGE DEPOSITS_INVALID_COIN_PUB EXCHANGE_DEPOSITS_GET_INVALID_COIN_PUB DEPOSITS_INVALID_H_CONTRACT_TERMS EXCHANGE_DEPOSITS_GET_INVALID_H_CONTRACT_TERMS DEPOSITS_INVALID_H_WIRE EXCHANGE_DEPOSITS_GET_INVALID_H_WIRE DEPOSITS_INVALID_MERCHANT_PUB EXCHANGE_DEPOSITS_GET_INVALID_MERCHANT_PUB DEPOSITS_INVALID_SIGNATURE_BY_EXCHANGE EXCHANGE_DEPOSITS_GET_INVALID_SIGNATURE_BY_EXCHANGE DEPOSIT_STORE_DB_ERROR UNIFY_GENERIC_DB_STORE_FAILED__DEPOSIT_STORE_DB_ERROR END END ENDPOINT_UNKNOWN GENERIC_ENDPOINT_UNKNOWN EXCHANGE_BAD_CONFIGURATION EXCHANGE_GENERIC_BAD_CONFIGURATION FORGET_ORDER_DB_COMMIT_ERROR UNIFY_GENERIC_DB_COMMIT_FAILED_HARD__FORGET_ORDER_DB_COMMIT_ERROR FORGET_ORDER_DB_START_ERROR UNIFY_GENERIC_DB_START_FAILED__FORGET_ORDER_DB_START_ERROR FORGET_ORDER_NOT_FOUND UNIFY_MERCHANT_GENERIC_ORDER_NOT_FOUND__FORGET_ORDER_NOT_FOUND FORGET_PATH_NOT_FORGETTABLE MERCHANT_PRIVATE_PATCH_ORDERS_ID_FORGET_PATH_NOT_FORGETTABLE FORGET_PATH_SYNTAX_INCORRECT MERCHANT_PRIVATE_PATCH_ORDERS_ID_FORGET_PATH_SYNTAX_INCORRECT GET_ORDERS_AMOUNT_ARITHMETIC_FAILURE MERCHANT_PRIVATE_GET_ORDERS_ID_AMOUNT_ARITHMETIC_FAILURE GET_ORDERS_CONTRACT_CONTENT_INVALID UNIFY_MERCHANT_GENERIC_DB_CONTRACT_CONTENT_INVALID__GET_ORDERS_CONTRACT_CONTENT_INVALID GET_ORDERS_DB_FETCH_CONTRACT_TERMS_ERROR UNIFY_DB_FETCH_ERROR__GET_ORDERS_DB_FETCH_CONTRACT_TERMS_ERROR GET_ORDERS_DB_FETCH_PAYMENT_STATUS UNIFY_DB_FETCH_ERROR__GET_ORDERS_DB_FETCH_PAYMENT_STATUS GET_ORDERS_DB_FETCH_TRANSACTION_ERROR UNIFY_DB_FETCH_ERROR__GET_ORDERS_DB_FETCH_TRANSACTION_ERROR GET_ORDERS_DB_LOOKUP_ERROR UNIFY_DB_FETCH_ERROR__GET_ORDERS_DB_LOOKUP_ERROR GET_ORDERS_DB_STORE_TRACKING_FAILURE UNIFY_DB_STORE_ERROR__GET_ORDERS_DB_STORE_TRACKING_FAILURE GET_ORDERS_EXCHANGE_LOOKUP_FAILURE MERCHANT_GET_ORDERS_ID_EXCHANGE_LOOKUP_FAILURE GET_ORDERS_EXCHANGE_LOOKUP_START_FAILURE MERCHANT_GET_ORDERS_ID_EXCHANGE_LOOKUP_START_FAILURE GET_ORDERS_EXCHANGE_REQUEST_FAILURE MERCHANT_GET_ORDERS_ID_EXCHANGE_REQUEST_FAILURE GET_ORDERS_EXCHANGE_TIMEOUT UNIFY_MERCHANT_GENERIC_EXCHANGE_TIMEOUT__GET_ORDERS_EXCHANGE_TIMEOUT GET_ORDERS_EXCHANGE_TRACKING_FAILURE MERCHANT_GET_ORDERS_EXCHANGE_TRACKING_FAILURE GET_ORDERS_FAILED_COMPUTE_PROPOSAL_HASH UNIFY_GENERIC_FAILED_COMPUTE_JSON_HASH__GET_ORDERS_FAILED_COMPUTE_PROPOSAL_HASH GET_ORDERS_ID_UNKNOWN UNIFY_MERCHANT_GENERIC_ORDER_UNKNOWN__GET_ORDERS_ID_UNKNOWN GET_ORDERS_ORDER_NOT_FOUND UNIFY_MERCHANT_GENERIC_ORDER_UNKNOWN__GET_ORDERS_ORDER_NOT_FOUND GET_ORDER_WRONG_CONTRACT UNIFY_MERCHANT_GENERIC_CONTRACT_HASH_DOES_NOT_MATCH_ORDER__GET_ORDER_WRONG_CONTRACT GET_PRODUCTS_DB_LOOKUP_ERROR UNIFY_DB_FETCH_ERROR__GET_PRODUCTS_DB_LOOKUP_ERROR GET_PRODUCTS_NOT_FOUND UNIFY_MERCHANT_PRODUCT_UNKNOWN__GET_PRODUCTS_NOT_FOUND GET_RESERVES_DB_LOOKUP_ERROR UNIFY_DB_FETCH_ERROR__GET_RESERVES_DB_LOOKUP_ERROR GET_TIPS_DB_LOOKUP_ERROR UNIFY_DB_FETCH_ERROR__GET_TIPS_DB_LOOKUP_ERROR GET_TIPS_ID_UNKNOWN MERCHANT_GET_TIPS_ID_UNKNOWN GET_TRANSFERS_DB_FETCH_ERROR UNIFY_DB_FETCH_ERROR__GET_TRANSFERS_DB_FETCH_ERROR HISTORY_DB_FETCH_ERROR DEAD_HISTORY_DB_FETCH_ERROR HISTORY_TIMESTAMP_OVERFLOW DEAD_HISTORY_TIMESTAMP_OVERFLOW HOLE_IN_WIRE_FEE_STRUCTURE MERCHANT_GENERIC_HOLE_IN_WIRE_FEE_STRUCTURE INSTANCE_UNKNOWN MERCHANT_GENERIC_INSTANCE_UNKNOWN INTERNAL_INVARIANT_FAILURE UNIFY_GENERIC_INTERNAL_INVARIANT_FAILURE INTERNAL_LOGIC_ERROR UNIFY_GENERIC_INTERNAL_INVARIANT_FALURE__INTERNAL_LOGIC_ERROR INVALID INVALID INVALID_RESPONSE GENERIC_INVALID_RESPONSE JSON_ALLOCATION_FAILURE GENERIC_JSON_ALLOCATION_FAILURE JSON_INVALID GENERIC_JSON_INVALID JSON_INVALID_WITH_DETAILS UNIFY_GENERIC_JSON_INVALID__JSON_INVALID_WITH_DETAILS KEYS_HAVE_NOT_NUMERIC GENERIC_NUMERIC_PARAMETER_EXPECTED KEYS_INVALID EXCHANGE_INVALID_KEYS_RETURNED KEYS_MISSING EXCHANGE_GENERIC_KEYS_MISSING KEYS_TIMETRAVEL_FORBIDDEN EXCHANGE_KEYS_TIMETRAVEL_FORBIDDEN LINK_COIN_UNKNOWN EXCHANGE_LINK_COIN_UNKNOWN LINK_REPLY_MALFORMED UNIFY_GENERIC_REPLY_MALFORMED__LINK_REPLY_MALFORMED LIST_EXCHANGES_DB_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__LIST_EXCHANGES_DB_ERROR MAP_IN_UNMATCHED_HASH DEAD_MAP_IN_UNMATCHED_HASH MELT_COIN_EXPIRED_NO_ZOMBIE EXCHANGE_MELT_COIN_EXPIRED_NO_ZOMBIE MELT_COIN_HISTORY_COMPUTATION_FAILED EXCHANGE_MELT_COIN_HISTORY_COMPUTATION_FAILED MELT_COIN_SIGNATURE_INVALID EXCHANGE_MELT_COIN_SIGNATURE_INVALID MELT_CURRENCY_MISMATCH UNIFY_GENERIC_CURRENCY_MISMATCH__MELT_CURRENCY_MISMATCH MELT_DB_FETCH_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__MELT_DB_FETCH_ERROR MELT_DB_STORE_SESSION_ERROR UNIFY_GENERIC_DB_COMMIT_ERROR__MELT_DB_STORE_SESSION_ERROR MELT_DENOMINATION_KEY_NOT_FOUND DEAD_MELT_DENOMINATION_KEY_NOT_FOUND MELT_DENOMINATION_SIGNATURE_INVALID UNIFY_EXCHANGE_DENOMINATION_SIGNATURE_INVALID__MELT_DENOMINATION_SIGNATURE_INVALID MELT_FEES_EXCEED_CONTRIBUTION EXCHANGE_MELT_FEES_EXCEED_CONTRIBUTION MELT_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS EXCHANGE_MELT_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS MELT_INSUFFICIENT_FUNDS EXCHANGE_MELT_INSUFFICIENT_FUNDS MELT_INVALID_SIGNATURE_BY_EXCHANGE EXCHANGE_MELT_INVALID_SIGNATURE_BY_EXCHANGE MERCHANT_FAILED_TO_EXPAND_TEMPLATE MERCHANT_GENERIC_FAILED_TO_EXPAND_TEMPLATE MERCHANT_FAILED_TO_LOAD_TEMPLATE MERCHANT_GENERIC_FAILED_TO_LOAD_TEMPLATE MERCHANT_GET_ORDER_INVALID_TOKEN MERCHANT_GET_ORDERS_ID_INVALID_TOKEN MERCHANT_ORDER_GET_REPLY_MALFORMED UNIFY_GENERIC_REPLY_MALFORMED__MERCHANT_GET_ORDER_REPLY_MALFORMED MERCHANT_PRIVATE_GET_ORDERS_BY_FILTER_DB_LOOKUP_ERROR MERCHANT_PRIVATE_GET_ORDERS_BY_FILTER_DB_LOOKUP_ERROR MERCHANT_PRIVATE_GET_ORDERS_CONTRACT_DB_LOOKUP_ERROR MERCHANT_PRIVATE_GET_ORDERS_CONTRACT_DB_LOOKUP_ERROR MERCHANT_PRIVATE_GET_ORDERS_PARSE_CONTRACT_ERROR MERCHANT_PRIVATE_GET_ORDERS_PARSE_CONTRACT_ERROR MERCHANT_PRIVATE_GET_ORDERS_REFUND_DB_LOOKUP_ERROR MERCHANT_PRIVATE_GET_ORDERS_REFUND_DB_LOOKUP_ERROR MERCHANT_PRIVATE_GET_ORDERS_STATUS_DB_LOOKUP_ERROR MERCHANT_PRIVATE_GET_ORDERS_STATUS_DB_LOOKUP_ERROR MERCHANT_REFUND_NOT_ALLOWED_BY_CONTRACT MERCHANT_REFUND_NOT_ALLOWED_BY_CONTRACT METHOD_INVALID GENERIC_METHOD_INVALID NONE NONE NOT_IMPLEMENTED DEAD_NOT_IMPLEMENTED OPERATION_INVALID EXCHANGE_REFRESHES_REVEAL_OPERATION_INVALID OPERATION_UNKNOWN EXCHANGE_GENERIC_OPERATION_UNKNOWN ORDERS_ALREADY_CLAIMED MERCHANT_POST_ORDERS_ID_CLAIM_ALREADY_CLAIMED ORDERS_CLAIM_HARD_DB_ERROR UNIFY_GENERIC_DB_COMMIT_ERROR__ORDERS_CLAIM_HARD_DB_ERROR ORDERS_CLAIM_NOT_FOUND MERCHANT_POST_ORDERS_ID_CLAIM_NOT_FOUND ORDERS_CLAIM_SOFT_DB_ERROR UNIFY_GENERIC_DB_SOFT_ERROR__ORDERS_CLAIM_SOFT_DB_ERROR ORDERS_DELETE_AWAITING_PAYMENT MERCHANT_PRIVATE_ORDERS_DELETE_AWAITING_PAYMENT ORDERS_DELETE_DB_HARD_FAILURE UNIFY_GENERIC_DB_COMMIT_ERROR ORDERS_DELETE_NO_SUCH_ORDER UNIFY_MERCHANT_GENERIC_ORDER_NOT_FOUND__ORDERS_DELETE_NO_SUCH_ORDER ORDERS_GET_DB_LOOKUP_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__ORDERS_GET_DB_LOOKUP_ERROR ORDERS_LOOKUP_PRODUCT_DB_HARD_FAILURE UNIFY_GENERIC_DB_FETCH_ERROR__ORDERS_LOOKUP_PRODUCT_DB_HARD_FAILURE ORDERS_LOOKUP_PRODUCT_DB_SOFT_FAILURE UNIFY_GENERIC_DB_SOFT_ERROR__ORDERS_LOOKUP_PRODUCT_DB_SOFT_FAILURE ORDERS_LOOKUP_PRODUCT_NOT_FOUND UNIFY_MERCHANT_GENERIC_PRODUCT_UNKNOWN__ORDERS_LOOKUP_PRODUCT_NOT_FOUND PAID_COIN_SIGNATURE_INVALID MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID PAID_CONTRACT_HASH_MISMATCH MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH PAID_DB_ERROR UNIFY_GENERIC_DB_LOOKUP_ERROR__PAID_DB_ERROR PAID_ORDER_UNKNOWN UNIFY_MERCHANT_GENERIC_ORDER_NOT_FOUND__PAID_ORDER_UNKNOWN PARAMETER_MALFORMED GENERIC_PARAMETER_MALFORMED PARAMETER_MISSING UNIFY_GENERIC_PARAMETER_MISSING PARSER_OUT_OF_MEMORY GENERIC_PARSER_OUT_OF_MEMORY PATCH_INSTANCES_BAD_CURRENCY UNIFY_GENERIC_CURRENCY_MISMATCH__PATCH_INSTANCES_BAD_CURRENCY PATCH_INSTANCES_BAD_PAYTO_URIS UNIFY_GENERIC_PAYTO_URI_MALFORMED PATCH_INSTANCES_DB_COMMIT_ERROR UNIFY_GENERIC_DB_COMMIT_FAILED__PATCH_INSTANCES_DB_COMMIT_ERROR PATCH_INSTANCES_DB_START_ERROR UNIFY_GENERIC_DB_START_FAILED__PATCH_INSTANCES_DB_START_ERROR PAY_ABORT_REFUND_REFUSED_PAYMENT_COMPLETE DEDA_PAY_ABORT_REFUND_REFUSED_PAYMENT_COMPLETE PAY_AMOUNT_OVERFLOW MERCHANT_POST_ORDERS_ID_PAY_AMOUNT_OVERFLOW PAY_COINS_ARRAY_EMPTY UNIFY_GENERIC_PARAMETER_MISSING__PAY_COINS_ARRAY_EMPTY PAY_COIN_SIGNATURE_INVALID MERCHANT_POST_ORDERS_ID_PAY_COIN_SIGNATURE_INVALID PAY_DB_FETCH_PAY_ERROR UNIFY_GENERIC_DB_FETCH_FAILED__PAY_DB_FETCH_PAY_ERROR PAY_DB_FETCH_TRANSACTION_ERROR UNIFY_GENERIC_DB_COMMIT_FAILED_HARD__PAY_DB_FETCH_TRANSACTION_ERROR PAY_DB_STORE_PAY_ERROR UNIFY_GENERIC_DB_STORE_FAILED__PAY_DB_STORE_PAY_ERROR PAY_DB_STORE_PAYMENTS_ERROR UNIFY_GENERIC_DB_STORE_FAILED__PAY_DB_STORE_PAYMENTS_ERROR PAY_DB_STORE_TRANSACTION_ERROR UNIFY_GENERIC_DB_COMMIT_FAILED__PAY_DB_STORE_TRANSACTION_ERROR PAY_DENOMINATION_DEPOSIT_EXPIRED MERCHANT_POST_ORDERS_ID_PAY_DENOMINATION_DEPOSIT_EXPIRED PAY_DENOMINATION_KEY_AUDITOR_FAILURE MERCHANT_POST_ORDERS_ID_PAY_DENOMINATION_KEY_AUDITOR_FAILURE PAY_DENOMINATION_KEY_NOT_FOUND MERCHANT_POST_ORDERS_ID_PAY_DENOMINATION_KEY_NOT_FOUND PAY_EXCHANGE_FAILED MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_FAILED PAY_EXCHANGE_HAS_NO_KEYS MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_HAS_NO_KEYS PAY_EXCHANGE_KEYS_FAILURE MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_KEYS_FAILURE PAY_EXCHANGE_LOOKUP_FAILED MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_LOOKUP_FAILED PAY_EXCHANGE_REJECTED DEAD_MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_REJECTED PAY_EXCHANGE_REPLY_MALFORMED UNIFY_GENERIC_REPLY_MALFORMED__PAY_EXCHANGE_REPLY_MALFORMED PAY_EXCHANGE_TIMEOUT UNIFY_MERCHANT_GENERIC_EXCHANGE_TIMEOUT__PAY_EXCHANGE_TIMEOUT PAY_EXCHANGE_WIRE_FEE_ADDITION_FAILED MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_WIRE_FEE_ADDITION_FAILED PAY_FAILED_COMPUTE_PROPOSAL_HASH UNIFY_GENERIC_FAILED_COMPUTE_JSON_HASH__PAY_FAILED_COMPUTE_PROPOSAL_HASH PAY_FEES_EXCEED_PAYMENT MERCHANT_POST_ORDERS_ID_PAY_FEES_EXCEED_PAYMENT PAY_INSUFFICIENT_FUNDS MERCHANT_POST_ORDERS_ID_PAY_INSUFFICIENT_FUNDS PAY_MERCHANT_FIELD_MISSING MERCHANT_POST_ORDERS_ID_PAY_MERCHANT_FIELD_MISSING PAY_MERCHANT_INVALID_RESPONSE MERCHANT_POST_ORDERS_ID_PAY_MERCHANT_INVALID_RESPONSE PAY_OFFER_EXPIRED MERCHANT_POST_ORDERS_ID_PAY_OFFER_EXPIRED PAY_PAYMENT_INSUFFICIENT_DUE_TO_FEES MERCHANT_POST_ORDERS_ID_PAY_PAYMENT_INSUFFICIENT_DUE_TO_FEES PAY_PAYMENT_INSUFFICIENT MERCHANT_POST_ORDERS_ID_PAY_PAYMENT_INSUFFICIENT PAY_PROPOSAL_NOT_FOUND UNIFY_MERCHANT_GENERIC_ORDER_UNKNOWN__PAY_PROPOSAL_NOT_FOUND PAY_REFUND_DEADLINE_PAST_WIRE_TRANSFER_DEADLINE MERCHANT_POST_ORDERS_ID_PAY_REFUND_DEADLINE_PAST_WIRE_TRANSFER_DEADLINE PAY_REFUNDED MERCHANT_POST_ORDERS_ID_PAY_REFUNDED PAY_REFUNDS_EXCEED_PAYMENTS MERCHANT_POST_ORDERS_ID_PAY_REFUNDS_EXCEED_PAYMENTS PAY_REFUND_SIGNATURE_FAILED MERCHANT_POST_ORDERS_ID_PAY_REFUND_SIGNATURE_FAILED PAYTO_MALFORMED UNIFY_GENERIC_PAYTO_URI_MALFORMED PAYTO_WRONG_METHOD DEAD_PAYTO_WRONG_METHOD PAY_WIRE_FEE_CURRENCY_MISMATCH UNIFY_GENERIC_CURRENCY_MISSMATCH__PAY_WIRE_FEE_CURRENCY_MISMATCH PAY_WIRE_HASH_UNKNOWN MERCHANT_POST_ORDERS_ID_PAY_WIRE_HASH_UNKNOWN PAY_WRONG_INSTANCE DEAD_PAY_WRONG_INSTANCE POLL_PAYMENT_CONTRACT_NOT_FOUND DEAD_POLL_PAYMENT_CONTRACT_NOT_FOUND POLL_PAYMENT_REPLY_MALFORMED DEAD_POLL_PAYMENT_REPLY_MALFORMED POST_INSTANCES_ALREADY_EXISTS MERCHANT_PRIVATE_POST_INSTANCES_ALREADY_EXISTS POST_INSTANCES_BAD_CURRENCY UNIFY_GENERIC_CURRENCY_MISSMATCH__POST_INSTANCES_BAD_CURRENCY POST_INSTANCES_BAD_PAYTO_URIS UNIFY_GENERIC_PAYTO_URI_MALFORMED__POST_INSTANCES_BAD_PAYTO_URIS POST_INSTANCES_DB_COMMIT_ERROR UNIFY_GENERIC_DB_COMMIT_ERROR__POST_INSTANCES_DB_COMMIT_ERROR POST_INSTANCES_DB_START_ERROR UNIFY_GENERIC_DB_START_ERROR__POST_INSTANCES_DB_START_ERROR POST_TRANSFERS_ACCOUNT_NOT_FOUND MERCHANT_PRIVATE_POST_TRANSFERS_ACCOUNT_NOT_FOUND POST_TRANSFERS_CONFLICTING_REPORTS MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_REPORTS POST_TRANSFERS_DB_FETCH_DEPOSIT_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__POST_TRANSFERS_DB_FETCH_DEPOSIT_ERROR POST_TRANSFERS_DB_INTERNAL_LOGIC_ERROR UNIFY_GENERIC_DB_INVARIANT_FAILURE__POST_TRANSFERS_DB_INTERNAL_LOGIC_ERROR POST_TRANSFERS_DB_LOOKUP_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__POST_TRANSFERS_DB_LOOKUP_ERROR POST_TRANSFERS_DB_STORE_COIN_ERROR UNIFY_GENERIC_DB_STORE_ERROR__POST_TRANSFERS_DB_STORE_COIN_ERROR POST_TRANSFERS_DB_STORE_ERROR UNIFY_GENERIC_DB_STORE_ERROR__POST_TRANSFERS_DB_STORE_ERROR POST_TRANSFERS_DB_STORE_TRANSFER_ERROR UNIFY_GENERIC_DB_STORE_ERROR__POST_TRANSFERS_DB_STORE_TRANSFER_ERROR POST_TRANSFERS_EXCHANGE_ERROR MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_ERROR POST_TRANSFERS_EXCHANGE_KEYS_FAILURE MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_KEYS_FAILURE POST_TRANSFERS_EXCHANGE_TIMEOUT UNIFY_MERCHANT_GENERIC_EXCHANGE_TIMEOUT__POST_TRANSFERS_EXCHANGE_TIMEOUT POST_TRANSFERS_JSON_BAD_WIRE_FEE MERCHANT_PRIVATE_POST_TRANSFERS_BAD_WIRE_FEE POST_TRANSFERS_JSON_RESPONSE_ERROR DEAD_POST_TRANSFERS_JSON_RESPONSE_ERROR POST_TRANSFERS_REQUEST_ERROR MERCHANT_PRIVATE_POST_TRANSFERS_REQUEST_ERROR PRODUCTS_DELETE_CONFLICTING_LOCK MERCHANT_PRIVATE_DELETE_PRODUCTS_CONFLICTING_LOCK PRODUCTS_DELETE_DB_HARD_FAILURE UNIFY_GENERIC_DB_COMMIT_ERROR__PRODUCTS_DELETE_DB_HARD_FAILURE PRODUCTS_DELETE_NO_SUCH_PRODUCT UNIFY_MERCHANT_GENERIC_PRODUCT_UNKNOWN__PRODUCTS_DELETE_NO_SUCH_PRODUCT PRODUCTS_LOCK_INSUFFICIENT_STOCKS MERCHANT_PRIVATE_POST_PRODUCTS_LOCK_INSUFFICIENT_STOCKS PRODUCTS_LOCK_UNKNOWN_PRODUCT UNIFY_MERCHANT_GENERIC_PRODUCT_UNKNOWN__PRODUCTS_LOCK_UNKNOWN_PRODUCT PRODUCTS_PATCH_DB_COMMIT_HARD_UNIFY_GENERIC_DB_COMMIT_ERROR__ERROR PRODUCTS_PATCH_DB_COMMIT_HARD_ERROR PRODUCTS_PATCH_TOTAL_LOST_EXCEEDS_STOCKS MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_LOST_EXCEEDS_STOCKS PRODUCTS_PATCH_TOTAL_LOST_REDUCED MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_LOST_REDUCED PRODUCTS_PATCH_TOTAL_STOCKED_REDUCED MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_STOCKED_REDUCED PRODUCTS_PATCH_UNKNOWN_PRODUCT UNIFY_MERCHANT_GENERIC_PRODUCT_UNKNOWN__PRODUCTS_PATCH_UNKNOWN_PRODUCT PRODUCTS_POST_CONFLICT_PRODUCT_EXISTS MERCHANT_PRIVATE_POST_PRODUCTS_CONFLICT_PRODUCT_EXISTS PRODUCTS_POST_DB_COMMIT_HARD_ERROR UNIFY_GENERIC_DB_COMMIT_ERROR__PRODUCTS_POST_DB_COMMIT_HARD_ERROR PRODUCTS_POST_DB_COMMIT_SOFT_ERROR UNIFY_GENERIC_DB_SOFT_ERROR__PRODUCTS_POST_DB_COMMIT_SOFT_ERROR PRODUCTS_POST_DB_START_ERROR UNIFY_GENERIC_DB_START_ERROR__PRODUCTS_POST_DB_START_ERROR PROPOSAL_INSTANCE_CONFIGURATION_LACKS_WIRE MERCHANT_PRIVATE_POST_ORDERS_INSTANCE_CONFIGURATION_LACKS_WIRE PROPOSAL_LOOKUP_DB_ERROR DEAD_PROPOSAL_LOOKUP_DB_ERROR PROPOSAL_LOOKUP_NOT_FOUND DEAD_PROPOSAL_LOOKUP_NOT_FOUND PROPOSAL_NO_LOCALTIME MERCHANT_PRIVATE_POST_ORDERS_NO_LOCALTIME PROPOSAL_ORDER_BAD_CURRENCY UNIFY_GENERIC_CURRENCY_MISMATCH__PROPOSAL_ORDER_BAD_CURRENCY PROPOSAL_ORDER_PARSE_ERROR MERCHANT_PRIVATE_POST_ORDER_PROPOSAL_PARSE_ERROR PROPOSAL_REPLY_MALFORMED UNIFY_GENERIC_REPLY_MALFORMED__PROPOSAL_REPLY_MALFORMED PROPOSAL_STORE_DB_ERROR_ALREADY_EXISTS MERCHANT_PRIVATE_POST_ORDER_ALREADY_EXISTS PROPOSAL_STORE_DB_ERROR_HARD UNIFY_GENERIC_DB_COMMIT_ERROR__PROPOSAL_STORE_DB_ERROR_HARD PROPOSAL_STORE_DB_ERROR UNIFY_GENERIC_DB_STORE_ERROR__PROPOSAL_STORE_DB_ERROR PROPOSAL_STORE_DB_ERROR_SOFT UNIFY_GENERIC_DB_SOFT_ERROR__PROPOSAL_STORE_DB_ERROR_SOFT RECOUP_BLINDING_FAILED EXCHANGE_RECOUP_BLINDING_FAILED RECOUP_COIN_BALANCE_NEGATIVE EXCHANGE_RECOUP_COIN_BALANCE_NEGATIVE RECOUP_COIN_BALANCE_ZERO EXCHANGE_RECOUP_COIN_BALANCE_ZERO RECOUP_DB_FETCH_FAILED UNIFY_GENERIC_DB_FETCH_ERROR__RECOUP_DB_FETCH_FAILED RECOUP_DB_PUT_FAILED UNIFY_GENERIC_DB_STORE_ERROR__RECOUP_DB_PUT_FAILED RECOUP_DENOMINATION_KEY_UNKNOWN UNIFY_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN__RECOUP_DENOMINATION_KEY_UNKNOWN RECOUP_DENOMINATION_SIGNATURE_INVALID UNIFY_EXCHANGE_DENOMINATION_SIGNATURE_INVALID__RECOUP_DENOMINATION_SIGNATURE_INVALID RECOUP_DENOMINATION_VALIDITY_IN_FUTURE EXCHANGE_RECOUP_DENOMINATION_VALIDITY_IN_FUTURE RECOUP_HISTORY_DB_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__RECOUP_HISTORY_DB_ERROR RECOUP_REPLY_MALFORMED UNIFY_GENERIC_REPLY_MALFORMED__RECOUP_REPLY_MALFORMED RECOUP_SIGNATURE_INVALID EXCHANGE_RECOUP_SIGNATURE_INVALID RECOUP_WITHDRAW_NOT_FOUND EXCHANGE_RECOUP_WITHDRAW_NOT_FOUND REFRESH_RECOUP_DENOMINATION_EXPIRED EXCHANGE_REFRESH_RECOUP_DENOMINATION_EXPIRED REFRESH_RECOUP_DENOMINATION_KEY_NOT_FOUND UNIFY_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN__REFRESH_RECOUP_DENOMINATION_KEY_NOT_FOUND REFRESH_RECOUP_DENOMINATION_VALIDITY_IN_FUTURE EXCHANGE_REFRESH_RECOUP_DENOMINATION_VALIDITY_IN_FUTURE REFRESH_ZOMBIE_DENOMINATION_EXPIRED EXCHANGE_REFRESH_ZOMBIE_DENOMINATION_EXPIRED REFUND_COIN_NOT_FOUND EXCHANGE_REFUND_COIN_NOT_FOUND REFUND_CONFLICT_DEPOSIT_INSUFFICIENT EXCHANGE_REFUND_CONFLICT_DEPOSIT_INSUFFICIENT REFUND_CURRENCY_MISMATCH UNIFY_GENERIC_CURRENCY_MISMATCH__REFUND_CURRENCY_MISMATCH REFUND_DATABASE_LOOKUP_ERROR UNIFY_GENERIC_DB_LOOKUP_ERROR__REFUND_DATABASE_LOOKUP_ERROR REFUND_DB_INCONSISTENT UNIFY_GENERIC_DB_INVARIANT_FAILURE__REFUND_DB_INCONSISTENT REFUND_DENOMINATION_KEY_NOT_FOUND UNIFY_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN__REFUND_DENOMINATION_KEY_NOT_FOUND REFUND_DEPOSIT_NOT_FOUND EXCHANGE_REFUND_DEPOSIT_NOT_FOUND REFUND_FEE_ABOVE_AMOUNT EXCHANGE_REFUND_FEE_ABOVE_AMOUNT REFUND_FEE_CURRENCY_MISMATCH UNIFY_GENERIC_CURRENCY_MISMATCH__REFUND_FEE_CURRENCY_MISMATCH REFUND_FEE_TOO_LOW EXCHANGE_REFUND_FEE_TOO_LOW REFUND_INCONSISTENT_AMOUNT EXCHANGE_REFUND_INCONSISTENT_AMOUNT REFUND_INCONSITENT_AMOUNT DEAD_REFUND_INCONSITENT_AMOUNT REFUND_INSUFFICIENT_FUNDS DEAD_REFUND_INSUFFICIENT_FUNDS REFUND_INVALID_FAILURE_PROOF_BY_EXCHANGE EXCHANGE_REFUND_INVALID_FAILURE_PROOF_BY_EXCHANGE REFUND_INVALID_SIGNATURE_BY_EXCHANGE EXCHANGE_REFUND_INVALID_SIGNATURE_BY_EXCHANGE REFUND_LOOKUP_DB_ERROR DEAD__REFUND_LOOKUP_DB_ERROR REFUND_LOOKUP_INVALID_RESPONSE DEAD_REFUND_LOOKUP_INVALID_RESPONSE REFUND_LOOKUP_NO_REFUND DEAD_REFUND_LOOKUP_NO_REFUND REFUND_MERCHANT_ALREADY_PAID EXCHANGE_REFUND_MERCHANT_ALREADY_PAID REFUND_MERCHANT_DB_COMMIT_ERROR UNIFY_GENERIC_DB_COMMIT_ERROR__REFUND_MERCHANT_DB_COMMIT_ERROR REFUND_MERCHANT_SIGNATURE_INVALID EXCHANGE_REFUND_MERCHANT_SIGNATURE_INVALID REFUND_MERCHANT_SIGNING_FAILED EXCHANGE_REFUND_MERCHANT_SIGNING_FAILED REFUND_ORDER_ID_UNKNOWN UNIFY_MERCHANT_GENERIC_ORDER_UNKNOWN__REFUND_ORDER_ID_UNKNOWN REFUND_ORDER_ID_UNPAID MERCHANT_POST_PRIVATE_ORDERS_ID_REFUND_ORDER_UNPAID REFUND_STORE_DB_ERROR UNIFY_GENERIC_DB_STORE_ERROR__REFUND_STORE_DB_ERROR REQUEST_PARAMETER_MALFORMED UNIFY_GENERIC_PARAMETER_MALFORMED RESERVES_DELETE_DB_HARD_FAILURE UNIFY_GENERIC_DB_COMMIT_ERROR__RESERVES_DELETE_DB_HARD_FAILURE RESERVES_DELETE_NO_SUCH_RESERVE MERCHANT_PRIVATE_DELETE_RESERVES_NO_SUCH_RESERVE RESERVES_INVALID_RESERVE_PUB MERCHANT_GENERIC_RESERVE_PUB_MALFORMED RESERVES_POST_DB_COMMIT_HARD_ERROR UNIFY_GENERIC_DB_COMMIT_ERROR__RESERVES_POST_DB_COMMIT_HARD_ERROR RESERVES_POST_UNSUPPORTED_WIRE_METHOD MERCHANT_PRIVATE_POST_RESERVES_UNSUPPORTED_WIRE_METHOD RESERVE_STATUS_DB_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__RESERVE_STATUS_DB_ERROR RESERVE_STATUS_REPLY_MALFORMED UNIFY_GENERIC_REPLY_MALFORMED__RESERVE_STATUS_REPLY_MALFORMED RESERVE_STATUS_UNKNOWN EXCHANGE_RESERVES_GET_STATUS_UNKNOWN REVEAL_AMOUNT_INSUFFICIENT EXCHANGE_REFRESHES_REVEAL_AMOUNT_INSUFFICIENT REVEAL_CNC_TRANSFER_ARRAY_SIZE_INVALID EXCHANGE_REFRESHES_REVEAL_CNC_TRANSFER_ARRAY_SIZE_INVALID REVEAL_COMMITMENT_VIOLATION EXCHANGE_REFRESHES_REVEAL_COMMITMENT_VIOLATION REVEAL_COST_CALCULATION_OVERFLOW EXCHANGE_REFRESHES_REVEAL_COST_CALCULATION_OVERFLOW REVEAL_DB_COMMIT_ERROR UNIFY_GENERIC_DB_COMMIT_ERROR__REVEAL_DB_COMMIT_ERROR REVEAL_DB_FETCH_REVEAL_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__REVEAL_DB_FETCH_REVEAL_ERROR REVEAL_DB_FETCH_SESSION_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__REVEAL_DB_FETCH_SESSION_ERROR REVEAL_FRESH_DENOMINATION_KEY_NOT_FOUND UNIFY_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN__REVEAL_FRESH_DENOMINATION_KEY_NOT_FOUND REVEAL_INVALID_RCH EXCHANGE_REFRESHES_REVEAL_INVALID_RCH REVEAL_KEYS_MISSING EXCHANGE_REFRESHES_REVEAL_KEYS_MISSING REVEAL_LINK_SIGNATURE_INVALID EXCHANGE_REFRESHES_REVEAL_LINK_SIGNATURE_INVALID REVEAL_NEW_DENOMS_ARRAY_SIZE_EXCESSIVE EXCHANGE_REFRESHES_REVEAL_NEW_DENOMS_ARRAY_SIZE_EXCESSIVE REVEAL_NEW_DENOMS_ARRAY_SIZE_MISMATCH EXCHANGE_REFRESHES_REVEAL_NEW_DENOMS_ARRAY_SIZE_MISMATCH REVEAL_REPLY_MALFORMED UNIFY_GENERIC_REPLY_MALFORMED__REVEAL_REPLY_MALFORMED REVEAL_SESSION_UNKNOWN EXCHANGE_REFRESHES_REVEAL_SESSION_UNKNOWN REVEAL_SIGNING_ERROR EXCHANGE_REFRESHES_REVEAL_SIGNING_ERROR SERVER_JSON_INVALID UNIFY_GENERIC_REPLY_MALFORMED__SERVER_JSON_INVALID SERVER_SIGNATURE_INVALID EXCHANGE_WIRE_SIGNATURE_INVALID SYNC_ACCOUNT_UNKNOWN SYNC_ACCOUNT_UNKNOWN SYNC_BACKUP_UNKNOWN DEAD_SYNC_BACKUP_UNKNOWN SYNC_BAD_IF_MATCH SYNC_BAD_IF_MATCH SYNC_BAD_IF_NONE_MATCH SYNC_BAD_IF_NONE_MATCH SYNC_BAD_SYNC_SIGNATURE SYNC_BAD_SYNC_SIGNATURE SYNC_DATABASE_FETCH_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__SYNC_DATABASE_FETCH_ERROR SYNC_DB_HARD_FETCH_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__SYNC_DB_HARD_FETCH_ERROR SYNC_DB_INCONSISTENT_FETCH_ERROR UNIFY_GENERIC_DB_INVARIANT_FAILURE__SYNC_DB_INCONSISTENT_FETCH_ERROR SYNC_DB_SOFT_FETCH_ERROR UNIFY_GENERIC_DB_SOFT_ERROR__SYNC_DB_SOFT_FETCH_ERROR SYNC_EXCESSIVE_CONTENT_LENGTH SYNC_EXCESSIVE_CONTENT_LENGTH SYNC_INVALID_SIGNATURE SYNC_INVALID_SIGNATURE SYNC_INVALID_UPLOAD SYNC_INVALID_UPLOAD SYNC_MALFORMED_CONTENT_LENGTH SYNC_MALFORMED_CONTENT_LENGTH SYNC_MISSING_CONTENT_LENGTH SYNC_MISSING_CONTENT_LENGTH SYNC_OUT_OF_MEMORY_ON_CONTENT_LENGTH SYNC_OUT_OF_MEMORY_ON_CONTENT_LENGTH SYNC_PAYMENT_CHECK_ORDER_DB_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__SYNC_PAYMENT_CHECK_ORDER_DB_ERROR SYNC_PAYMENT_CONFIRM_DB_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__SYNC_PAYMENT_CONFIRM_DB_ERROR SYNC_PAYMENT_CREATE_BACKEND_ERROR SYNC_PAYMENT_CREATE_BACKEND_ERROR SYNC_PAYMENT_CREATE_DB_ERROR UNIFY_GENERIC_DB_STORE_ERROR__SYNC_PAYMENT_CREATE_DB_ERROR SYNC_PAYMENT_TIMEOUT SYNC_PAYMENT_TIMEOUT SYNC_PREVIOUS_BACKUP_UNKNOWN SYNC_PREVIOUS_BACKUP_UNKNOWN SYNC_SHUTDOWN DEAD_SYNC_SHUTDOWN TEST_ECDH_ERROR DEAD_TEST_ECDH_ERROR TEST_EDDSA_ERROR DEAD_TEST_EDDSA_ERROR TEST_EDDSA_INVALID DEAD_TEST_EDDSA_INVALID TEST_RSA_GEN_ERROR DEAD_TEST_RSA_GEN_ERROR TEST_RSA_PUB_ERROR DEAD_TEST_RSA_PUB_ERROR TEST_RSA_SIGN_ERROR DEAD_TEST_RSA_SIGN_ERROR TIMEOUT GENERIC_TIMEOUT TIP_AUTHORIZE_DB_HARD_ERROR DEAD_TIP_AUTHORIZE_DB_HARD_ERROR TIP_AUTHORIZE_DB_LOOKUP_RESERVE_FAILURE UNIFY_GENERIC_DB_LOOKUP_ERROR__TIP_AUTHORIZE_DB_LOOKUP_RESERVE_FAILURE TIP_AUTHORIZE_DB_RESERVE_EXPIRED MERCHANT_TIP_AUTHORIZE_RESERVE_EXPIRED TIP_AUTHORIZE_DB_RESERVE_INVARIANT_FAILURE UNIFY_GENERIC_DB_INVARIANT_FAILURE__TIP_AUTHORIZE_DB_RESERVE_INVARIANT_FAILURE TIP_AUTHORIZE_DB_RESERVE_NOT_FOUND MERCHANT_TIP_AUTHORIZE_RESERVE_NOT_FOUND TIP_AUTHORIZE_DB_SERIALIZATION_FAILURE UNIFY_GENERIC_DB_SOFT_ERROR__TIP_AUTHORIZE_DB_SERIALIZATION_FAILURE TIP_AUTHORIZE_DB_SOFT_ERROR UNIFY_GENERIC_DB_SOFT_ERROR__TIP_AUTHORIZE_DB_SOFT_ERROR TIP_AUTHORIZE_DB_START_FAILURE UNIFY_GENERIC_DB_START_ERROR__TIP_AUTHORIZE_DB_START_FAILURE TIP_AUTHORIZE_DB_UPDATE_RESERVE_FAILURE UNIFY_GENERIC_DB_STORE_ERROR__TIP_AUTHORIZE_DB_UPDATE_RESERVE_FAILURE TIP_AUTHORIZE_INSTANCE_DOES_NOT_TIP DEAD_TIP_AUTHORIZE_INSTANCE_DOES_NOT_TIP TIP_AUTHORIZE_INSUFFICIENT_FUNDS MERCHANT_TIP_AUTHORIZE_INSUFFICIENT_FUNDS TIP_AUTHORIZE_RESERVE_EXPIRED MERCHANT_TIP_AUTHORIZE_RESERVE_EXPIRED TIP_AUTHORIZE_RESERVE_UNKNOWN MERCHANT_TIP_AUTHORIZE_RESERVE_UNKNOWN TIP_ENABLE_DB_TRANSACTION_ERROR DEAD__TIP_ENABLE_DB_TRANSACTION_ERROR TIP_LOOKUP_RESERVE_DB_FAILURE UNIFY_GENERIC_DB_FETCH_ERROR__TIP_LOOKUP_RESERVE_DB_FAILURE TIP_PICKUP_AMOUNT_CHANGED DEAD_TIP_PICKUP_AMOUNT_CHANGED TIP_PICKUP_AMOUNT_EXCEEDS_TIP_REMAINING MERCHANT_TIP_PICKUP_AMOUNT_EXCEEDS_TIP_REMAINING TIP_PICKUP_CONTACT_EXCHANGE_ERROR MERCHANT_TIP_PICKUP_CONTACT_EXCHANGE_ERROR TIP_PICKUP_DB_ERROR_HARD UNIFY_GENERIC_DB_COMMIT_ERROR__TIP_PICKUP_DB_ERROR_HARD TIP_PICKUP_DB_ERROR_SOFT UNIFY_GENERIC_DB_SOFT_ERROR__TIP_PICKUP_DB_ERROR_SOFT TIP_PICKUP_DB_STORE_HARD_ERROR UNIFY_GENERIC_DB_STORE_ERROR__TIP_PICKUP_DB_STORE_HARD_ERROR TIP_PICKUP_DB_STORE_SOFT_ERROR UNIFY_GENERIC_DB_SOFT_ERROR__TIP_PICKUP_DB_STORE_SOFT_ERROR TIP_PICKUP_DENOMINATION_UNKNOWN MERCHANT_TIP_PICKUP_DENOMINATION_UNKNOWN TIP_PICKUP_EXCHANGE_AMOUNT_OVERFLOW DEAD_TIP_PICKUP_EXCHANGE_AMOUNT_OVERFLOW TIP_PICKUP_EXCHANGE_DOWN DEAD_TIP_PICKUP_EXCHANGE_DOWN TIP_PICKUP_EXCHANGE_ERROR MERCHANT_TIP_PICKUP_EXCHANGE_ERROR TIP_PICKUP_EXCHANGE_KEYS_ERROR MERCHANT_TIP_PICKUP_EXCHANGE_KEYS_ERROR TIP_PICKUP_EXCHANGE_LACKED_KEYS DEAD_TIP_PICKUP_EXCHANGE_LACKED_KEYS TIP_PICKUP_EXCHANGE_LACKED_KEY DEAD_TIP_PICKUP_EXCHANGE_LACKED_KEY TIP_PICKUP_EXCHANGE_TIMEOUT UNIFY_MERCHANT_GENERIC_EXCHANGE_TIMEOUT__TIP_PICKUP_EXCHANGE_TIMEOUT TIP_PICKUP_EXCHANGE_TOO_MANY_PLANCHETS DEAD_TIP_PICKUP_EXCHANGE_TOO_MANY_PLANCHETS TIP_PICKUP_HAS_EXPIRED MERCHANT_TIP_PICKUP_HAS_EXPIRED TIP_PICKUP_NO_FUNDS DEAD_TIP_PICKUP_NO_FUNDS TIP_PICKUP_SUMMATION_FAILED MERCHANT_TIP_PICKUP_SUMMATION_FAILED TIP_PICKUP_TIP_ID_UNKNOWN MERCHANT_GENERIC_TIP_ID_UNKNOWN TIP_PICKUP_UNBLIND_FAILURE MERCHANT_TIP_PICKUP_UNBLIND_FAILURE TIP_PICKUP_WITHDRAW_FAILED_AT_EXCHANGE DEAD_TIP_PICKUP_WITHDRAW_FAILED_AT_EXCHANGE TIP_PICKUP_WITHDRAW_FAILED DEAD_TIP_PICKUP_WITHDRAW_FAILED TIP_QUERY_DB_ERROR DEAD_TIP_QUERY_DB_ERROR TIP_QUERY_INSTANCE_DOES_NOT_TIP DEAD_TIP_QUERY_INSTANCE_DOES_NOT_TIP TIP_QUERY_RESERVE_CURRENCY_MISMATCH DEAD_TIP_QUERY_RESERVE_CURRENCY_MISMATCH TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_CLOSED DEAD_TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_CLOSED TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_DEPOSIT DEAD_TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_DEPOSIT TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_INCONSISTENT DEAD_TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_INCONSISTENT TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_RECOUP DEAD_TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_RECOUP TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_WITHDRAW DEAD_TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_WITHDRAW TIP_QUERY_RESERVE_HISTORY_FAILED_EMPTY DEAD_TIP_QUERY_RESERVE_HISTORY_FAILED_EMPTY TIP_QUERY_RESERVE_HISTORY_FAILED DEAD_TIP_QUERY_RESERVE_HISTORY_FAILED TIP_QUERY_RESERVE_HISTORY_INVALID_NO_DEPOSIT DEAD_TIP_QUERY_RESERVE_HISTORY_INVALID_NO_DEPOSIT TIP_QUERY_RESERVE_STATUS_FAILED_EXCHANGE_DOWN DEAD_TIP_QUERY_RESERVE_STATUS_FAILED_EXCHANGE_DOWN TIP_QUERY_RESERVE_UNKNOWN_TO_EXCHANGE DEAD_TIP_QUERY_RESERVE_UNKNOWN_TO_EXCHANGE TIP_QUERY_TIP_ID_UNKNOWN DEAD_TIP_QUERY_TIP_ID_UNKNOWN TRACK_TRANSACTION_COIN_TRACE_ERROR DEAD_TRACK_TRANSACTION_COIN_TRACE_ERROR TRACK_TRANSACTION_CONFLICTING_REPORTS DEAD_TRACK_TRANSACTION_CONFLICTING_REPORTS TRACK_TRANSACTION_DB_FETCH_PAYMENT_ERROR DEAD_TRACK_TRANSACTION_DB_FETCH_PAYMENT_ERROR TRACK_TRANSACTION_DB_FETCH_TRANSACTION_ERROR DEAD_TRACK_TRANSACTION_DB_FETCH_TRANSACTION_ERROR TRACK_TRANSACTION_DB_NO_DEPOSITS_ERROR DEAD_TRACK_TRANSACTION_DB_NO_DEPOSITS_ERROR TRACK_TRANSACTION_EXCHANGE_KEYS_FAILURE DEAD_TRACK_TRANSACTION_EXCHANGE_KEYS_FAILURE TRACK_TRANSACTION_EXCHANGE_TIMEOUT DEAD_TRACK_TRANSACTION_EXCHANGE_TIMEOUT__TRACK_TRANSACTION_EXCHANGE_TIMEOUT TRACK_TRANSACTION_TRANSACTION_UNKNOWN DEAD_TRACK_TRANSACTION_TRANSACTION_UNKNOWN TRACK_TRANSACTION_WIRE_TRANSFER_TRACE_ERROR DEAD_TRACK_TRANSACTION_WIRE_TRANSFER_TRACE_ERROR TRANSFERS_GET_DB_FETCH_FAILED UNIFY_GENERIC_DB_FETCH_ERROR__TRANSFERS_GET_DB_FETCH_FAILED TRANSFERS_GET_DB_INCONSISTENT UNIFY_GENERIC_DB_INVARIANT_FAILURE__TRANSFERS_GET_DB_INCONSISTENT TRANSFERS_GET_REPLY_MALFORMED UNIFY_GENERIC_REPLY_MALFORMED__TRANSFERS_GET_REPLY_MALFORMED TRANSFERS_GET_WIRE_FEE_INCONSISTENT EXCHANGE_TRANSFERS_GET_WIRE_FEE_INCONSISTENT TRANSFERS_GET_WIRE_FEE_NOT_FOUND EXCHANGE_TRANSFERS_GET_WIRE_FEE_NOT_FOUND TRANSFERS_GET_WTID_NOT_FOUND EXCHANGE_TRANSFERS_GET_WTID_NOT_FOUND TRANSFERS_INVALID_WTID EXCHANGE_TRANSFERS_GET_WTID_MALFORMED UPLOAD_EXCEEDS_LIMIT UNIFY_GENERIC_UPLOAD_EXCEEDS_LIMIT URI_TOO_LONG GENERIC_URI_TOO_LONG VERSION_MALFORMED GENERIC_VERSION_MALFORMED WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE WALLET_CORE_API_OPERATION_UNKNOWN WALLET_CORE_API_OPERATION_UNKNOWN WALLET_CORE_NOT_AVAILABLE WALLET_CORE_NOT_AVAILABLE WALLET_EXCHANGE_COIN_SIGNATURE_INVALID WALLET_EXCHANGE_COIN_SIGNATURE_INVALID WALLET_EXCHANGE_DENOMINATIONS_INSUFFICIENT WALLET_EXCHANGE_DENOMINATIONS_INSUFFICIENT WALLET_EXCHANGE_PROTOCOL_VERSION_INCOMPATIBLE WALLET_EXCHANGE_PROTOCOL_VERSION_INCOMPATIBLE WALLET_HTTP_REQUEST_THROTTLED WALLET_HTTP_REQUEST_THROTTLED WALLET_HTTP_REQUEST_TIMEOUT WALLET_HTTP_REQUEST_TIMEOUT WALLET_INVALID_TALER_PAY_URI WALLET_INVALID_TALER_PAY_URI WALLET_NETWORK_ERROR WALLET_NETWORK_ERROR WALLET_ORDER_ALREADY_CLAIMED WALLET_ORDER_ALREADY_CLAIMED WALLET_RECEIVED_MALFORMED_RESPONSE WALLET_RECEIVED_MALFORMED_RESPONSE WALLET_TIPPING_COIN_SIGNATURE_INVALID WALLET_TIPPING_COIN_SIGNATURE_INVALID WALLET_UNEXPECTED_EXCEPTION WALLET_UNEXPECTED_EXCEPTION WALLET_UNEXPECTED_REQUEST_ERROR WALLET_UNEXPECTED_REQUEST_ERROR WALLET_WITHDRAWAL_GROUP_INCOMPLETE WALLET_WITHDRAWAL_GROUP_INCOMPLETE WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK WALLET_WITHDRAW_RESERVE_UNKNOWN_AT_EXCHANGE WALLET_WITHDRAW_RESERVE_UNKNOWN_AT_EXCHANGE WITHDRAW_AMOUNT_FEE_OVERFLOW EXCHANGE_WITHDRAW_AMOUNT_FEE_OVERFLOW WITHDRAW_AMOUNT_WITHDRAWALS_OVERFLOW DEAD_WITHDRAW_AMOUNT_WITHDRAWALS_OVERFLOW WITHDRAW_DB_FETCH_ERROR UNIFY_GENERIC_DB_FETCH_ERROR__WITHDRAW_DB_FETCH_ERROR WITHDRAW_DB_STORE_ERROR UNIFY_GENERIC_DB_STORE_ERROR__WITHDRAW_DB_STORE_ERROR WITHDRAW_DENOMINATION_KEY_NOT_FOUND UNIFY_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN__WITHDRAW_DENOMINATION_KEY_NOT_FOUND WITHDRAW_HISTORIC_DENOMINATION_KEY_NOT_FOUND DEAD_WITHDRAW_HISTORIC_DENOMINATION_KEY_NOT_FOUND WITHDRAW_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS EXCHANGE_WITHDRAW_HISTORY_ERROR_INSUFFICIENT_FUNDS WITHDRAW_INSUFFICIENT_FUNDS EXCHANGE_WITHDRAW_INSUFFICIENT_FUNDS WITHDRAW_REPLY_MALFORMED UNIFY_GENERIC_REPLY_MALFORMED__WITHDRAW_REPLY_MALFORMED WITHDRAW_RESERVE_BALANCE_CORRUPT UNIFY_GENERIC_DB_INVARIANT_FAILURE__WITHDRAW_RESERVE_BALANCE_CORRUPT WITHDRAW_RESERVE_HISTORY_IMPOSSIBLE UNIFY_GENERIC_DB_INVARIANT_FAILURE__WITHDRAW_RESERVE_HISTORY_IMPOSSIBLE WITHDRAW_RESERVE_SIGNATURE_INVALID EXCHANGE_WITHDRAW_RESERVE_SIGNATURE_INVALID WITHDRAW_RESERVE_UNKNOWN EXCHANGE_WITHDRAW_RESERVE_UNKNOWN WITHDRAW_RESERVE_WITHOUT_WIRE_TRANSFER DEAD_WITHDRAW_RESERVE_WITHOUT_WIRE_TRANSFER WITHDRAW_SIGNATURE_FAILED EXCHANGE_WITHDRAW_SIGNATURE_FAILED WITHDRAW_UNBLIND_FAILURE EXCHANGE_WITHDRAW_UNBLIND_FAILURE WITHDRAW_VALIDITY_IN_FUTURE EXCHANGE_WITHDRAW_VALIDITY_IN_FUTURE WITHDRAW_VALIDITY_IN_PAST EXCHANGE_WITHDRAW_VALIDITY_IN_PAST WRONG_NUMBER_OF_SEGMENTS EXCHANGE_GENERIC_WRONG_NUMBER_OF_SEGMENTS |
|
First big rename pass done. Needs more testing... |
Date Modified | Username | Field | Change |
---|---|---|---|
2020-07-21 09:24 | Florian Dold | New Issue | |
2020-07-21 23:25 | Christian Grothoff | Severity | minor => tweak |
2020-07-21 23:25 | Christian Grothoff | Status | new => confirmed |
2020-07-24 12:02 | Christian Grothoff | Product Version | => git (master) |
2020-07-24 12:02 | Christian Grothoff | Target Version | 0.8 => 0.8.1 |
2020-08-25 20:50 | Christian Grothoff | Note Added: 0016770 | |
2020-08-25 20:50 | Christian Grothoff | Assigned To | => Florian Dold |
2020-08-25 20:50 | Christian Grothoff | Status | confirmed => feedback |
2020-08-25 20:50 | Christian Grothoff | Note Added: 0016771 | |
2020-08-27 10:20 | Florian Dold | Note Added: 0016777 | |
2020-08-27 10:21 | Florian Dold | Assigned To | Florian Dold => Christian Grothoff |
2020-08-27 10:38 | Florian Dold | Note Added: 0016778 | |
2020-08-27 10:38 | Florian Dold | Status | feedback => assigned |
2020-08-27 11:47 | Christian Grothoff | Note Added: 0016779 | |
2020-08-27 11:51 | Florian Dold | Note Added: 0016780 | |
2020-08-27 11:54 | Christian Grothoff | Note Added: 0016781 | |
2020-08-27 12:03 | Florian Dold | Note Added: 0016782 | |
2020-08-27 12:14 | Christian Grothoff | Note Added: 0016783 | |
2020-08-28 00:24 | Christian Grothoff | Assigned To | Christian Grothoff => jonathanbuchanan |
2020-10-11 20:59 | Christian Grothoff | Assigned To | jonathanbuchanan => Christian Grothoff |
2020-10-11 20:59 | Christian Grothoff | Target Version | 0.8.1 => 0.9 |
2020-10-11 20:59 | Christian Grothoff | Description Updated | |
2020-10-11 21:00 | Christian Grothoff | Assigned To | Christian Grothoff => |
2020-10-11 21:00 | Christian Grothoff | Status | assigned => confirmed |
2020-10-25 23:17 | Christian Grothoff | Assigned To | => Christian Grothoff |
2020-10-25 23:17 | Christian Grothoff | Status | confirmed => assigned |
2020-10-26 00:36 | Christian Grothoff | Note Added: 0017041 | |
2020-10-26 00:36 | Christian Grothoff | File Added: missmatches.txt | |
2020-10-26 13:39 | Christian Grothoff | Note Added: 0017042 | |
2020-10-26 13:40 | Christian Grothoff | Priority | normal => high |
2020-10-28 21:13 | Christian Grothoff | Note Added: 0017048 | |
2020-10-28 21:13 | Christian Grothoff | File Added: table.txt | |
2020-10-29 00:54 | Christian Grothoff | Relationship added | parent of 0006632 |
2020-11-08 01:35 | Christian Grothoff | Note Added: 0017110 | |
2020-11-10 13:37 | Christian Grothoff | Relationship deleted | parent of 0006632 |
2020-11-10 13:37 | Christian Grothoff | Status | assigned => resolved |
2020-11-10 13:37 | Christian Grothoff | Resolution | open => fixed |
2020-11-10 13:37 | Christian Grothoff | Fixed in Version | => 0.8 |
2020-11-10 13:38 | Christian Grothoff | Target Version | 0.9 => 0.8 |
2021-08-24 16:23 | Christian Grothoff | Status | resolved => closed |