extern bool fWalletUnlockMintOnly;
//
+//CKeyMetadata
+//
+
+CKeyMetadata::CKeyMetadata()
+{
+ SetNull();
+}
+
+CKeyMetadata::CKeyMetadata(int64_t nCreateTime_)
+{
+ nVersion = CKeyMetadata::CURRENT_VERSION;
+ nCreateTime = nCreateTime_;
+}
+
+void CKeyMetadata::SetNull()
+{
+ nVersion = CKeyMetadata::CURRENT_VERSION;
+ nCreateTime = 0;
+}
+
+//
// CWalletDB
//
+CWalletDB::CWalletDB(string strFilename, const char* pszMode) : CDB(strFilename.c_str(), pszMode) {}
+
bool CWalletDB::WriteName(const string& strAddress, const string& strName)
{
nWalletDBUpdated++;
return Erase(make_pair(string("name"), strAddress));
}
+bool CWalletDB::WriteTx(uint256 hash, const CWalletTx& wtx)
+{
+ nWalletDBUpdated++;
+ return Write(make_pair(string("tx"), hash), wtx);
+}
+
+bool CWalletDB::EraseTx(uint256 hash)
+{
+ nWalletDBUpdated++;
+ return Erase(make_pair(string("tx"), hash));
+}
+
+bool CWalletDB::WriteKey(const CPubKey& key, const CPrivKey& vchPrivKey, const CKeyMetadata &keyMeta)
+{
+ nWalletDBUpdated++;
+ if(!Write(make_pair(string("keymeta"), key), keyMeta))
+ return false;
+
+ if(!Write(make_pair(string("key"), key), vchPrivKey, false))
+ return false;
+
+ return true;
+}
+
+bool CWalletDB::WriteMalleableKey(const CMalleableKeyView& keyView, const CSecret& vchSecretH, const CKeyMetadata &keyMeta)
+{
+ nWalletDBUpdated++;
+ if(!Write(make_pair(string("malmeta"), keyView.ToString()), keyMeta))
+ return false;
+
+ if(!Write(make_pair(string("malpair"), keyView.ToString()), vchSecretH, false))
+ return false;
+
+ return true;
+}
+
+bool CWalletDB::WriteCryptedMalleableKey(const CMalleableKeyView& keyView, const vector<unsigned char>& vchCryptedSecretH, const CKeyMetadata &keyMeta)
+{
+ nWalletDBUpdated++;
+ if(!Write(make_pair(string("malmeta"), keyView.ToString()), keyMeta))
+ return false;
+
+ if(!Write(make_pair(string("malcpair"), keyView.ToString()), vchCryptedSecretH, false))
+ return false;
+
+ Erase(make_pair(string("malpair"), keyView.ToString()));
+
+ return true;
+}
+
+bool CWalletDB::WriteCryptedKey(const CPubKey& key, const vector<unsigned char>& vchCryptedSecret, const CKeyMetadata &keyMeta)
+{
+ nWalletDBUpdated++;
+ bool fEraseUnencryptedKey = true;
+
+ if(!Write(make_pair(string("keymeta"), key), keyMeta))
+ return false;
+
+ if (!Write(make_pair(string("ckey"), key), vchCryptedSecret, false))
+ return false;
+ if (fEraseUnencryptedKey)
+ {
+ Erase(make_pair(string("key"), key));
+ Erase(make_pair(string("wkey"), key));
+ }
+ return true;
+}
+
+bool CWalletDB::WriteMasterKey(unsigned int nID, const CMasterKey& kMasterKey)
+{
+ nWalletDBUpdated++;
+ return Write(make_pair(string("mkey"), nID), kMasterKey, true);
+}
+
+bool CWalletDB::EraseMasterKey(unsigned int nID)
+{
+ nWalletDBUpdated++;
+ return Erase(make_pair(string("mkey"), nID));
+}
+
+bool CWalletDB::EraseCryptedKey(const CPubKey& key)
+{
+ return Erase(make_pair(string("ckey"), key));
+}
+
+bool CWalletDB::EraseCryptedMalleableKey(const CMalleableKeyView& keyView)
+{
+ return Erase(make_pair(string("malcpair"), keyView.ToString()));
+}
+
+bool CWalletDB::WriteCScript(const uint160& hash, const CScript& redeemScript)
+{
+ nWalletDBUpdated++;
+ return Write(make_pair(string("cscript"), hash), redeemScript, false);
+}
+
+bool CWalletDB::WriteWatchOnly(const CScript &dest)
+{
+ nWalletDBUpdated++;
+ return Write(make_pair(string("watchs"), dest), '1');
+}
+
+bool CWalletDB::EraseWatchOnly(const CScript &dest)
+{
+ nWalletDBUpdated++;
+ return Erase(make_pair(string("watchs"), dest));
+}
+
+bool CWalletDB::WriteBestBlock(const CBlockLocator& locator)
+{
+ nWalletDBUpdated++;
+ return Write(string("bestblock"), locator);
+}
+
+bool CWalletDB::ReadBestBlock(CBlockLocator& locator)
+{
+ return Read(string("bestblock"), locator);
+}
+
+bool CWalletDB::WriteOrderPosNext(int64_t nOrderPosNext)
+{
+ nWalletDBUpdated++;
+ return Write(string("orderposnext"), nOrderPosNext);
+}
+
+bool CWalletDB::WriteDefaultKey(const CPubKey& key)
+{
+ nWalletDBUpdated++;
+ return Write(string("defaultkey"), key);
+}
+
+bool CWalletDB::ReadPool(int64_t nPool, CKeyPool& keypool)
+{
+ return Read(make_pair(string("pool"), nPool), keypool);
+}
+
+bool CWalletDB::WritePool(int64_t nPool, const CKeyPool& keypool)
+{
+ nWalletDBUpdated++;
+ return Write(make_pair(string("pool"), nPool), keypool);
+}
+
+bool CWalletDB::ErasePool(int64_t nPool)
+{
+ nWalletDBUpdated++;
+ return Erase(make_pair(string("pool"), nPool));
+}
+
+bool CWalletDB::WriteMinVersion(int nVersion)
+{
+ return Write(string("minversion"), nVersion);
+}
+
bool CWalletDB::ReadAccount(const string& strAccount, CAccount& account)
{
account.SetNull();
class CAccount;
class CAccountingEntry;
-/** Error statuses for the wallet database */
+// Error statuses for the wallet database
enum DBErrors
{
DB_LOAD_OK,
int nVersion;
int64_t nCreateTime; // 0 means unknown
- CKeyMetadata()
- {
- SetNull();
- }
- CKeyMetadata(int64_t nCreateTime_)
- {
- nVersion = CKeyMetadata::CURRENT_VERSION;
- nCreateTime = nCreateTime_;
- }
+ CKeyMetadata();
+ CKeyMetadata(int64_t nCreateTime_);
IMPLEMENT_SERIALIZE
(
READWRITE(nCreateTime);
)
- void SetNull()
- {
- nVersion = CKeyMetadata::CURRENT_VERSION;
- nCreateTime = 0;
- }
+ void SetNull();
};
-
-/** Access to the wallet database (wallet.dat) */
+// Access to the wallet database (wallet.dat)
class CWalletDB : public CDB
{
public:
- CWalletDB(string strFilename, const char* pszMode="r+") : CDB(strFilename.c_str(), pszMode)
- {
- }
+ CWalletDB(string strFilename, const char* pszMode="r+");
private:
CWalletDB(const CWalletDB&);
void operator=(const CWalletDB&);
public:
bool WriteName(const string& strAddress, const string& strName);
-
bool EraseName(const string& strAddress);
-
- bool WriteTx(uint256 hash, const CWalletTx& wtx)
- {
- nWalletDBUpdated++;
- return Write(make_pair(string("tx"), hash), wtx);
- }
-
- bool EraseTx(uint256 hash)
- {
- nWalletDBUpdated++;
- return Erase(make_pair(string("tx"), hash));
- }
-
- bool WriteKey(const CPubKey& key, const CPrivKey& vchPrivKey, const CKeyMetadata &keyMeta)
- {
- nWalletDBUpdated++;
- if(!Write(make_pair(string("keymeta"), key), keyMeta))
- return false;
-
- if(!Write(make_pair(string("key"), key), vchPrivKey, false))
- return false;
-
- return true;
- }
-
- bool WriteMalleableKey(const CMalleableKeyView& keyView, const CSecret& vchSecretH, const CKeyMetadata &keyMeta)
- {
- nWalletDBUpdated++;
- if(!Write(make_pair(string("malmeta"), keyView.ToString()), keyMeta))
- return false;
-
- if(!Write(make_pair(string("malpair"), keyView.ToString()), vchSecretH, false))
- return false;
-
- return true;
- }
-
- bool WriteCryptedMalleableKey(const CMalleableKeyView& keyView, const vector<unsigned char>& vchCryptedSecretH, const CKeyMetadata &keyMeta)
- {
- nWalletDBUpdated++;
- if(!Write(make_pair(string("malmeta"), keyView.ToString()), keyMeta))
- return false;
-
- if(!Write(make_pair(string("malcpair"), keyView.ToString()), vchCryptedSecretH, false))
- return false;
-
- Erase(make_pair(string("malpair"), keyView.ToString()));
-
- return true;
- }
-
-
- bool WriteCryptedKey(const CPubKey& key, const vector<unsigned char>& vchCryptedSecret, const CKeyMetadata &keyMeta)
- {
- nWalletDBUpdated++;
- bool fEraseUnencryptedKey = true;
-
- if(!Write(make_pair(string("keymeta"), key), keyMeta))
- return false;
-
- if (!Write(make_pair(string("ckey"), key), vchCryptedSecret, false))
- return false;
- if (fEraseUnencryptedKey)
- {
- Erase(make_pair(string("key"), key));
- Erase(make_pair(string("wkey"), key));
- }
- return true;
- }
-
- bool WriteMasterKey(unsigned int nID, const CMasterKey& kMasterKey)
- {
- nWalletDBUpdated++;
- return Write(make_pair(string("mkey"), nID), kMasterKey, true);
- }
-
- bool EraseMasterKey(unsigned int nID)
- {
- nWalletDBUpdated++;
- return Erase(make_pair(string("mkey"), nID));
- }
-
- bool EraseCryptedKey(const CPubKey& key)
- {
- return Erase(make_pair(string("ckey"), key));
- }
-
- bool EraseCryptedMalleableKey(const CMalleableKeyView& keyView)
- {
- return Erase(make_pair(string("malcpair"), keyView.ToString()));
- }
-
- bool WriteCScript(const uint160& hash, const CScript& redeemScript)
- {
- nWalletDBUpdated++;
- return Write(make_pair(string("cscript"), hash), redeemScript, false);
- }
-
- bool WriteWatchOnly(const CScript &dest)
- {
- nWalletDBUpdated++;
- return Write(make_pair(string("watchs"), dest), '1');
- }
-
- bool EraseWatchOnly(const CScript &dest)
- {
- nWalletDBUpdated++;
- return Erase(make_pair(string("watchs"), dest));
- }
-
- bool WriteBestBlock(const CBlockLocator& locator)
- {
- nWalletDBUpdated++;
- return Write(string("bestblock"), locator);
- }
-
- bool ReadBestBlock(CBlockLocator& locator)
- {
- return Read(string("bestblock"), locator);
- }
-
- bool WriteOrderPosNext(int64_t nOrderPosNext)
- {
- nWalletDBUpdated++;
- return Write(string("orderposnext"), nOrderPosNext);
- }
-
- bool WriteDefaultKey(const CPubKey& key)
- {
- nWalletDBUpdated++;
- return Write(string("defaultkey"), key);
- }
-
- bool ReadPool(int64_t nPool, CKeyPool& keypool)
- {
- return Read(make_pair(string("pool"), nPool), keypool);
- }
-
- bool WritePool(int64_t nPool, const CKeyPool& keypool)
- {
- nWalletDBUpdated++;
- return Write(make_pair(string("pool"), nPool), keypool);
- }
-
- bool ErasePool(int64_t nPool)
- {
- nWalletDBUpdated++;
- return Erase(make_pair(string("pool"), nPool));
- }
-
- bool WriteMinVersion(int nVersion)
- {
- return Write(string("minversion"), nVersion);
- }
-
+ bool WriteTx(uint256 hash, const CWalletTx& wtx);
+ bool EraseTx(uint256 hash);
+ bool WriteKey(const CPubKey& key, const CPrivKey& vchPrivKey, const CKeyMetadata &keyMeta);
+ bool WriteMalleableKey(const CMalleableKeyView& keyView, const CSecret& vchSecretH, const CKeyMetadata &keyMeta);
+ bool WriteCryptedMalleableKey(const CMalleableKeyView& keyView, const vector<unsigned char>& vchCryptedSecretH, const CKeyMetadata &keyMeta);
+ bool WriteCryptedKey(const CPubKey& key, const vector<unsigned char>& vchCryptedSecret, const CKeyMetadata &keyMeta);
+ bool WriteMasterKey(unsigned int nID, const CMasterKey& kMasterKey);
+ bool EraseMasterKey(unsigned int nID);
+ bool EraseCryptedKey(const CPubKey& key);
+ bool EraseCryptedMalleableKey(const CMalleableKeyView& keyView);
+ bool WriteCScript(const uint160& hash, const CScript& redeemScript);
+ bool WriteWatchOnly(const CScript &dest);
+ bool EraseWatchOnly(const CScript &dest);
+ bool WriteBestBlock(const CBlockLocator& locator);
+ bool ReadBestBlock(CBlockLocator& locator);
+ bool WriteOrderPosNext(int64_t nOrderPosNext);
+ bool WriteDefaultKey(const CPubKey& key);
+ bool ReadPool(int64_t nPool, CKeyPool& keypool);
+ bool WritePool(int64_t nPool, const CKeyPool& keypool);
+ bool ErasePool(int64_t nPool);
+ bool WriteMinVersion(int nVersion);
bool ReadAccount(const string& strAccount, CAccount& account);
bool WriteAccount(const string& strAccount, const CAccount& account);
private: