|
|
@ -639,7 +639,9 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase) |
|
|
|
if (IsHDEnabled()) { |
|
|
|
if (IsHDEnabled()) { |
|
|
|
CKey key; |
|
|
|
CKey key; |
|
|
|
CPubKey masterPubKey = GenerateNewHDMasterKey(); |
|
|
|
CPubKey masterPubKey = GenerateNewHDMasterKey(); |
|
|
|
if (!SetHDMasterKey(masterPubKey)) |
|
|
|
// preserve the old chains version to not break backward compatibility
|
|
|
|
|
|
|
|
CHDChain oldChain = GetHDChain(); |
|
|
|
|
|
|
|
if (!SetHDMasterKey(masterPubKey, &oldChain)) |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -1306,13 +1308,17 @@ CPubKey CWallet::GenerateNewHDMasterKey() |
|
|
|
return pubkey; |
|
|
|
return pubkey; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool CWallet::SetHDMasterKey(const CPubKey& pubkey) |
|
|
|
bool CWallet::SetHDMasterKey(const CPubKey& pubkey, CHDChain *possibleOldChain) |
|
|
|
{ |
|
|
|
{ |
|
|
|
LOCK(cs_wallet); |
|
|
|
LOCK(cs_wallet); |
|
|
|
// store the keyid (hash160) together with
|
|
|
|
// store the keyid (hash160) together with
|
|
|
|
// the child index counter in the database
|
|
|
|
// the child index counter in the database
|
|
|
|
// as a hdchain object
|
|
|
|
// as a hdchain object
|
|
|
|
CHDChain newHdChain; |
|
|
|
CHDChain newHdChain; |
|
|
|
|
|
|
|
if (possibleOldChain) { |
|
|
|
|
|
|
|
// preserve the old chains version
|
|
|
|
|
|
|
|
newHdChain.nVersion = possibleOldChain->nVersion; |
|
|
|
|
|
|
|
} |
|
|
|
newHdChain.masterKeyID = pubkey.GetID(); |
|
|
|
newHdChain.masterKeyID = pubkey.GetID(); |
|
|
|
SetHDChain(newHdChain, false); |
|
|
|
SetHDChain(newHdChain, false); |
|
|
|
|
|
|
|
|
|
|
|