X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Fwalletdb.cpp;h=3880a93b7844e2ce64bdd858fa2618bc62bdaac3;hp=c8e64ca6bff2c756dd3dd0fc636d05e58904aa8c;hb=27ce22da0815f4c1fa0e949cc4740e3f4dd1ea9c;hpb=ee3c631e7a917e702d04d8ff77579aeaf1d29a61 diff --git a/src/walletdb.cpp b/src/walletdb.cpp index c8e64ca..3880a93 100644 --- a/src/walletdb.cpp +++ b/src/walletdb.cpp @@ -85,7 +85,7 @@ void CWalletDB::ListAccountCreditDebit(const string& strAccount, list> strAddress; - ssValue >> pwallet->mapAddressBook[CBitcoinAddress(strAddress).Get()]; + ssValue >> pwallet->mapAddressBook[CBitcoinAddress(strAddress)]; } else if (strType == "tx") { @@ -311,9 +311,9 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, ssValue >> vchSecret; CMalleableKeyView keyView(strKeyView); - if (!pwallet->LoadMalleableKey(keyView, vchSecret)) + if (!pwallet->LoadKey(keyView, vchSecret)) { - strErr = "Error reading wallet database: LoadMalleableKey failed"; + strErr = "Error reading wallet database: LoadKey failed"; return false; } } @@ -326,23 +326,22 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, ssValue >> vchCryptedSecret; CMalleableKeyView keyView(strKeyView); - if (!pwallet->LoadCryptedMalleableKey(keyView, vchCryptedSecret)) + if (!pwallet->LoadCryptedKey(keyView, vchCryptedSecret)) { - strErr = "Error reading wallet database: LoadCryptedMalleableKey failed"; + strErr = "Error reading wallet database: LoadCryptedKey failed"; return false; } } else if (strType == "key" || strType == "wkey") { - vector vchPubKey; - ssKey >> vchPubKey; CKey key; + CPubKey vchPubKey; + ssKey >> vchPubKey; if (strType == "key") { wss.nKeys++; CPrivKey pkey; ssValue >> pkey; - key.SetPubKey(vchPubKey); if (!key.SetPrivKey(pkey)) { strErr = "Error reading wallet database: CPrivKey corrupt"; @@ -353,6 +352,9 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, strErr = "Error reading wallet database: CPrivKey pubkey inconsistency"; return false; } + if (vchPubKey.size() == 33) { + key.SetCompressedPubKey(); + } if (!key.IsValid()) { strErr = "Error reading wallet database: invalid CPrivKey"; @@ -363,7 +365,6 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, { CWalletKey wkey; ssValue >> wkey; - key.SetPubKey(vchPubKey); if (!key.SetPrivKey(wkey.vchPrivKey)) { strErr = "Error reading wallet database: CPrivKey corrupt"; @@ -374,6 +375,9 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, strErr = "Error reading wallet database: CWalletKey pubkey inconsistency"; return false; } + if (vchPubKey.size() == 33) { + key.SetCompressedPubKey(); + } if (!key.IsValid()) { strErr = "Error reading wallet database: invalid CWalletKey"; @@ -405,7 +409,7 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, else if (strType == "ckey") { wss.nCKeys++; - vector vchPubKey; + CPubKey vchPubKey; ssKey >> vchPubKey; vector vchPrivKey; ssValue >> vchPrivKey; @@ -428,7 +432,7 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, ssValue >> keyMeta; wss.nKeyMeta++; - pwallet->LoadMalleableKeyMetadata(keyView, keyMeta); + pwallet->LoadKeyMetadata(keyView, keyMeta); } else if (strType == "keymeta") { @@ -460,9 +464,9 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, // If no metadata exists yet, create a default with the pool key's // creation time. Note that this may be overwritten by actually // stored metadata for that key later, which is fine. - CKeyID keyid = keypool.vchPubKey.GetID(); - if (pwallet->mapKeyMetadata.count(keyid) == 0) - pwallet->mapKeyMetadata[keyid] = CKeyMetadata(keypool.nTime); + CBitcoinAddress addr = CBitcoinAddress(keypool.vchPubKey.GetID()); + if (pwallet->mapKeyMetadata.count(addr) == 0) + pwallet->mapKeyMetadata[addr] = CKeyMetadata(keypool.nTime); } else if (strType == "version") @@ -525,7 +529,7 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet) return DB_CORRUPT; } - while (true) + for ( ; ; ) { // Read next record CDataStream ssKey(SER_DISK, CLIENT_VERSION); @@ -625,7 +629,7 @@ DBErrors CWalletDB::FindWalletTx(CWallet* pwallet, vector& vTxHash) return DB_CORRUPT; } - while (true) + for ( ; ; ) { // Read next record CDataStream ssKey(SER_DISK, CLIENT_VERSION); @@ -650,7 +654,7 @@ DBErrors CWalletDB::FindWalletTx(CWallet* pwallet, vector& vTxHash) } pcursor->close(); } - catch (boost::thread_interrupted) { + catch (const boost::thread_interrupted&) { throw; } catch (...) { @@ -827,7 +831,11 @@ bool DumpWallet(CWallet* pwallet, const string& strDest) continue; CMalleableKey mKey; pwallet->GetMalleableKey(keyView, mKey); - file << strprintf("%s %s # view=%s addr=%s\n", mKey.ToString().c_str(), strTime.c_str(), keyView.ToString().c_str(), strAddr.c_str()); + file << mKey.ToString(); + if (pwallet->mapAddressBook.count(addr)) + file << strprintf(" %s label=%s # view=%s addr=%s\n", strTime.c_str(), EncodeDumpString(pwallet->mapAddressBook[addr]).c_str(), keyView.ToString().c_str(), strAddr.c_str()); + else + file << strprintf(" %s # view=%s addr=%s\n", strTime.c_str(), keyView.ToString().c_str(), strAddr.c_str()); } else { // Pubkey hash address @@ -839,8 +847,8 @@ bool DumpWallet(CWallet* pwallet, const string& strDest) continue; CSecret secret = key.GetSecret(IsCompressed); file << CBitcoinSecret(secret, IsCompressed).ToString(); - if (pwallet->mapAddressBook.count(keyid)) - file << strprintf(" %s label=%s # addr=%s\n", strTime.c_str(), EncodeDumpString(pwallet->mapAddressBook[keyid]).c_str(), strAddr.c_str()); + if (pwallet->mapAddressBook.count(addr)) + file << strprintf(" %s label=%s # addr=%s\n", strTime.c_str(), EncodeDumpString(pwallet->mapAddressBook[addr]).c_str(), strAddr.c_str()); else if (setKeyPool.count(keyid)) file << strprintf(" %s reserve=1 # addr=%s\n", strTime.c_str(), strAddr.c_str()); else @@ -899,6 +907,7 @@ bool ImportWallet(CWallet *pwallet, const string& strLocation) } } + CBitcoinAddress addr; CBitcoinSecret vchSecret; if (vchSecret.SetString(vstr[0])) { // Simple private key @@ -908,20 +917,18 @@ bool ImportWallet(CWallet *pwallet, const string& strLocation) CSecret secret = vchSecret.GetSecret(fCompressed); key.SetSecret(secret, fCompressed); CKeyID keyid = key.GetPubKey().GetID(); + addr = CBitcoinAddress(keyid); if (pwallet->HaveKey(keyid)) { - printf("Skipping import of %s (key already present)\n", CBitcoinAddress(keyid).ToString().c_str()); + printf("Skipping import of %s (key already present)\n", addr.ToString().c_str()); continue; } - printf("Importing %s...\n", CBitcoinAddress(keyid).ToString().c_str()); + printf("Importing %s...\n", addr.ToString().c_str()); if (!pwallet->AddKey(key)) { fGood = false; continue; } - pwallet->mapKeyMetadata[keyid].nCreateTime = nTime; - if (fLabel) - pwallet->SetAddressBookName(keyid, strLabel); } else { // A pair of private keys @@ -929,18 +936,24 @@ bool ImportWallet(CWallet *pwallet, const string& strLocation) if (!mKey.SetString(vstr[0])) continue; CMalleablePubKey mPubKey = mKey.GetMalleablePubKey(); + addr = CBitcoinAddress(mPubKey); + if (pwallet->CheckOwnership(mPubKey)) { - printf("Skipping import of %s (key already present)\n", CBitcoinAddress(mPubKey).ToString().c_str()); + printf("Skipping import of %s (key already present)\n", addr.ToString().c_str()); continue; } - printf("Importing %s...\n", CBitcoinAddress(mPubKey).ToString().c_str()); - if (!pwallet->AddMalleableKey(mKey)) { + printf("Importing %s...\n", addr.ToString().c_str()); + if (!pwallet->AddKey(mKey)) { fGood = false; continue; } - pwallet->mapMalleableKeyMetadata[CMalleableKeyView(mKey)].nCreateTime = nTime; } + + pwallet->mapKeyMetadata[addr].nCreateTime = nTime; + if (fLabel) + pwallet->SetAddressBookName(addr, strLabel); + nTimeBegin = std::min(nTimeBegin, nTime); } file.close();