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:
parent
f03304a9c7
commit
865c3a2383
3 changed files with 36 additions and 15 deletions
24
db.cpp
24
db.cpp
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
25
main.h
25
main.h
|
@ -751,11 +751,10 @@ public:
|
|||
vector<CMerkleTx> vtxPrev;
|
||||
map<string, string> mapValue;
|
||||
vector<pair<string, string> > vOrderForm;
|
||||
unsigned int fTimeReceivedIsTxTime;
|
||||
unsigned int nTimeReceived; // time received by this node
|
||||
char fFromMe;
|
||||
char fSpent;
|
||||
char fTimeReceivedIsTxTime;
|
||||
char fUnused;
|
||||
string strFromAccount;
|
||||
|
||||
// memory only
|
||||
|
@ -792,11 +791,10 @@ public:
|
|||
vtxPrev.clear();
|
||||
mapValue.clear();
|
||||
vOrderForm.clear();
|
||||
fTimeReceivedIsTxTime = false;
|
||||
nTimeReceived = 0;
|
||||
fFromMe = false;
|
||||
fSpent = false;
|
||||
fTimeReceivedIsTxTime = false;
|
||||
fUnused = false;
|
||||
strFromAccount.clear();
|
||||
fDebitCached = false;
|
||||
fCreditCached = false;
|
||||
|
@ -811,24 +809,23 @@ public:
|
|||
|
||||
IMPLEMENT_SERIALIZE
|
||||
(
|
||||
CWalletTx* pthis = const_cast<CWalletTx*>(this);
|
||||
if (fRead)
|
||||
const_cast<CWalletTx*>(this)->Init();
|
||||
pthis->Init();
|
||||
nSerSize += SerReadWrite(s, *(CMerkleTx*)this, nType, nVersion, ser_action);
|
||||
READWRITE(vtxPrev);
|
||||
|
||||
pthis->mapValue["fromaccount"] = pthis->strFromAccount;
|
||||
READWRITE(mapValue);
|
||||
pthis->strFromAccount = pthis->mapValue["fromaccount"];
|
||||
pthis->mapValue.erase("fromaccount");
|
||||
pthis->mapValue.erase("version");
|
||||
|
||||
READWRITE(vOrderForm);
|
||||
READWRITE(nVersion);
|
||||
if (fRead && nVersion < 100)
|
||||
const_cast<CWalletTx*>(this)->fTimeReceivedIsTxTime = nVersion;
|
||||
READWRITE(fTimeReceivedIsTxTime);
|
||||
READWRITE(nTimeReceived);
|
||||
READWRITE(fFromMe);
|
||||
READWRITE(fSpent);
|
||||
if (nVersion >= 31404)
|
||||
{
|
||||
READWRITE(fTimeReceivedIsTxTime);
|
||||
READWRITE(fUnused);
|
||||
READWRITE(strFromAccount);
|
||||
}
|
||||
)
|
||||
|
||||
int64 GetDebit() const
|
||||
|
|
|
@ -25,7 +25,7 @@ class CDataStream;
|
|||
class CAutoFile;
|
||||
static const unsigned int MAX_SIZE = 0x02000000;
|
||||
|
||||
static const int VERSION = 31703;
|
||||
static const int VERSION = 31704;
|
||||
static const char* pszSubVer = "";
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue