mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 20:42:59 +01:00
[db] Create separate database for txindex.
The new TxIndexDB class will be used by a future commit in this change set.
This commit is contained in:
parent
25ad2f75f5
commit
0cb8303241
@ -224,6 +224,9 @@ public:
|
|||||||
CDBWrapper(const fs::path& path, size_t nCacheSize, bool fMemory = false, bool fWipe = false, bool obfuscate = false);
|
CDBWrapper(const fs::path& path, size_t nCacheSize, bool fMemory = false, bool fWipe = false, bool obfuscate = false);
|
||||||
~CDBWrapper();
|
~CDBWrapper();
|
||||||
|
|
||||||
|
CDBWrapper(const CDBWrapper&) = delete;
|
||||||
|
CDBWrapper& operator=(const CDBWrapper&) = delete;
|
||||||
|
|
||||||
template <typename K, typename V>
|
template <typename K, typename V>
|
||||||
bool Read(const K& key, V& value) const
|
bool Read(const K& key, V& value) const
|
||||||
{
|
{
|
||||||
|
32
src/txdb.cpp
32
src/txdb.cpp
@ -424,3 +424,35 @@ bool CCoinsViewDB::Upgrade() {
|
|||||||
LogPrintf("[%s].\n", ShutdownRequested() ? "CANCELLED" : "DONE");
|
LogPrintf("[%s].\n", ShutdownRequested() ? "CANCELLED" : "DONE");
|
||||||
return !ShutdownRequested();
|
return !ShutdownRequested();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TxIndexDB::TxIndexDB(size_t n_cache_size, bool f_memory, bool f_wipe) :
|
||||||
|
CDBWrapper(GetDataDir() / "indexes" / "txindex", n_cache_size, f_memory, f_wipe)
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool TxIndexDB::ReadTxPos(const uint256 &txid, CDiskTxPos& pos) const
|
||||||
|
{
|
||||||
|
return Read(std::make_pair(DB_TXINDEX, txid), pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TxIndexDB::WriteTxs(const std::vector<std::pair<uint256, CDiskTxPos>>& v_pos)
|
||||||
|
{
|
||||||
|
CDBBatch batch(*this);
|
||||||
|
for (const auto& tuple : v_pos) {
|
||||||
|
batch.Write(std::make_pair(DB_TXINDEX, tuple.first), tuple.second);
|
||||||
|
}
|
||||||
|
return WriteBatch(batch);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TxIndexDB::ReadBestBlock(CBlockLocator& locator) const
|
||||||
|
{
|
||||||
|
bool success = Read(DB_BEST_BLOCK, locator);
|
||||||
|
if (!success) {
|
||||||
|
locator.SetNull();
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TxIndexDB::WriteBestBlock(const CBlockLocator& locator)
|
||||||
|
{
|
||||||
|
return Write(DB_BEST_BLOCK, locator);
|
||||||
|
}
|
||||||
|
32
src/txdb.h
32
src/txdb.h
@ -9,6 +9,7 @@
|
|||||||
#include <coins.h>
|
#include <coins.h>
|
||||||
#include <dbwrapper.h>
|
#include <dbwrapper.h>
|
||||||
#include <chain.h>
|
#include <chain.h>
|
||||||
|
#include <primitives/block.h>
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -112,9 +113,6 @@ class CBlockTreeDB : public CDBWrapper
|
|||||||
public:
|
public:
|
||||||
explicit CBlockTreeDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false);
|
explicit CBlockTreeDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false);
|
||||||
|
|
||||||
CBlockTreeDB(const CBlockTreeDB&) = delete;
|
|
||||||
CBlockTreeDB& operator=(const CBlockTreeDB&) = delete;
|
|
||||||
|
|
||||||
bool WriteBatchSync(const std::vector<std::pair<int, const CBlockFileInfo*> >& fileInfo, int nLastFile, const std::vector<const CBlockIndex*>& blockinfo);
|
bool WriteBatchSync(const std::vector<std::pair<int, const CBlockFileInfo*> >& fileInfo, int nLastFile, const std::vector<const CBlockIndex*>& blockinfo);
|
||||||
bool ReadBlockFileInfo(int nFile, CBlockFileInfo &info);
|
bool ReadBlockFileInfo(int nFile, CBlockFileInfo &info);
|
||||||
bool ReadLastBlockFile(int &nFile);
|
bool ReadLastBlockFile(int &nFile);
|
||||||
@ -127,4 +125,32 @@ public:
|
|||||||
bool LoadBlockIndexGuts(const Consensus::Params& consensusParams, std::function<CBlockIndex*(const uint256&)> insertBlockIndex);
|
bool LoadBlockIndexGuts(const Consensus::Params& consensusParams, std::function<CBlockIndex*(const uint256&)> insertBlockIndex);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Access to the txindex database (indexes/txindex/)
|
||||||
|
*
|
||||||
|
* The database stores a block locator of the chain the database is synced to
|
||||||
|
* so that the TxIndex can efficiently determine the point it last stopped at.
|
||||||
|
* A locator is used instead of a simple hash of the chain tip because blocks
|
||||||
|
* and block index entries may not be flushed to disk until after this database
|
||||||
|
* is updated.
|
||||||
|
*/
|
||||||
|
class TxIndexDB : public CDBWrapper
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit TxIndexDB(size_t n_cache_size, bool f_memory = false, bool f_wipe = false);
|
||||||
|
|
||||||
|
/// Read the disk location of the transaction data with the given hash. Returns false if the
|
||||||
|
/// transaction hash is not indexed.
|
||||||
|
bool ReadTxPos(const uint256& txid, CDiskTxPos& pos) const;
|
||||||
|
|
||||||
|
/// Write a batch of transaction positions to the DB.
|
||||||
|
bool WriteTxs(const std::vector<std::pair<uint256, CDiskTxPos>>& v_pos);
|
||||||
|
|
||||||
|
/// Read block locator of the chain that the txindex is in sync with.
|
||||||
|
bool ReadBestBlock(CBlockLocator& locator) const;
|
||||||
|
|
||||||
|
/// Write block locator of the chain that the txindex is in sync with.
|
||||||
|
bool WriteBestBlock(const CBlockLocator& locator);
|
||||||
|
};
|
||||||
|
|
||||||
#endif // BITCOIN_TXDB_H
|
#endif // BITCOIN_TXDB_H
|
||||||
|
Loading…
Reference in New Issue
Block a user