mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 13:03:17 +01:00
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
24
db.cpp
24
db.cpp
@ -656,6 +656,7 @@ bool CWalletDB::LoadWallet()
|
|||||||
{
|
{
|
||||||
vchDefaultKey.clear();
|
vchDefaultKey.clear();
|
||||||
int nFileVersion = 0;
|
int nFileVersion = 0;
|
||||||
|
vector<uint256> vWalletUpgrade;
|
||||||
|
|
||||||
// Modify defaults
|
// Modify defaults
|
||||||
#ifndef __WXMSW__
|
#ifndef __WXMSW__
|
||||||
@ -705,6 +706,25 @@ bool CWalletDB::LoadWallet()
|
|||||||
if (wtx.GetHash() != hash)
|
if (wtx.GetHash() != hash)
|
||||||
printf("Error in wallet.dat, hash mismatch\n");
|
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
|
//// debug print
|
||||||
//printf("LoadWallet %s\n", wtx.GetHash().ToString().c_str());
|
//printf("LoadWallet %s\n", wtx.GetHash().ToString().c_str());
|
||||||
//printf(" %12I64d %s %s %s\n",
|
//printf(" %12I64d %s %s %s\n",
|
||||||
@ -774,6 +794,9 @@ bool CWalletDB::LoadWallet()
|
|||||||
pcursor->close();
|
pcursor->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach(uint256 hash, vWalletUpgrade)
|
||||||
|
WriteTx(hash, mapWallet[hash]);
|
||||||
|
|
||||||
printf("nFileVersion = %d\n", nFileVersion);
|
printf("nFileVersion = %d\n", nFileVersion);
|
||||||
printf("fGenerateBitcoins = %d\n", fGenerateBitcoins);
|
printf("fGenerateBitcoins = %d\n", fGenerateBitcoins);
|
||||||
printf("nTransactionFee = %"PRI64d"\n", nTransactionFee);
|
printf("nTransactionFee = %"PRI64d"\n", nTransactionFee);
|
||||||
@ -794,6 +817,7 @@ bool CWalletDB::LoadWallet()
|
|||||||
WriteVersion(VERSION);
|
WriteVersion(VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
25
main.h
25
main.h
@ -751,11 +751,10 @@ public:
|
|||||||
vector<CMerkleTx> vtxPrev;
|
vector<CMerkleTx> vtxPrev;
|
||||||
map<string, string> mapValue;
|
map<string, string> mapValue;
|
||||||
vector<pair<string, string> > vOrderForm;
|
vector<pair<string, string> > vOrderForm;
|
||||||
|
unsigned int fTimeReceivedIsTxTime;
|
||||||
unsigned int nTimeReceived; // time received by this node
|
unsigned int nTimeReceived; // time received by this node
|
||||||
char fFromMe;
|
char fFromMe;
|
||||||
char fSpent;
|
char fSpent;
|
||||||
char fTimeReceivedIsTxTime;
|
|
||||||
char fUnused;
|
|
||||||
string strFromAccount;
|
string strFromAccount;
|
||||||
|
|
||||||
// memory only
|
// memory only
|
||||||
@ -792,11 +791,10 @@ public:
|
|||||||
vtxPrev.clear();
|
vtxPrev.clear();
|
||||||
mapValue.clear();
|
mapValue.clear();
|
||||||
vOrderForm.clear();
|
vOrderForm.clear();
|
||||||
|
fTimeReceivedIsTxTime = false;
|
||||||
nTimeReceived = 0;
|
nTimeReceived = 0;
|
||||||
fFromMe = false;
|
fFromMe = false;
|
||||||
fSpent = false;
|
fSpent = false;
|
||||||
fTimeReceivedIsTxTime = false;
|
|
||||||
fUnused = false;
|
|
||||||
strFromAccount.clear();
|
strFromAccount.clear();
|
||||||
fDebitCached = false;
|
fDebitCached = false;
|
||||||
fCreditCached = false;
|
fCreditCached = false;
|
||||||
@ -811,24 +809,23 @@ public:
|
|||||||
|
|
||||||
IMPLEMENT_SERIALIZE
|
IMPLEMENT_SERIALIZE
|
||||||
(
|
(
|
||||||
|
CWalletTx* pthis = const_cast<CWalletTx*>(this);
|
||||||
if (fRead)
|
if (fRead)
|
||||||
const_cast<CWalletTx*>(this)->Init();
|
pthis->Init();
|
||||||
nSerSize += SerReadWrite(s, *(CMerkleTx*)this, nType, nVersion, ser_action);
|
nSerSize += SerReadWrite(s, *(CMerkleTx*)this, nType, nVersion, ser_action);
|
||||||
READWRITE(vtxPrev);
|
READWRITE(vtxPrev);
|
||||||
|
|
||||||
|
pthis->mapValue["fromaccount"] = pthis->strFromAccount;
|
||||||
READWRITE(mapValue);
|
READWRITE(mapValue);
|
||||||
|
pthis->strFromAccount = pthis->mapValue["fromaccount"];
|
||||||
|
pthis->mapValue.erase("fromaccount");
|
||||||
|
pthis->mapValue.erase("version");
|
||||||
|
|
||||||
READWRITE(vOrderForm);
|
READWRITE(vOrderForm);
|
||||||
READWRITE(nVersion);
|
READWRITE(fTimeReceivedIsTxTime);
|
||||||
if (fRead && nVersion < 100)
|
|
||||||
const_cast<CWalletTx*>(this)->fTimeReceivedIsTxTime = nVersion;
|
|
||||||
READWRITE(nTimeReceived);
|
READWRITE(nTimeReceived);
|
||||||
READWRITE(fFromMe);
|
READWRITE(fFromMe);
|
||||||
READWRITE(fSpent);
|
READWRITE(fSpent);
|
||||||
if (nVersion >= 31404)
|
|
||||||
{
|
|
||||||
READWRITE(fTimeReceivedIsTxTime);
|
|
||||||
READWRITE(fUnused);
|
|
||||||
READWRITE(strFromAccount);
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
int64 GetDebit() const
|
int64 GetDebit() const
|
||||||
|
@ -25,7 +25,7 @@ class CDataStream;
|
|||||||
class CAutoFile;
|
class CAutoFile;
|
||||||
static const unsigned int MAX_SIZE = 0x02000000;
|
static const unsigned int MAX_SIZE = 0x02000000;
|
||||||
|
|
||||||
static const int VERSION = 31703;
|
static const int VERSION = 31704;
|
||||||
static const char* pszSubVer = "";
|
static const char* pszSubVer = "";
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user