Blockstream Bitcoin developer Rusty Russell recently published a proposal for a Segregated Witness-compatible c-lightning system for Bitcoin addresses. Detailing the proposal on his personal blog, Russell laid out plans to to add a prefix at the beginning of each address, as well as eliminate capital letters to improve convenience.
The New Bitcoin Addresses
Surprised at the lack of an address format for the “new form of addresses.” Pointing out an existing option that uses the p2sh address format, Russell says that the only way to currently get “raw segregated witness” addresses is to use BIP142, a proposal that has been deferred.
Without an address format for “raw” Segregated Witness, it seems like Core is stuck with the currency base58 format. Russell would like to see Bitcoin move away from this format, listing several areas where base58 could be improved:
- base58 is not trivial to parse. I used the bignum library to do it, though you can open-code it as bitcoin-core does.
- base58 addresses are variable-length. That makes webforms and software mildly harder, but also eliminates a simple sanity check.
- base58 addresses are hard to read over the phone. Greg Maxwell points out that the upper and lower case mix is particularly annoying.
- The 4-byte SHA check does not guarantee to catch the most common form of errors; transposed or single incorrect letters, though it’s pretty good (1 in 4 billion chance of random errors passing).
- At around 34 letters, it’s fairly compact (36 for the BIP141 P2WPKH).
Russell then advanced his own proposal for a Segregated Witness-compatible address format, which might also make Bitcoin addresses easier to use, based on his criticism of base58:
- Prefix for type, followed by colon. Currently “btc:” or “testnet:“.
- The full scriptPubkey using base 32 encoding as per http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt.
- At least 30 bits for crc64-ecma, up to a multiple of 5 to reach a letter boundary. This covers the prefix (as ascii), plus the scriptPubKey.
- The final letter is the Damm algorithm check digit of the entire previous string, using this 32-way quasigroup. This protects against single-letter errors as well as single transpositions.
With Russell’s proposed format, a Bitcoin address would look like this:
“btc:ybndrfg8ejkmcpqxot1uwisza345h769ybndrrfg (41 digits for a P2WPKH)”
“btc:yybndrfg8ejkmcpqxot1uwisza345h769ybndrfg8ejkmcpqxot1uwisza34 (60 digits for a P2WSH)”
Admitting the “half-baked” state of this proposal, Russell had a short discussion with Core developer Luke Dashjr in the comments section, who offered several critiques of the proposal. The most productive outcome of Dashjr’s criticism was Russell’s decision to change the prefixes on his proposed Bitcoin addresses. Rather than using “btc:” or “testnet:,” which Dashjr said that “improperly conflates BTC with Bitcoin,” Russell agreed with Dashjr that a better option would be to use “bc” and “bctest.”
At press time, this proposal only exists on Russell’s personal blog, and does not have concrete plans for official implementation.
What do you think about Russell’s Bitcoin address proposal? Let us know in the comments below!
Source: Rusty Russell’s Coding Blog
Images courtesy of Shutterstock, PBS.