I maintain a Bitcoin Cash wallet called Electron Cash. Yesterday, I was asked if I would support the new Bitcoin Cash address formats from Bitpay . I started looking into this, and I have some concerns that I would like to bring to the community here.

Let me first say that I’m a fan of Bitpay. I think they’re a great company, and merchant tools are some of the most important things in the ecosystem. I also appreciate that Bitpay supports Bitcoin Cash and is even taking a leadership role in creating new standards.

I think Bitpay has overall good intentions but unfortunately, releasing this new address format without any public discussion may be creating problems.

Wallet Incompatibility

Here is the main problem: Unless and until every single user in the entire community upgrades to use a new wallet, there is going to be incompatibility between the new (Bitpay format) and the existing format for addresses. Newer wallets theoretically should still be able to support sending to old addresses unless those wallets intentionally stop supporting legacy addresses. But actually, it appears that Bitpay has done just that on their own platform.

This may be a matter of design choice if the idea is to prevent a user from sending to a BTC address. Yet, since many users still use old addresses, it breaks backwards compatibility.

Worse is that regardless of what Bitpay does, users with old wallets will not be able to send to new addresses, since their wallets will not recognize the address as valid.

Technical Description of the Problem

A bitcoin address is essentially an encoded hash of an ECDSA public key. The new address formats change this encoding.

When a bitcoin transaction is created, the output, known as a scriptPubKey, or locking script, will contain the PubKHash (the hash of the public key of the address you are sending to).

The wallet that creates this output decodes the recipient address to determine this PubKHash.

Raw, serialized transactions will appear the same to nodes and miners regardless of which address (new or old) is used, so nothing really changes at the base levels. Consensus doesn’t change. There’s no risk of any chain split or anything like that.

Still, the wallets need to know about the encoding. Without it, they will simply think that the address you’re trying to send to is invalid.

Address Translator

Along with their new standards, Bitpay has published an “address translator tool” https://bitpay.github.io/address-translator/

This tool can convert the old BTC encoding to the new BCH encoding and vice-versa. So, if you know about the tool and use it properly, you can work around this wallet compatibility problem.

It’s nice that there’s a workaround, but this should be the exception rather than the rule. If we are going to upgrade as a community, we should do it in lock-step rather than rely on workarounds. If the community is not synchronized, or if wallet incompatibility issues are not well understood, there could be confusion, FUD, and a weakening of confidence in the Bitcoin Cash community.

Permissionless Innovation? I consider permissionless innovation to be one of the key values of the Bitcoin Cash community. That simply means we don’t need permission. It does NOT mean we should throw away communication, cooperation and discussion, especially if what we’re doing affects others, let alone the entire community.

There is a developer mailing list for Bitcoin Cash. Why didn’t Bitpay use it? The only mailing list discussion about this happened after the fact, was very brief, and didn’t even involve Bitpay.

Maybe Bitpay didn’t foresee the possible disruption, or decided to proceed regardless. Whatever the case may be, I feel that the actions taken were not ideal.

Regardless of Communication, is the Address Format a Good Idea?

It is a good idea in general to upgrade the address format at some point. However, because this probably requires wallets to upgrade, it is not something that should be taken lightly or done too often, as it puts a burden on developers.

Therefore, we the Bitcoin Cash community should make sure that this is THE address format that we want do.

While the Bitpay address standard “gets the job done” as far as differentiating Bitcoin Cash addresses from Bitcoin legacy, that is all it does. There are other opportunities available in upgraded addresses such as better checksums, better readability, stronger collision prevention, etc.

Conclusion

For me, this isn’t about the address format per se. It’s about decentralized governance and how we work together as a community.

It’s great that Bitpay supports Bitcoin Cash and wants to help the community upgrade the address formats.

It’s not great that they went ahead and implemented it without any public discussion.