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