Subject: [bitcoin-dev] Reformatted BIP proposal for address backward compatibility

From: Srintuar <[email-masked]>
Date: Thu, 18 Oct 2018 20:29:42 -0400

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