Browse Source

Merge pull request #381 from TheBlueMatt/nminversion

Add minversion to wallet.
pull/1/head
Jeff Garzik 11 years ago
parent
commit
0fa89d8e81
  1. 15
      src/db.cpp
  2. 9
      src/db.h
  3. 12
      src/init.cpp
  4. 5
      src/wallet.cpp

15
src/db.cpp

@ -670,7 +670,7 @@ void CWalletDB::ListAccountCreditDebit(const string& strAccount, list<CAccountin @@ -670,7 +670,7 @@ void CWalletDB::ListAccountCreditDebit(const string& strAccount, list<CAccountin
}
bool CWalletDB::LoadWallet(CWallet* pwallet)
int CWalletDB::LoadWallet(CWallet* pwallet)
{
pwallet->vchDefaultKey.clear();
int nFileVersion = 0;
@ -690,7 +690,7 @@ bool CWalletDB::LoadWallet(CWallet* pwallet) @@ -690,7 +690,7 @@ bool CWalletDB::LoadWallet(CWallet* pwallet)
// Get cursor
Dbc* pcursor = GetCursor();
if (!pcursor)
return false;
return DB_CORRUPT;
loop
{
@ -701,7 +701,7 @@ bool CWalletDB::LoadWallet(CWallet* pwallet) @@ -701,7 +701,7 @@ bool CWalletDB::LoadWallet(CWallet* pwallet)
if (ret == DB_NOTFOUND)
break;
else if (ret != 0)
return false;
return DB_CORRUPT;
// Unserialize
// Taking advantage of the fact that pair serialization
@ -836,6 +836,13 @@ bool CWalletDB::LoadWallet(CWallet* pwallet) @@ -836,6 +836,13 @@ bool CWalletDB::LoadWallet(CWallet* pwallet)
if (strKey == "addrProxy") ssValue >> addrProxy;
if (fHaveUPnP && strKey == "fUseUPnP") ssValue >> fUseUPnP;
}
else if (strType == "minversion")
{
int nMinVersion = 0;
ssValue >> nMinVersion;
if (nMinVersion > VERSION)
return DB_TOO_NEW;
}
}
pcursor->close();
}
@ -865,7 +872,7 @@ bool CWalletDB::LoadWallet(CWallet* pwallet) @@ -865,7 +872,7 @@ bool CWalletDB::LoadWallet(CWallet* pwallet)
}
return true;
return DB_LOAD_OK;
}
void ThreadFlushWalletDB(void* parg)

9
src/db.h

@ -342,6 +342,13 @@ public: @@ -342,6 +342,13 @@ public:
enum DBErrors
{
DB_LOAD_OK,
DB_CORRUPT,
DB_TOO_NEW
};
class CWalletDB : public CDB
{
public:
@ -469,7 +476,7 @@ public: @@ -469,7 +476,7 @@ public:
int64 GetAccountCreditDebit(const std::string& strAccount);
void ListAccountCreditDebit(const std::string& strAccount, std::list<CAccountingEntry>& acentries);
bool LoadWallet(CWallet* pwallet);
int LoadWallet(CWallet* pwallet);
};
#endif

12
src/init.cpp

@ -387,8 +387,16 @@ bool AppInit2(int argc, char* argv[]) @@ -387,8 +387,16 @@ bool AppInit2(int argc, char* argv[])
nStart = GetTimeMillis();
bool fFirstRun;
pwalletMain = new CWallet("wallet.dat");
if (!pwalletMain->LoadWallet(fFirstRun))
strErrors += _("Error loading wallet.dat \n");
int nLoadWalletRet = pwalletMain->LoadWallet(fFirstRun);
if (nLoadWalletRet != DB_LOAD_OK)
{
if (nLoadWalletRet == DB_CORRUPT)
strErrors += _("Error loading wallet.dat: Wallet corrupted \n");
else if (nLoadWalletRet == DB_TOO_NEW)
strErrors += _("Error loading wallet.dat: Wallet requires newer version of Bitcoin \n");
else
strErrors += _("Error loading wallet.dat \n");
}
printf(" wallet %15"PRI64d"ms\n", GetTimeMillis() - nStart);
RegisterWallet(pwalletMain);

5
src/wallet.cpp

@ -1130,8 +1130,9 @@ bool CWallet::LoadWallet(bool& fFirstRunRet) @@ -1130,8 +1130,9 @@ bool CWallet::LoadWallet(bool& fFirstRunRet)
if (!fFileBacked)
return false;
fFirstRunRet = false;
if (!CWalletDB(strWalletFile,"cr+").LoadWallet(this))
return false;
int nLoadWalletRet = CWalletDB(strWalletFile,"cr+").LoadWallet(this);
if (nLoadWalletRet != DB_LOAD_OK)
return nLoadWalletRet;
fFirstRunRet = vchDefaultKey.empty();
if (!HaveKey(vchDefaultKey))

Loading…
Cancel
Save