mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-21 07:39:08 +01:00
Create new keypool for newly encrypted wallets.
This commit is contained in:
@@ -186,12 +186,15 @@ bool CWallet::EncryptWallet(const string& strWalletPassphrase)
|
||||
pwalletdbEncryption = NULL;
|
||||
}
|
||||
|
||||
Lock();
|
||||
Unlock(strWalletPassphrase);
|
||||
NewKeyPool();
|
||||
Lock();
|
||||
|
||||
// Need to completely rewrite the wallet file; if we don't, bdb might keep
|
||||
// bits of the unencrypted private key in slack space in the database file.
|
||||
setKeyPool.clear();
|
||||
CDB::Rewrite(strWalletFile, "\x04pool");
|
||||
CDB::Rewrite(strWalletFile);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -1244,6 +1247,34 @@ bool GetWalletFile(CWallet* pwallet, string &strWalletFileOut)
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// Mark old keypool keys as used,
|
||||
// and generate all new keys
|
||||
//
|
||||
bool CWallet::NewKeyPool()
|
||||
{
|
||||
CRITICAL_BLOCK(cs_wallet)
|
||||
{
|
||||
CWalletDB walletdb(strWalletFile);
|
||||
BOOST_FOREACH(int64 nIndex, setKeyPool)
|
||||
walletdb.ErasePool(nIndex);
|
||||
setKeyPool.clear();
|
||||
|
||||
if (IsLocked())
|
||||
return false;
|
||||
|
||||
int64 nKeys = max(GetArg("-keypool", 100), (int64)0);
|
||||
for (int i = 0; i < nKeys; i++)
|
||||
{
|
||||
int64 nIndex = i+1;
|
||||
walletdb.WritePool(nIndex, CKeyPool(GenerateNewKey()));
|
||||
setKeyPool.insert(nIndex);
|
||||
}
|
||||
printf("CWallet::NewKeyPool wrote %"PRI64d" new keys\n", nKeys);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CWallet::TopUpKeyPool()
|
||||
{
|
||||
CRITICAL_BLOCK(cs_wallet)
|
||||
|
||||
Reference in New Issue
Block a user