#ifndef BITCOIN_TXDB_H
#define BITCOIN_TXDB_H
#include <coins.h>
#include <dbwrapper.h>
#include <kernel/caches.h>
#include <kernel/cs_main.h>
#include <sync.h>
#include <util/fs.h>
#include <cstddef>
#include <cstdint>
#include <memory>
#include <optional>
#include <vector>
class COutPoint;
class uint256;
struct CoinsViewOptions {
size_t batch_write_bytes{DEFAULT_DB_CACHE_BATCH};
int simulate_crash_ratio{0};
};
class CCoinsViewDB final : public CCoinsView
{
protected:
DBParams m_db_params;
CoinsViewOptions m_options;
std::unique_ptr<CDBWrapper> m_db;
public:
explicit CCoinsViewDB(DBParams db_params, CoinsViewOptions options);
std::optional<Coin> GetCoin(const COutPoint& outpoint) const override;
bool HaveCoin(const COutPoint &outpoint) const override;
uint256 GetBestBlock() const override;
std::vector<uint256> GetHeadBlocks() const override;
void BatchWrite(CoinsViewCacheCursor& cursor, const uint256& hashBlock) override;
std::unique_ptr<CCoinsViewCursor> Cursor() const override;
bool NeedsUpgrade();
size_t EstimateSize() const override;
void ResizeCache(size_t new_cache_size) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
};
#endif