From ff338fdb53a66ab40a36e1277e7371941fc89840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Sun, 1 Feb 2026 14:02:48 +0100 Subject: [PATCH] coins: simplify `HaveCoin` usages Direct `CCoinsViewDB::HaveCoin` calls aren't called in production anyway, so let's just revert to delegating to `::GetCoin`. Benchmark at this commit: | ns/tx | tx/s | err% | total | benchmark |--------------------:|--------------------:|--------:|----------:|:---------- | 995.62 | 1,004,398.82 | 0.9% | 1.10 | `HaveInputsOnDisk` --- src/coins.cpp | 6 ++++-- src/txdb.cpp | 4 ---- src/txdb.h | 1 - 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/coins.cpp b/src/coins.cpp index fc33c521617..a04dd5a27d6 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -165,12 +165,14 @@ const Coin& CCoinsViewCache::AccessCoin(const COutPoint &outpoint) const { } } -bool CCoinsViewCache::HaveCoin(const COutPoint &outpoint) const { +bool CCoinsViewCache::HaveCoin(const COutPoint& outpoint) const +{ CCoinsMap::const_iterator it = FetchCoin(outpoint); return (it != cacheCoins.end() && !it->second.coin.IsSpent()); } -bool CCoinsViewCache::HaveCoinInCache(const COutPoint &outpoint) const { +bool CCoinsViewCache::HaveCoinInCache(const COutPoint& outpoint) const +{ CCoinsMap::const_iterator it = cacheCoins.find(outpoint); return (it != cacheCoins.end() && !it->second.coin.IsSpent()); } diff --git a/src/txdb.cpp b/src/txdb.cpp index 21f6eb93867..2c2c30d94bf 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -74,10 +74,6 @@ std::optional CCoinsViewDB::GetCoin(const COutPoint& outpoint) const return std::nullopt; } -bool CCoinsViewDB::HaveCoin(const COutPoint &outpoint) const { - return m_db->Exists(CoinEntry(&outpoint)); -} - uint256 CCoinsViewDB::GetBestBlock() const { uint256 hashBestChain; if (!m_db->Read(DB_BEST_BLOCK, hashBestChain)) diff --git a/src/txdb.h b/src/txdb.h index 248fe43e559..049abdd58bb 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -41,7 +41,6 @@ public: explicit CCoinsViewDB(DBParams db_params, CoinsViewOptions options); std::optional GetCoin(const COutPoint& outpoint) const override; - bool HaveCoin(const COutPoint &outpoint) const override; uint256 GetBestBlock() const override; std::vector GetHeadBlocks() const override; void BatchWrite(CoinsViewCacheCursor& cursor, const uint256& hashBlock) override;