Merge pull request #864 from sipa/fix_856
Make compressed pubkeys require client >=0.5.99
This commit is contained in:
@@ -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:
|
||||
)
|
||||
};
|
||||
|
||||
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)
|
||||
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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user