Wallet decryption support
[novacoin.git] / src / walletdb.h
index 748bee5..1739693 100644 (file)
@@ -7,6 +7,7 @@
 
 #include "db.h"
 #include "base58.h"
+#include "keystore.h"
 
 class CKeyPool;
 class CAccount;
@@ -28,13 +29,13 @@ class CKeyMetadata
 public:
     static const int CURRENT_VERSION=1;
     int nVersion;
-    int64 nCreateTime; // 0 means unknown
+    int64_t nCreateTime; // 0 means unknown
 
     CKeyMetadata()
     {
         SetNull();
     }
-    CKeyMetadata(int64 nCreateTime_)
+    CKeyMetadata(int64_t nCreateTime_)
     {
         nVersion = CKeyMetadata::CURRENT_VERSION;
         nCreateTime = nCreateTime_;
@@ -82,24 +83,24 @@ public:
         return Erase(std::make_pair(std::string("tx"), hash));
     }
 
-    bool WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey, int64 nCreateTime)
+    bool WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey, const CKeyMetadata &keyMeta)
     {
         nWalletDBUpdated++;
+        if(!Write(std::make_pair(std::string("keymeta"), vchPubKey), keyMeta))
+            return false;
 
-        CKeyMetadata keyMeta(nCreateTime);
-        if(!Write(std::make_pair(std::string("keymeta"), vchPubKey), keyMeta, false))
+        if(!Write(std::make_pair(std::string("key"), vchPubKey.Raw()), vchPrivKey, false))
             return false;
 
-        return Write(std::make_pair(std::string("key"), vchPubKey.Raw()), vchPrivKey, false);
+        return true;
     }
 
-    bool WriteCryptedKey(const CPubKey& vchPubKey, const std::vector<unsigned char>& vchCryptedSecret, int64 nCreateTime)
+    bool WriteCryptedKey(const CPubKey& vchPubKey, const std::vector<unsigned char>& vchCryptedSecret, const CKeyMetadata &keyMeta)
     {
         nWalletDBUpdated++;
         bool fEraseUnencryptedKey = true;
 
-        CKeyMetadata keyMeta(nCreateTime);
-        if(!Write(std::make_pair(std::string("keymeta"), vchPubKey), keyMeta, false))
+        if(!Write(std::make_pair(std::string("keymeta"), vchPubKey), keyMeta))
             return false;
 
         if (!Write(std::make_pair(std::string("ckey"), vchPubKey.Raw()), vchCryptedSecret, false))
@@ -118,12 +119,35 @@ public:
         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++;
@@ -135,7 +159,7 @@ public:
         return Read(std::string("bestblock"), locator);
     }
 
-    bool WriteOrderPosNext(int64 nOrderPosNext)
+    bool WriteOrderPosNext(int64_t nOrderPosNext)
     {
         nWalletDBUpdated++;
         return Write(std::string("orderposnext"), nOrderPosNext);
@@ -147,18 +171,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));
@@ -191,10 +215,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<CAccountingEntry>& acentries);
 
     DBErrors ReorderTransactions(CWallet*);