I have included the comma delimited list in the proposal this time.
It occurs to me that it is simpler to just include the desired destination script, so I included that as well as an alternative.

Perhaps that should be included as an option in the spec, at the risk of additional complexity. Alternatively, it could replace the entire proposal....




---------------------------------------------------

A simple BIP writeup for a backward compatible URI scheme to help with segwit adoption by online stores and metchants.


====


This BIP is a modification of an earlier [[bip-0021.mediawiki|BIP 0021]] by Nils Schneider and Matt Corallo

==Abstract==
This BIP proposes a URI scheme which allows for backward compatibility with native segwit (bech32) wallets and legacy wallets (base58)

==Motivation==
The purpose of this URI scheme is to enable all users to easily make payments from any wallet, without allowing backward compatibility to be a barrier to segwit adoption. This BIP allows a merchant to preferentially receive payments to a bech32 address, while gracefully allowing older clients to make base58 encoded payments.

A comma separated, ordered list of preferred addresses is supplied as alternatives to the address field from BIP21. The list is ordered from most preferred to least, with the BIP21 address implicitly last. Senders should send to the first address which they know how to send to.

==Specification==

=== Query Keys ===

*address: an ordered list bitcoin destination which is preferred over the "address" of the url, in order from most preferred to less, with the url address value as least preferred

=== ABNF Grammar ===

    bitcoinaddress = base58 / bech32 / <future address format>
    bitcoinaddresslist = bitcoinaddress [ "," bitcoinaddresslist ]

== Appendix ==

=== Simpler syntax ===

 <nowiki>bitcoin:<address>[?amount=<amount>][?label=<label>][?message=<message>][?address=<bitcoinaddresslist>]</nowiki>

=== Examples ===

Just the address:
 bitcoin:3BnsWZiTdYVrqiPh2RP3q9Y3ZqvhbCN2it?address=bc1q5u92yq20hss4rc99mfu23h4dxkxn4uuyqd5dzy
 QR size: ~370 bytes

The address and other fields:
 bitcoin:3BnsWZiTdYVrqiPh2RP3q9Y3ZqvhbCN2it?addr=bc1q5u92yq20hss4rc99mfu23h4dxkxn4uuyqd5dzy&amount=50&label=Luke-Jr&message=Donation%20for%20project%20xyz
 QR size: ~470 bytes


Multiple addresses:
 bitcoin:3BnsWZiTdYVrqiPh2RP3q9Y3ZqvhbCN2it?address=bc1qq82ajthl5mlm50h6x70esvxs7atp3vfnjwp8z5kjdepsjqqw3zcs9u4nnp,bc1q5u92yq20hss4rc99mfu23h4dxkxn4uuyqd5dzy
 QR size: ~540 bytes


== Reference Implementations ==

=== Bitcoin clients ===

* none yet

== Alternative Proposal ==

Just include the desired script itself, encoded as hex:

 bitcoin:3BnsWZiTdYVrqiPh2RP3q9Y3ZqvhbCN2it?script=0014a70aa2014fbc2151e0a5da78a8dead358d3af384

=== Pros ===

* Infinite forward compatibility with any future script design
* Raw hex encoded scripts are short, and thus would make easy to scan images
* no need for list processing, or multiple alternatives

=== Cons ==

* address encoding features including checksum and network identification would be absent
* errors in script formation not detectable by the sender; risk of funds loss if the script is spendable but incorrect
* all error detection depends on the QR code or other transmission medium
* A separate top level uri scheme, such as bitcoinscript:<hex> might be more appropriate, but would cost backwards compatibility