]> Git Repo - VerusCoin.git/blob - src/walletdb.h
Merge pull request #4762
[VerusCoin.git] / src / walletdb.h
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2013 The Bitcoin developers
3 // Distributed under the MIT/X11 software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6 #ifndef BITCOIN_WALLETDB_H
7 #define BITCOIN_WALLETDB_H
8
9 #include "db.h"
10 #include "key.h"
11 #include "keystore.h"
12
13 #include <list>
14 #include <stdint.h>
15 #include <string>
16 #include <utility>
17 #include <vector>
18
19 class CAccount;
20 class CAccountingEntry;
21 struct CBlockLocator;
22 class CKeyPool;
23 class CMasterKey;
24 class CScript;
25 class CWallet;
26 class CWalletTx;
27 class uint160;
28 class uint256;
29
30 /** Error statuses for the wallet database */
31 enum DBErrors
32 {
33     DB_LOAD_OK,
34     DB_CORRUPT,
35     DB_NONCRITICAL_ERROR,
36     DB_TOO_NEW,
37     DB_LOAD_FAIL,
38     DB_NEED_REWRITE
39 };
40
41 class CKeyMetadata
42 {
43 public:
44     static const int CURRENT_VERSION=1;
45     int nVersion;
46     int64_t nCreateTime; // 0 means unknown
47
48     CKeyMetadata()
49     {
50         SetNull();
51     }
52     CKeyMetadata(int64_t nCreateTime_)
53     {
54         nVersion = CKeyMetadata::CURRENT_VERSION;
55         nCreateTime = nCreateTime_;
56     }
57
58     ADD_SERIALIZE_METHODS;
59
60     template <typename Stream, typename Operation>
61     inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
62         READWRITE(this->nVersion);
63         nVersion = this->nVersion;
64         READWRITE(nCreateTime);
65     }
66
67     void SetNull()
68     {
69         nVersion = CKeyMetadata::CURRENT_VERSION;
70         nCreateTime = 0;
71     }
72 };
73
74 /** Access to the wallet database (wallet.dat) */
75 class CWalletDB : public CDB
76 {
77 public:
78     CWalletDB(std::string strFilename, const char* pszMode="r+") : CDB(strFilename.c_str(), pszMode)
79     {
80     }
81 private:
82     CWalletDB(const CWalletDB&);
83     void operator=(const CWalletDB&);
84 public:
85     bool WriteName(const std::string& strAddress, const std::string& strName);
86     bool EraseName(const std::string& strAddress);
87
88     bool WritePurpose(const std::string& strAddress, const std::string& purpose);
89     bool ErasePurpose(const std::string& strAddress);
90
91     bool WriteTx(uint256 hash, const CWalletTx& wtx);
92     bool EraseTx(uint256 hash);
93
94     bool WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey, const CKeyMetadata &keyMeta);
95     bool WriteCryptedKey(const CPubKey& vchPubKey, const std::vector<unsigned char>& vchCryptedSecret, const CKeyMetadata &keyMeta);
96     bool WriteMasterKey(unsigned int nID, const CMasterKey& kMasterKey);
97
98     bool WriteCScript(const uint160& hash, const CScript& redeemScript);
99
100     bool WriteWatchOnly(const CScript &script);
101
102     bool WriteBestBlock(const CBlockLocator& locator);
103     bool ReadBestBlock(CBlockLocator& locator);
104
105     bool WriteOrderPosNext(int64_t nOrderPosNext);
106
107     bool WriteDefaultKey(const CPubKey& vchPubKey);
108
109     bool ReadPool(int64_t nPool, CKeyPool& keypool);
110     bool WritePool(int64_t nPool, const CKeyPool& keypool);
111     bool ErasePool(int64_t nPool);
112
113     bool WriteMinVersion(int nVersion);
114
115     bool ReadAccount(const std::string& strAccount, CAccount& account);
116     bool WriteAccount(const std::string& strAccount, const CAccount& account);
117
118     /// Write destination data key,value tuple to database
119     bool WriteDestData(const std::string &address, const std::string &key, const std::string &value);
120     /// Erase destination data tuple from wallet database
121     bool EraseDestData(const std::string &address, const std::string &key);
122 private:
123     bool WriteAccountingEntry(const uint64_t nAccEntryNum, const CAccountingEntry& acentry);
124 public:
125     bool WriteAccountingEntry(const CAccountingEntry& acentry);
126     int64_t GetAccountCreditDebit(const std::string& strAccount);
127     void ListAccountCreditDebit(const std::string& strAccount, std::list<CAccountingEntry>& acentries);
128
129     DBErrors ReorderTransactions(CWallet*);
130     DBErrors LoadWallet(CWallet* pwallet);
131     DBErrors FindWalletTx(CWallet* pwallet, std::vector<uint256>& vTxHash, std::vector<CWalletTx>& vWtx);
132     DBErrors ZapWalletTx(CWallet* pwallet, std::vector<CWalletTx>& vWtx);
133     static bool Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys);
134     static bool Recover(CDBEnv& dbenv, std::string filename);
135 };
136
137 bool BackupWallet(const CWallet& wallet, const std::string& strDest);
138
139 #endif // BITCOIN_WALLETDB_H
This page took 0.028685 seconds and 4 git commands to generate.