X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fwalletdb.h;h=c65d7762ad80db8f738640885d4968a15bb16187;hb=48564f02c4769f26295bedfc04b796246ad0d0bc;hp=a3e779ab9d196d00c50eff2fa0a266a68d8bc114;hpb=84a4a7763f386934da90e2bd1e355b70023fa9ca;p=novacoin.git diff --git a/src/walletdb.h b/src/walletdb.h index a3e779a..c65d776 100644 --- a/src/walletdb.h +++ b/src/walletdb.h @@ -7,6 +7,7 @@ #include "db.h" #include "base58.h" +#include "keystore.h" class CKeyPool; class CAccount; @@ -23,6 +24,38 @@ enum DBErrors DB_NEED_REWRITE }; +class CKeyMetadata +{ +public: + static const int CURRENT_VERSION=1; + int nVersion; + int64_t nCreateTime; // 0 means unknown + + CKeyMetadata() + { + SetNull(); + } + CKeyMetadata(int64_t nCreateTime_) + { + nVersion = CKeyMetadata::CURRENT_VERSION; + nCreateTime = nCreateTime_; + } + + IMPLEMENT_SERIALIZE + ( + READWRITE(this->nVersion); + nVersion = this->nVersion; + READWRITE(nCreateTime); + ) + + void SetNull() + { + nVersion = CKeyMetadata::CURRENT_VERSION; + nCreateTime = 0; + } +}; + + /** Access to the wallet database (wallet.dat) */ class CWalletDB : public CDB { @@ -50,15 +83,24 @@ public: return Erase(std::make_pair(std::string("tx"), hash)); } - bool WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey) + bool WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey, const CKeyMetadata &keyMeta) { nWalletDBUpdated++; + + if(!Write(std::make_pair(std::string("keymeta"), vchPubKey), keyMeta)) + return false; + return Write(std::make_pair(std::string("key"), vchPubKey.Raw()), vchPrivKey, false); } - bool WriteCryptedKey(const CPubKey& vchPubKey, const std::vector& vchCryptedSecret, bool fEraseUnencryptedKey = true) + bool WriteCryptedKey(const CPubKey& vchPubKey, const std::vector& 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) @@ -81,6 +123,18 @@ public: 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 CWalletDB::EraseWatchOnly(const CScript &dest) + { + nWalletDBUpdated++; + return Erase(std::make_pair(std::string("watchs"), dest)); + } + bool WriteBestBlock(const CBlockLocator& locator) { nWalletDBUpdated++; @@ -92,7 +146,7 @@ public: return Read(std::string("bestblock"), locator); } - bool WriteOrderPosNext(int64 nOrderPosNext) + bool WriteOrderPosNext(int64_t nOrderPosNext) { nWalletDBUpdated++; return Write(std::string("orderposnext"), nOrderPosNext); @@ -104,18 +158,18 @@ public: return Write(std::string("defaultkey"), vchPubKey.Raw()); } - bool ReadPool(int64 nPool, CKeyPool& keypool) + bool ReadPool(int64_t nPool, CKeyPool& keypool) { return Read(std::make_pair(std::string("pool"), nPool), keypool); } - bool WritePool(int64 nPool, const CKeyPool& keypool) + bool WritePool(int64_t nPool, const CKeyPool& keypool) { nWalletDBUpdated++; return Write(std::make_pair(std::string("pool"), nPool), keypool); } - bool ErasePool(int64 nPool) + bool ErasePool(int64_t nPool) { nWalletDBUpdated++; return Erase(std::make_pair(std::string("pool"), nPool)); @@ -148,10 +202,10 @@ public: bool ReadAccount(const std::string& strAccount, CAccount& account); bool WriteAccount(const std::string& strAccount, const CAccount& account); private: - bool WriteAccountingEntry(const uint64 nAccEntryNum, const CAccountingEntry& acentry); + bool WriteAccountingEntry(const uint64_t nAccEntryNum, const CAccountingEntry& acentry); public: bool WriteAccountingEntry(const CAccountingEntry& acentry); - int64 GetAccountCreditDebit(const std::string& strAccount); + int64_t GetAccountCreditDebit(const std::string& strAccount); void ListAccountCreditDebit(const std::string& strAccount, std::list& acentries); DBErrors ReorderTransactions(CWallet*);