diff options
author | s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b> | 2010-12-06 15:59:28 +0000 |
---|---|---|
committer | s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b> | 2010-12-06 15:59:28 +0000 |
commit | 865c3a23832e36d50cb873d38c976032b027b5d3 (patch) | |
tree | 66450fd4f6ccfe8eda984494aa36201c453bb4ec /db.cpp | |
parent | f03304a9c79a6cc6096ed501ad38702fd012e7f7 (diff) |
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
Diffstat (limited to 'db.cpp')
-rw-r--r-- | db.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -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; } |