Right now with bip-0021 it is possible to define bitcoin URIs to make payments like this:
bitcoin:1JfzSVJV44AALQrNrLCehznQLvbhUcr5mB?label=tip-erasmospunk
so if you put this URI in an HTML anchor:
<a href="bitcoin:1JfzSVJV44AALQrNrLCehznQLvbhUcr5mB?label=tip-erasmospunk">tip me!!!</a>
and click it the bitcoin wallet opens and it is preloaded with my bitcoin address together with the label "tip-erasmospunk".
One of the problems with this approach is that when I pay, it will take many seconds until the transaction propagates properly in the bitcoin network and the merchant receives it (we are talking only about the merchant seeing the transaction, not about conformation that can take many minutes). So if you want to pay the metro ticket, you need to do it as fast as possible.
So with bip0072 the above URI scheme is extended with the r
parameter that points to the merchant's server. The wallet ignores the other parameters (address, label, etc) and speaks with the server by using the bip-0070 Payment Protocol. This protocol allows the merchant to receive your signed transaction directly from you and confirm the transaction faster.
The faster transaction times are one of the benefits, here is the full list:
- Human-readable, secure payment destinations-- customers will be asked to authorize payment to "website.com" instead of an inscrutable, 34-character bitcoin address.
- Secure proof of payment, which the customer can use in case of a dispute with the merchant.
- Resistance from man-in-the-middle attacks that replace a merchant's bitcoin address with an attacker's address before a transaction is authorized with a hardware wallet.
- Payment received messages, so the customer knows immediately that the merchant has received, and has processed (or is processing) their payment.
- Refund addresses, automatically given to the merchant by the customer's wallet software, so merchants do not have to contact customers before refunding overpayments or orders that cannot be fulfilled for some reason.