mirror of
https://github.com/bitcoin/bips.git
synced 2026-08-31 18:47:36 +00:00
228 lines
8.8 KiB
Plaintext
228 lines
8.8 KiB
Plaintext
<pre>
|
|
BIP: 20
|
|
Layer: Applications
|
|
Title: URI Scheme
|
|
Author: Luke Dashjr <luke+bip@dashjr.org>
|
|
Comments-Summary: No comments yet.
|
|
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0020
|
|
Status: Replaced
|
|
Type: Standards Track
|
|
Created: 2011-01-10
|
|
License: BSD-2-Clause
|
|
</pre>
|
|
|
|
BIP 0020 is based off an earlier document by Nils Schneider. '''And has been replaced by BIP 0021'''
|
|
|
|
==Abstract==
|
|
This BIP proposes a URI scheme for making Bitcoin payments.
|
|
|
|
==Copyright==
|
|
This BIP is licensed under the BSD 2-clause license.
|
|
|
|
==Motivation==
|
|
The purpose of this URI scheme is to enable users to easily make payments by simply clicking links on webpages or scanning QR Codes.
|
|
|
|
==Specification==
|
|
|
|
=== General rules for handling (important!) ===
|
|
|
|
Bitcoin clients MUST NOT act on URIs without getting the user's authorization.
|
|
They SHOULD require the user to manually approve each payment individually, though in some cases they MAY allow the user to automatically make this decision.
|
|
|
|
=== Operating system integration ===
|
|
Graphical bitcoin clients SHOULD register themselves as the handler for the "bitcoin:" URI scheme by default, if no other handler is already registered. If there is already a registered handler, they MAY prompt the user to change it once when they first run the client.
|
|
|
|
=== BNF grammar ===
|
|
|
|
(See also [[#Simpler syntax|a simpler representation of syntax]])
|
|
|
|
bitcoinurn = "bitcoin:" bitcoinaddress [ ";version=" bitcoinversion ] [ "?" bitcoinparams ]
|
|
bitcoinaddress = base58 *base58
|
|
bitcoinversion = "1.0"
|
|
bitcoinparams = *bitcoinparam
|
|
bitcoinparam = amountparam | labelparam | messageparam | sendparam | otherparam
|
|
amountparam = "amount=" amount
|
|
amount = amountdecimal | amounthex
|
|
amountdecimal = *digit [ "." *digit ] [ "X" *digit ]
|
|
amounthex = "x" *hexdigit [ "." *hexdigit ] [ "X" *hexdigit ]
|
|
labelparam = "label=" *pchar
|
|
messageparam = "message=" *pchar
|
|
sendparam = "send=" *pchar
|
|
otherparam = pchar *pchar "=" *pchar
|
|
|
|
=== Query Keys ===
|
|
|
|
*label: Label for that address (e.g. name of receiver)
|
|
*address: bitcoin address
|
|
*message: message that shown to the user after scanning the QR code
|
|
*size: amount of base bitcoin units ([[#Transfer amount/size|see below]])
|
|
*send: used to send bitcoin, rather than to request them
|
|
*(others): optional, for future extensions
|
|
|
|
==== Transfer amount/size ====
|
|
|
|
If an amount is provided, it may be specified either in decimal or, when prefixed with a single "x" character, hexadecimal.
|
|
The number SHOULD be followed by "X" <digits> to signify an exponent to the base multiplier.
|
|
Thus, "X8" multiplies your number by 100,000,000.
|
|
For decimal values, this means the standard BTC unit.
|
|
For hexadecimal values, this means ᵇTBC units (which are equivalent to 42.94967296 BTC).
|
|
If exponent is omitted, implementations SHOULD assume X8 for decimal numbers, and X4 for hexadecimal numbers.
|
|
I.e. amount=50.00 is treated as 50 BTC, and amount=x40 is treated as 40 TBC.
|
|
When specifying bitcoin base units, "X0" SHOULD be used.
|
|
|
|
Bitcoin clients MAY display the amount in any format that is not intended to deceive the user.
|
|
They SHOULD choose a format that is foremost least confusing, and only after that most reasonable given the amount requested.
|
|
For example, so long as the majority of users work in BTC units, values should always be displayed in BTC by default, even if mBTC or TBC would otherwise be a more logical interpretation of the amount.
|
|
|
|
== Rationale ==
|
|
|
|
===Payment identifiers, not person identifiers===
|
|
Current best practices are that a unique address should be used for every transaction.
|
|
Therefore, a URI scheme should not represent an exchange of personal information, but a one-time payment.
|
|