Bitcoin wallet derivation paths - discussion

2019-02-11T14:24:06.000Z Honest Cash


Derivation paths determine how the address / private keys for your wallet are derived from the mnemonic. Mnemonic is called interchangeably also "seed", "recovery phrase", or "12 words phrase".

The main reason why the keys from one wallet cannot be imported to other is because of the difference in the derivation path.

Most used derivation paths:

m/44'/0'/0': used by BitcoinCom and Honest, same with BTC

m/44'/145'/0': used by Electron Cash, memo, set as standard in the BIP44 spec

The discussion was initiated because I was looking for ways for Honest wallets to be compatible with both the Badger and BitcoinCom (from the same company).

My personal opinion:

Just to make an analogy to the browsers. Javascript is broken. Every low-level library needs to detect browser versions and have separate implementations for different ones based on its usage. It's crucial if you want to grow user base. I applaud the standards, but we will not change the fact that there are millions of users using other HD paths due to historical reasons. Making business decision based of their engineering elegancy and not usage numbers hurts ecosystem growth.

While we should have a standard, it's very important to put user experience first. 1 mnemonic = 1 wallet. And let the wallet software handle the detection which derivation path should be used. "5 if statements".

What do you think?


RE: Discussion:, Badger and Honest wallet derivation paths

by @m4ktub

BIPs 32, 39, 43, 44, BIP 45 are somewhat confusing and arguably only 39 (seed phrases) was truly successful. It's interesting that BIP 43 recognizes the problems we're having and, together with BIP 44 try to limit BIP 32's flexibility in order to e ensure a consistent use of the seed. The "problem" is that it's only a convention. Any wallet that supports BIP 32 will work with any derivation path and ignore the conventions.

What's confusing is that Honest, Badger, and all follow BIP 44's conventions, regarding the seed. The difference is that Badger went with the "official" coin type for Bitcoin Cash (145) while stayed with Bitcoin's type (0). That's it.

I know why Honest went with's derivation and understand why Badger used 145. I can defend's choice of staying with 0 because, this way, users could simply create a Bitcoin Cash wallet with the same seed and get all the pre-fork coins immediately, that is, they tried to avoid precisely the same problem between BTC and BCH you're trying to avoid now. Also, at the time did it, everything was a bit less settled. Having all this said, I believe the correct path is forward towards coin type 145, but not by ignoring user experience and expectations.

> *While we should have a standard, it's very important to put user experience first. 1 mnemonic = 1 wallet. *

My suggestion for is to:

1. Keep current derivation path of m/44'/0'/0';

2. Nudge and other wallets to transition to m/44'/145'/0' as the rational to keep BTC's coin type has weakened;

3. Also derive m/44'/145'/0' from the current seed but only use it with Cash ID, for authentication, for example. The balance would be ignored.

Maybe this could allow users with the Badger wallet to login to the same account while keeping a different balance, for now.

RE: Discussion:, Badger and Honest wallet derivation paths

by @trumanity

Seamless would mean the user doesn't need to research something and then make a confusing choice. Because use case scenarios are limitless and potential transactions typically crop up with little warning, there should be very few hurdles in the way of enabling the user to take any decision. I am neither a coder or power user myself, and I should not need to graduate to being one before I can make a five dollar tip or purchase. It would be great to have my mnemonic in memory and used like a bank PIN number.

What happened to me today was I restored my HC wallet to Badger but a new address appears with a zero balance (My HC wallet was funded). A similar problem occurred two days ago migrating to Bitcoin.Com from Electron cash wallet. Regard ought to be paid to those coming from other software or addresses generated a while ago. 

Ideally, the decision would be made for the user or at least - have him choose between: 'Let us choose for you' and 'Decide by yourself'. If a user chooses the option to decide by himself, he should be asked to select which wallet he was previously using 'ElectronCash', 'Honest Cash', ' Wallet'. 

RE: RE: Discussion:, Badger and Honest wallet derivation paths

by @m4ktub

What you propose is probably the most user-friendly way of supporting the current diversity. Instead of asking for the derivation path, which is meaningless to the user, you can ask for the wallet. But that carries additional problems as it will not always work. Solving those corner cases is even harder and does nothing to have consistency in the future. It's a tough challenge.