Messages between any two parties of the network Wallet & Wallet Wallet & IS ================= ===================== = SUM = = MINT_KEY = = SPEND_TOKEN = = TRANSFER_TOKEN = ================= ===================== Prior: All messages between two entities that can occur directly before this one Follow: All messages between two entities that can occur directly after this one Hello is the initial handshake between two entities or the state after a Goodbye Goodbye is the end of a transaction, although also a Hello for a new transaction ============================================================================ ******************** * Wallet to Wallet * ******************** ================= = SUM = = SPEND_TOKEN = ================= SUM ----- A: SUM_ANNOUNCE #base64(transaction_id) standard identifier currency identifier amount target (what exactly is the target? Should it be base64 encoded?) Prior: Hello Follow: SUM_ACCEPT SUM_REJECT B: SUM_ACCEPT Prior: SUM_ANNOUNCE Follow: TOKEN_REDEEM SUM_REJECT Prior: SUM_ANNOUNCE Follow: Goodbye SPEND_TOKEN ----------- A: SPEND_TOKEN_REQUEST list(token) Prior: SUM_ACCEPT Follow: TOKEN_REJECT TOKEN_ACCEPT B: SPEND_TOKEN_REJECT type list(detail-reason) | list() Reasons: 'Rejected' 'Invalid token' 'See detail': 'None' All options of Reason, except 'See detail' Prior: TOKEN_REDEEM Follow: TOKEN_REDEEM Goodbye SPEND_TOKEN_ACCEPT Prior: TOKEN_REDEEM Follow: Goodbye ============================================================================ **************** * Wallet to IS * **************** ===================== = MINT_KEY = = TRANSFER_TOKEN = ===================== MINT_KEY ----------- Wallet: MINT_KEY_FETCH_DENOMINATION list(denomination, ...) TIME(time)|'0' Prior: Hello Follow: MINT_KEY_PASS MINT_KEY_FAILURE MINT_KEY_FETCH_KEYID list(#base64(key_identifier), ...) Prior: Hello Follow: MINT_KEY_PASS MINT_KEY_FAILURE IS: MINT_KEY_PASS list(keycertificate, ...) Prior: MINT_KEY_FETCH_DENOMINATION MINT_KEY_FETCH_KEYID Follow: Goodbye MINT_KEY_FAILURE list(([denomination|#base64(key_identifier)], reason), ...) Reasons: Unknown denomination Unknown key_identifier Revoked key_identifier Prior: MINT_KEY_FETCH_DENOMINATION MINT_KEY_FETCH_KEYID Follow: Goodbye TRANSFER_TOKEN -------------- Wallet: TRANSFER_TOKEN_REQUEST #base64(transaction_id) target list((#base64(key_identifier), list(blind,...)),...) list(token,...) list(('type', type), (option, value),...) Types: 'redeem' 'exchange' 'mint' Prior: Hello Follow: TRANSFER_TOKEN_REJECT TRANSFER_TOKEN_ACCEPT TRANSFER_TOKEN_DELAY TRANSFER_TOKEN_RESUME #base64(transaction_id) Prior: Hello Follow: TRANSFER_TOKEN_REJECT TRANSFER_TOKEN_ACCEPT TRANSFER_TOKEN_DELAY IS: TRANSFER_TOKEN_REJECT #base64(transaction_id) type reason list(reason-detail)|list() Types: 'Generic' 'Option' 'Target' 'Token' 'Blind' Reasons: Generic: 'Rejected' Option: 'Rejected' 'Unknown option' 'Incorrect type' 'See detail': 'None' All options of Reason, except 'See detail' Target: 'Rejected' 'IS-Reject' + Issuer specific rejection string Token: 'Rejected' 'Invalid key_identifier' 'Revoked key' 'Invalid token' 'Token already spent' 'See detail': 'None' All options of Reason, except 'See detail' Blind: 'Rejected' 'Invalid key_identifier' 'Key too soon' 'Key expired' 'Revoked key' 'Unable to sign' 'See detail': 'None' All options of Reason, except 'See detail' Prior: TRANSFER_TOKEN_REQUEST TRANSFER_TOKEN_RESUME Follow: Goodbye TRANSFER_TOKEN_ACCEPT #base64(transaction_id) list(signed_blind,...) Prior: TRANSFER_TOKEN_REQUEST TRANSFER_TOKEN_RESUME Follow: Goodbye TRANSFER_TOKEN_DELAY #base64(transaction_id) "Message" Messages: **Haven't done this yet** Prior: TRANSFER_TOKEN_REQUEST TRANSFER_TOKEN_RESUME Follow: Goodbye