On 18/04/2019 20.57, Oscar Guindzberg wrote:

> On bitcoinj 0.14 to use a bip32 custom path (eg bip44) we had to
> subclass DeterministicKeyChain and override getAccountPath().
> Subclassing KeyChainFactory and KeyChainGroup was also required to
> make everything work.

Maybe we weren't aware of this way to set a path during our work on
custom account paths. I usually passed the path into the constructor and
didn't subclass at all. The constructor has been replaced with the
builder, see DeterministicKeyChain.builder().

The KeyChainGroupStructure is kind of the successor to a single account
path for if you need multiple active keychains (one for each script
type). See KeyChainGroupStructure.DEFAULT for how it is implemented. I
can imagine a KeyChainGroupStructure for BIP44 (P2PK) and BIP84 (P2WPKH)
would make sense, but I left this to those really wanting to go this route.

> There is a new field in the Wallet protobuf format for the Key
> message: account_path. That field was not present in 0.14.
> 
> So, when opening a 0.14 wallet from 0.15 code, the Wallet is not
> properly built because of account path is not persisted on the wallet
> file.

Ah, that's maybe an overlook on my part. There is this code in
DeterministicKeyChain.fromProtobuf():

                if (accountPath.isEmpty())
                    accountPath = ACCOUNT_ZERO_PATH;

which is obviously tailored to BIP32-structured wallets. We should
probably try to find a lightweight way to change the default here.

> What is the proper migration mechanism? Use a custom
> WalletProtobufSerializer? A custom KeyChainFactory?

If all the protobuf de/serialization code would be in
WalletProtobufSerializer, then a custom WalletProtobufSerializer could
be an option. But it isn't the case, as there are fromProtobuf() /
toProtobuf() methods cluttered over several classes.

I currently cannot say anything about KeyChainFactory, as I don't
understand the purpose of the concept thoroughly.

-- 
You received this message because you are subscribed to the Google Groups 
"bitcoinj" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to bitcoinj+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to