bitcoinj/bitcoinj — pull request #105 by mikehearn (2014-06-12 16:59:02+00:00)
Title: HD Wallets: implement auto upgrade behaviour and refresh the design doc.

This patch implements deterministic auto upgrade to HD wallets from old random wallets. The same wallet will upgrade to the same HD seed, based on the key rotation time (if any). Thus the user does not need to create a new backup after the upgrade.

If a wallet is encrypted, the wallet app is responsible for requesting the users password and then explicitly invoking an upgrade method. Failure to do so will cause any attempts to get new keys the HD way to throw an exception: this includes crafting spends, which tries to get a new change key as part of it. Unencrypted wallets will upgrade themselves automatically on the fly.