#define BITCOIN_WALLETDB_H
#include "db.h"
-#include "base58.h"
-#include "keystore.h"
class CKeyPool;
class CAccount;
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();
};
void operator=(const CWalletDB&);
public:
bool WriteName(const std::string& strAddress, const std::string& strName);
-
bool EraseName(const std::string& strAddress);
-
- bool WriteTx(uint256 hash, const CWalletTx& wtx)
- {
- nWalletDBUpdated++;
- return Write(std::make_pair(std::string("tx"), hash), wtx);
- }
-
- bool EraseTx(uint256 hash)
- {
- nWalletDBUpdated++;
- return Erase(std::make_pair(std::string("tx"), hash));
- }
-
- bool WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey, const CKeyMetadata &keyMeta)
- {
- nWalletDBUpdated++;
- if(!Write(std::make_pair(std::string("keymeta"), vchPubKey), keyMeta))
- return false;
-
- if(!Write(std::make_pair(std::string("key"), vchPubKey.Raw()), vchPrivKey, false))
- return false;
-
- return true;
- }
-
- bool WriteCryptedKey(const CPubKey& vchPubKey, const std::vector<unsigned char>& vchCryptedSecret, const CKeyMetadata &keyMeta)
- {
- nWalletDBUpdated++;
- bool fEraseUnencryptedKey = true;
-
- if(!Write(std::make_pair(std::string("keymeta"), vchPubKey), keyMeta))
- return false;
-
- if (!Write(std::make_pair(std::string("ckey"), vchPubKey.Raw()), vchCryptedSecret, false))
- return false;
- if (fEraseUnencryptedKey)
- {
- Erase(std::make_pair(std::string("key"), vchPubKey.Raw()));
- Erase(std::make_pair(std::string("wkey"), vchPubKey.Raw()));
- }
- return true;
- }
-
- bool WriteMasterKey(unsigned int nID, const CMasterKey& kMasterKey)
- {
- nWalletDBUpdated++;
- return Write(std::make_pair(std::string("mkey"), nID), kMasterKey, true);
- }
-
- bool EraseMasterKey(unsigned int nID)
- {
- nWalletDBUpdated++;
- return Erase(std::make_pair(std::string("mkey"), nID));
- }
-
- bool EraseCryptedKey(const CPubKey& vchPubKey)
- {
- return Erase(std::make_pair(std::string("ckey"), vchPubKey.Raw()));
- }
-
- bool WriteCScript(const uint160& hash, const CScript& redeemScript)
- {
- nWalletDBUpdated++;
- return Write(std::make_pair(std::string("cscript"), hash), redeemScript, false);
- }
-
- bool WriteWatchOnly(const CScript &dest)
- {
- nWalletDBUpdated++;
- return Write(std::make_pair(std::string("watchs"), dest), '1');
- }
-
- bool EraseWatchOnly(const CScript &dest)
- {
- nWalletDBUpdated++;
- return Erase(std::make_pair(std::string("watchs"), dest));
- }
-
- bool WriteBestBlock(const CBlockLocator& locator)
- {
- nWalletDBUpdated++;
- return Write(std::string("bestblock"), locator);
- }
-
- bool ReadBestBlock(CBlockLocator& locator)
- {
- return Read(std::string("bestblock"), locator);
- }
-
- bool WriteOrderPosNext(int64_t nOrderPosNext)
- {
- nWalletDBUpdated++;
- return Write(std::string("orderposnext"), nOrderPosNext);
- }
-
- bool WriteDefaultKey(const CPubKey& vchPubKey)
- {
- nWalletDBUpdated++;
- return Write(std::string("defaultkey"), vchPubKey.Raw());
- }
-
- bool ReadPool(int64_t nPool, CKeyPool& keypool)
- {
- return Read(std::make_pair(std::string("pool"), nPool), keypool);
- }
-
- bool WritePool(int64_t nPool, const CKeyPool& keypool)
- {
- nWalletDBUpdated++;
- return Write(std::make_pair(std::string("pool"), nPool), keypool);
- }
-
- bool ErasePool(int64_t nPool)
- {
- nWalletDBUpdated++;
- return Erase(std::make_pair(std::string("pool"), nPool));
- }
-
- bool WriteMinVersion(int nVersion)
- {
- return Write(std::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 std::vector<unsigned char>& vchCryptedSecretH, const CKeyMetadata &keyMeta);
+ bool WriteCryptedKey(const CPubKey& key, const std::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 std::string& strAccount, CAccount& account);
bool WriteAccount(const std::string& strAccount, const CAccount& account);
private:
static bool Recover(CDBEnv& dbenv, std::string filename);
};
+bool BackupWallet(const CWallet& wallet, const std::string& strDest);
+
#endif // BITCOIN_WALLETDB_H