|
|
|
@ -15,6 +15,23 @@ using namespace std;
@@ -15,6 +15,23 @@ using namespace std;
|
|
|
|
|
// mapWallet
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
std::vector<unsigned char> CWallet::GenerateNewKey() |
|
|
|
|
{ |
|
|
|
|
bool fCompressed = true; // default to compressed public keys
|
|
|
|
|
|
|
|
|
|
RandAddSeedPerfmon(); |
|
|
|
|
CKey key; |
|
|
|
|
key.MakeNewKey(fCompressed); |
|
|
|
|
|
|
|
|
|
// Compressed public keys were introduced in version 0.6.0
|
|
|
|
|
if (fCompressed) |
|
|
|
|
SetMinVersion(59900); |
|
|
|
|
|
|
|
|
|
if (!AddKey(key)) |
|
|
|
|
throw std::runtime_error("CWallet::GenerateNewKey() : AddKey failed"); |
|
|
|
|
return key.GetPubKey(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool CWallet::AddKey(const CKey& key) |
|
|
|
|
{ |
|
|
|
|
if (!CCryptoKeyStore::AddKey(key)) |
|
|
|
@ -131,6 +148,32 @@ public:
@@ -131,6 +148,32 @@ public:
|
|
|
|
|
) |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
bool CWallet::SetMinVersion(int nVersion, CWalletDB* pwalletdbIn) |
|
|
|
|
{ |
|
|
|
|
if (nWalletVersion >= nVersion) |
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
nWalletVersion = nVersion; |
|
|
|
|
|
|
|
|
|
if (fFileBacked) |
|
|
|
|
{ |
|
|
|
|
CWalletDB* pwalletdb = pwalletdbIn ? pwalletdbIn : new CWalletDB(strWalletFile); |
|
|
|
|
if (nWalletVersion >= 40000) |
|
|
|
|
{ |
|
|
|
|
// Versions prior to 0.4.0 did not support the "minversion" record.
|
|
|
|
|
// Use a CCorruptAddress to make them crash instead.
|
|
|
|
|
CCorruptAddress corruptAddress; |
|
|
|
|
pwalletdb->WriteSetting("addrIncoming", corruptAddress); |
|
|
|
|
} |
|
|
|
|
if (nWalletVersion > 40000) |
|
|
|
|
pwalletdb->WriteMinVersion(nWalletVersion); |
|
|
|
|
if (!pwalletdbIn) |
|
|
|
|
delete pwalletdb; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase) |
|
|
|
|
{ |
|
|
|
|
if (IsCrypted()) |
|
|
|
@ -184,10 +227,11 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
@@ -184,10 +227,11 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
|
|
|
|
|
exit(1); //We now probably have half of our keys encrypted in memory, and half not...die and let the user reload their unencrypted wallet.
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Encryption was introduced in version 0.4.0
|
|
|
|
|
SetMinVersion(40000, pwalletdbEncryption); |
|
|
|
|
|
|
|
|
|
if (fFileBacked) |
|
|
|
|
{ |
|
|
|
|
CCorruptAddress corruptAddress; |
|
|
|
|
pwalletdbEncryption->WriteSetting("addrIncoming", corruptAddress); |
|
|
|
|
if (!pwalletdbEncryption->TxnCommit()) |
|
|
|
|
exit(1); //We now have keys encrypted in memory, but no on disk...die to avoid confusion and let the user reload their unencrypted wallet.
|
|
|
|
|
|
|
|
|
|