Making payments

Blockchain data structures are fundamentally about transfers (inputs and outputs between addresses), and initiating a transfer is probably the action users take most frequently in wallet or exchange software. If you talk to cryptocurrency users or listen to Podcasts, you will frequently hear about a feeling of anxiety around sending money. People are afraid to typing in the wrong address, or they get nervous when a transaction is not showing up in an explorer or on an exchange after a few minutes. In traditional bank transfers it's perfectly normal that you have to wait for a few days and that you don't really know what happens in that time period. But with cryptocurrencies, the expectations are much higher and good interface design can help reduce some of the anxiety.

User flow

Sending coins typically follows a linear sequence of events, as follows:

    Request

    User A shares their address, the amount, and an optional payment ID with User B.

    Address input

    User B enters/copies the address or scans a QR code.

    Amount input

    User B enters the amount to send.

    Fee adjustment

    User B may increase the transaction fee for faster processing.

    Payment ID

    A payment ID may be entered to uniquely identify the purpose of the transaction later.

    Review & confirmation

    The UI requires User B to review the transaction details before sending it to the network.

    Sending

    The transaction is sent to the network for processing.

    Processing

    After a certain amount of blocks, the transaction is considered confirmed.

    Confirmed

    Once confirmed, the transaction is final and settled.

Note that typically you don't have to select an address from which the amount is taken from. While you usually receive payments on multiple addresses, wallets tend to disregard them for sending. An outgoing transaction might even include amounts from several addresses (for technical reasons). Some wallets offer options to choose a single "from" address.

1. Payment request

Sharing a cryptocurrencies address

The user receives a request for payment and navigates to the "Send" screen in their wallet. The recipient may share their address, or a payment ID (which has the address, amount and purpose encoded). The payment ID can also be received via a QR code.

2. Address input

Entering the recipient address

The recipient address may be entered manually, which can be error prone. It is better to use copy/paste functionality or providing the option to scan a QR code. This is covered in addresses.

If the wallet supports services like OpenAlias or the Ethereum Name Service, users can also enter URLs or email addresses that are then resolved into addresses. In those cases, it should be clarified that this option is available, and users should ideally verify that the correct address was retrieved.

3. Amount input

Entering the amount to send

Entering the amount to pay is fairly straightforward. Important is to show how many coins the user currently has in their account, as well as the amount converted to the users local currency (Euro, Dollar, etc). Another popular option is to "Send all".

4. Fee adjustment

MyEtherWallet gas limit

Nobody likes fees, but they are necessary for several purposes. For once, free transactions would likely lead to spam and network attacks. Second, they help compensate miners for their work. Since many cryptocurrencies have fixed supply, mining rewards will drop to zero at some point and fees will become the sole incentive for miners to continue their work.

Transaction fee adjustment via a slider

Users can typically increase fees for higher priority to get a transaction processed by the network. In some cases, like Monero, fees can also be increase for higher privacy (increased ring size in this case).

Transaction fee adjustment

Fees are typically fairly low, but can become substantial during peak network loads like December 2018. Also note that fees are independent of the amount that is sent. So sending $100,000 costs the same fee as $1.

Regarding the user experience, fee adjustment is often shown as a slider that ranges from low priority to high priority. As the user adjusts it, the indicators for transaction fee and processing time update dynamically.

5. Payment ID input

Some cryptocurrencies allow for an additional payment ID. In Monero, for example, the receiving and sending addresses are encrypted, so submitting a payment ID allows for faster matching of the transaction to a user account or invoice. Also note that so-called integrated addresses are a way to bake an address and a payment ID into a single address, which is much easier to work with.

7. Review & confirmation

Reviewing a transaction before sending it

Before sending the transaction for processing to the network, it is good practice to ask the user to review the information again to spot any mistakes. This is also a good moment to add an optional note, although this note will not be sent along with the transaction or stored in the blockchain.

8. Sent confirmation

A receipt for a sent transaction

Once sent, the transaction cannot be modified or reversed. Now senders may want to send a confirmation about the transaction to the recipient (a proof of transaction, or receipt), and both the sender and recipient may want to observe the transaction as it gets processed by the network.

9. Processing

Transaction status display

Transactions get first added to a queue and then added to a block. Then, the confirmation process begins. A confirmed transaction simply means that a certain number of blocks has been added to the blockchain after the block the transaction is stored in. Since blockchains have target block times, it's then possible to give an estimated confirmation time. The transaction will already show up in the receiving and sending wallet before being confirmed.

10. Confirmed

A transaction is considered confirmed if a certain number of blocks has been added to the chain after the block that contains the transaction. In Monero, that number is 10. A block is created every 2 minutes (in Monero), so a transaction takes about 20 minutes to be confirmed.

Centralized services can monitor transactions and send out emails or notifications as the confirmation process happens. I am not sure whether this is a technical limitation, but notifications are not usually offered by most software wallets.


Keep users informed

Notifications

Sometimes it can be a good idea to perform an action in the background (like processing a transaction), while allowing users to move on to other things. This is particularly important in crypto where actual money is being sent.


Help users get it right

Better error messages

Users will make mistakes. When they do, don't hold it against them with big red errors and technical statements. It's better to help them understand how to get it right.


Examples

Moneroju send flow

Moneroju wallet send screen Moneroju wallet send screen Moneroju wallet send screen Moneroju wallet send screen

Various others

Cake Wallet send screen Send screen in the Skycoin wallet app. Send screen in the Coinbase app. Send screen in the IOTA app. Send screen in the VeChainThor app. Send screen in the Nano wallet app. Send screen in the Citowise app.