// Copyright (c) 2018 The Dash Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef DASH_EVODB_H #define DASH_EVODB_H #include "dbwrapper.h" #include "sync.h" #include "uint256.h" static const std::string EVODB_BEST_BLOCK = "b_b"; class CEvoDB { private: CCriticalSection cs; CDBWrapper db; typedef CDBTransaction RootTransaction; typedef CDBTransaction CurTransaction; typedef CScopedDBTransaction ScopedTransaction; CDBBatch rootBatch; RootTransaction rootDBTransaction; CurTransaction curDBTransaction; public: CEvoDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false); std::unique_ptr BeginTransaction() { LOCK(cs); auto t = ScopedTransaction::Begin(curDBTransaction); return t; } template bool Read(const K& key, V& value) { LOCK(cs); return curDBTransaction.Read(key, value); } template void Write(const K& key, const V& value) { LOCK(cs); curDBTransaction.Write(key, value); } template bool Exists(const K& key) { LOCK(cs); return curDBTransaction.Exists(key); } template void Erase(const K& key) { LOCK(cs); curDBTransaction.Erase(key); } CDBWrapper& GetRawDB() { return db; } bool CommitRootTransaction(); bool VerifyBestBlock(const uint256& hash); void WriteBestBlock(const uint256& hash); }; extern CEvoDB* evoDb; #endif //DASH_EVODB_H