| 107 | | |
| | 107 | |
| | 108 | #3.5 "TRANSFER_TOKEN": A generic wallet-issuer request |
| | 109 | |
| | 110 | * Send |
| | 111 | |
| | 112 | TRANSFER_TOKEN( transaction_id, list_of_options, target, \ |
| | 113 | list_of_blinds, list_of_coins ) |
| | 114 | |
| | 115 | to IS (issuer service), where |
| | 116 | * transaction_id is a base64(random(128bit)) referencing this transaction |
| | 117 | e.g. for later resume after an abort. |
| | 118 | * option may contain variable=value pairs like "JITM=mandatory". |
| | 119 | * target |
| | 120 | * value(list_of_blinds) = value(list_of_coins): empty |
| | 121 | * value(list_of_blinds) > value(list_of_coins): payment reference |
| | 122 | * value(list_of_blinds) < value(list_of_coins): account reference |
| | 123 | |
| | 124 | For now, only 'pure' transactions are allowed, so either of these must |
| | 125 | be empty: |
| | 126 | * target : coin exchange (value(list_of_blinds) = value(list_of_coins)) |
| | 127 | * list_of_coins : mint request |
| | 128 | * list_of_blinds: redemption |
| | 129 | |
| | 130 | If at least one of the blinds or coins is rejected, the issuer answers |
| | 131 | |
| | 132 | TRANSFER_TOKEN_REJECT( transaction_id, reason, |
| | 133 | list( (blind1.key_id, reason1), ... ), \ |
| | 134 | list( (coin1.key_id, reason1), ... ) ) |
| | 135 | |
| | 136 | where "reason" may be some general failure like "500 minting not available". |
| | 137 | Otherwise the IS answers |
| | 138 | |
| | 139 | TRANSFER_TOKEN_ACCEPT( transaction_id, message, list_of_singed_blinds) |
| | 140 | |
| | 141 | If no minting was requested, list_of_singed_blinds ist empty. |
| | 142 | If minting was requested but delayed by the issuer, list_of_singed_blinds |
| | 143 | is empty and message contains "300 minting delayed". |
| | 144 | |
| | 145 | |
| | 146 | |