View Issue Details

IDProjectCategoryView StatusLast Update
0006434Talerotherpublic2021-08-24 16:23
ReporterFlorian Dold Assigned ToChristian Grothoff  
PriorityhighSeveritytweakReproducibilityhave not tried
Status closedResolutionfixed 
Product Versiongit (master) 
Target Version0.8Fixed in Version0.8 
Summary0006434: clean up error codes
DescriptionWe 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).
TagsNo tags attached.

Activities

Christian Grothoff

2020-08-25 20:50

manager   ~0016770

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?)

Christian Grothoff

2020-08-25 20:50

manager   ~0016771

Let's discuss this a bit.

Florian Dold

2020-08-27 10:20

manager   ~0016777

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.

Florian Dold

2020-08-27 10:38

manager   ~0016778

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.

Christian Grothoff

2020-08-27 11:47

manager   ~0016779

I'm for "hint: WALLET_UNEXPECTED_FOO: text from the comment we wrote on the enum value of WALLET_UNEXPECTED_FOO". Plus "details".

Florian Dold

2020-08-27 11:51

manager   ~0016780

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.

Christian Grothoff

2020-08-27 11:54

manager   ~0016781

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).

Florian Dold

2020-08-27 12:03

manager   ~0016782

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).

Christian Grothoff

2020-08-27 12:14

manager   ~0016783

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
}

Christian Grothoff

2020-10-26 00:36

manager   ~0017041

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.txt (3,393 bytes)   

Christian Grothoff

2020-10-26 13:39

manager   ~0017042

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.

Christian Grothoff

2020-10-28 21:13

manager   ~0017048

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
table.txt (35,917 bytes)   

Christian Grothoff

2020-11-08 01:35

manager   ~0017110

First big rename pass done. Needs more testing...

Issue History

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