LevelDB block and coin databases

Split off CBlockTreeDB and CCoinsViewDB into txdb-*.{cpp,h} files,
implemented by either LevelDB or BDB.

Based on code from earlier commits by Mike Hearn in his leveldb
branch.
This commit is contained in:
Pieter Wuille
2012-09-03 21:14:03 +02:00
parent 44d40f26dc
commit 2d8a48292b
15 changed files with 574 additions and 340 deletions

View File

@@ -315,61 +315,6 @@ public:
/** Access to the transaction database (coins.dat) */
class CCoinsDB : public CDB
{
public:
CCoinsDB(const char* pszMode="r+") : CDB("coins.dat", pszMode) { }
private:
CCoinsDB(const CCoinsDB&);
void operator=(const CCoinsDB&);
public:
bool ReadCoins(uint256 hash, CCoins &coins);
bool WriteCoins(uint256 hash, const CCoins& coins);
bool HaveCoins(uint256 hash);
bool ReadHashBestChain(uint256& hashBestChain);
bool WriteHashBestChain(uint256 hashBestChain);
};
/** CCoinsView backed by a CCoinsDB */
class CCoinsViewDB : public CCoinsView
{
protected:
CCoinsDB db;
public:
CCoinsViewDB();
bool GetCoins(uint256 txid, CCoins &coins);
bool SetCoins(uint256 txid, const CCoins &coins);
bool HaveCoins(uint256 txid);
CBlockIndex *GetBestBlock();
bool SetBestBlock(CBlockIndex *pindex);
bool BatchWrite(const std::map<uint256, CCoins> &mapCoins, CBlockIndex *pindex);
};
/** Access to the block database (blktree.dat) */
class CBlockTreeDB : public CDB
{
public:
CBlockTreeDB(const char* pszMode="r+") : CDB("blktree.dat", pszMode) { }
private:
CBlockTreeDB(const CBlockTreeDB&);
void operator=(const CBlockTreeDB&);
public:
bool WriteBlockIndex(const CDiskBlockIndex& blockindex);
bool ReadBestInvalidWork(CBigNum& bnBestInvalidWork);
bool WriteBestInvalidWork(CBigNum bnBestInvalidWork);
bool ReadBlockFileInfo(int nFile, CBlockFileInfo &fileinfo);
bool WriteBlockFileInfo(int nFile, const CBlockFileInfo &fileinfo);
bool ReadLastBlockFile(int &nFile);
bool WriteLastBlockFile(int nFile);
bool LoadBlockIndexGuts();
};
bool LoadBlockIndexDB();
/** Access to the (IP) address database (peers.dat) */
class CAddrDB