BIP 0020
I propose a scheme like this:
[] means optional, <> are placeholders
bitcoin:<address>?amount=<size><unit>[&label=<label>][&message=<message>]
Variables
- label: Label for that address (e.g. name of receiver)
- address: bitcoin address
- message: optional message that is shown to the user after scanning the QR code
- size: amount of $unit
- unit: BTC, [ᵗˢᵐᵇ]TBC[ᵗˢᵐᵇ], or null/omitted (which refers to the base unit)
Examples
Just the address:
bitcoin:18pnDgDYFMAKsHTA3ZqyAi6t8q9ztaWWXt
Address with name:BTC
bitcoin:18pnDgDYFMAKsHTA3ZqyAi6t8q9ztaWWXt?label=tcatm
Request to send 20.30 BTC to tcatm:
bitcoin:18pnDgDYFMAKsHTA3ZqyAi6t8q9ztaWWXt?amount=20.30BTC&label=tcatm
Request to send 400 TBC to Luke:
bitcoin:1KczVqwopWXQdFLe5sNQbpCq7yGSmXx2oo?amount=400TBC
Request to send 5 uBTC:
bitcoin:18pnDgDYFMAKsHTA3ZqyAi6t8q9ztaWWXt?amount=500
Request to send 50 BTC with message:
bitcoin:18pnDgDYFMAKsHTA3ZqyAi6t8qztaWWXt?amount=50BTC&label=tcatm&message=Payment%20for%20product%20xyz
Characters must be URI encoded properly.
BNF Syntax
bitcoinurn = "bitcoin:" bitcoinaddress [ ";version=" bitcoinversion ] [ "?" bitcoinparams ] bitcoinaddress = FIXME :) bitcoinversion = "1.0" bitcoinparams = *bitcoinparam bitcoinparam = amountparam | labelparam | messageparam amountparam = "amount=" digits bitcoinunit bitcoinunit = btcunits | tbcunitsunicode | tbcunitsascii | tbcunitsfull btcunits = "BTC" | "BTCents" | "uBTC" | "uBTCents" tbcunitsunicode = "ᵇTBC" | "ᵐTBC" | "ˢTBC" | "ᵗTBC" | "TBC" | "TBCᵗ" | "TBCˢ" | "TBCᵐ" | "TBCᵇ" tbcunitsascii = "bTBC" | "mTBC" | "sTBC" | "tTBC" | "TBC" | "TBCt" | "TBCs" | "TBCm" | "TBCb" tbcunitsfull = "tran-TBC" | "song-TBC" | "tam-TBC" | "bong-TBC" | "mill-TBC" | "san-TBC" | "ton-TBC" | "TBC" | "TBC-ton" | "TBC-san" | "TBC-mill" | "TBC-bong" labelparam = "label=" *uchar messageparam = "label=" *uchar