fix wallet.dat compatibility problem if you downgrade from 0.3.17 and then upgrade again

git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@196 1a98c847-1fd6-4fd8-948a-caf3550aa51b
This commit is contained in:
s_nakamoto
2010-12-06 15:59:28 +00:00
parent f03304a9c7
commit 865c3a2383
3 changed files with 36 additions and 15 deletions

24
db.cpp
View File

@@ -656,6 +656,7 @@ bool CWalletDB::LoadWallet()
{
vchDefaultKey.clear();
int nFileVersion = 0;
vector<uint256> vWalletUpgrade;
// Modify defaults
#ifndef __WXMSW__
@@ -705,6 +706,25 @@ bool CWalletDB::LoadWallet()
if (wtx.GetHash() != hash)
printf("Error in wallet.dat, hash mismatch\n");
// Undo serialize changes in 31600
if (31404 <= wtx.fTimeReceivedIsTxTime && wtx.fTimeReceivedIsTxTime <= 31703)
{
if (!ssValue.empty())
{
char fTmp;
char fUnused;
ssValue >> fTmp >> fUnused >> wtx.strFromAccount;
printf("LoadWallet() upgrading tx ver=%d %d '%s' %s\n", wtx.fTimeReceivedIsTxTime, fTmp, wtx.strFromAccount.c_str(), hash.ToString().c_str());
wtx.fTimeReceivedIsTxTime = fTmp;
}
else
{
printf("LoadWallet() repairing tx ver=%d %s\n", wtx.fTimeReceivedIsTxTime, hash.ToString().c_str());
wtx.fTimeReceivedIsTxTime = 0;
}
vWalletUpgrade.push_back(hash);
}
//// debug print
//printf("LoadWallet %s\n", wtx.GetHash().ToString().c_str());
//printf(" %12I64d %s %s %s\n",
@@ -774,6 +794,9 @@ bool CWalletDB::LoadWallet()
pcursor->close();
}
foreach(uint256 hash, vWalletUpgrade)
WriteTx(hash, mapWallet[hash]);
printf("nFileVersion = %d\n", nFileVersion);
printf("fGenerateBitcoins = %d\n", fGenerateBitcoins);
printf("nTransactionFee = %"PRI64d"\n", nTransactionFee);
@@ -794,6 +817,7 @@ bool CWalletDB::LoadWallet()
WriteVersion(VERSION);
}
return true;
}