From 16baf53e144dcd8815ccf26db6801217f372db37 Mon Sep 17 00:00:00 2001 From: glozow Date: Tue, 13 Sep 2022 15:37:26 +0100 Subject: [PATCH 1/4] Merge bitcoin/bitcoin#24513: CChainState -> Chainstate 00eeb31c7660e2c28f189f77a6905dee946ef408 scripted-diff: rename CChainState -> Chainstate (James O'Beirne) Pull request description: Alright alright alright, I know: we hate refactors. We especially hate cosmetic refactors. Nobody knows better than I that changing broad swaths of code out from under our already-abused collaborators, only to send a cascade of rebase bankruptcies, is annoying at best and sadistic at worst. And for a rename! The indignation! But just for a second, imagine yourself. Programming `bitcoin/bitcoin`, on a sandy beach beneath a lapis lazuli sky. You go to type the name of what is probably the most commonly used data structure in the codebase, and you *only hit shift once*. What could you do in such a world? You could do anything. [The only limit is yourself.](https://zombo.com/) --- So maybe you like the idea of this patch but really don't want to deal with rebasing. You're in luck! Here're the commands that will bail you out of rebase bankruptcy: ```sh git rebase -i $(git merge-base HEAD master) \ -x 'sed -i "s/CChainState/Chainstate/g" $(git ls-files | grep -E ".*\.(py|cpp|h)$") && git commit --amend --no-edit' # git add -u && git rebase --continue ``` --- ~~Anyway I'm not sure how serious I am about this, but I figured it was worth proposing.~~ I have decided I am very serious about this. Maybe we can have nice things every once in a while? ACKs for top commit: MarcoFalke: cr ACK 00eeb31c7660e2c28f189f77a6905dee946ef408 hebasto: ACK 00eeb31c7660e2c28f189f77a6905dee946ef408 glozow: ACK 00eeb31c7660e2c28f189f77a6905dee946ef408, thanks for being the one to propose this w0xlt: ACK https://github.com/bitcoin/bitcoin/pull/24513/commits/00eeb31c7660e2c28f189f77a6905dee946ef408 Tree-SHA512: b828a99780614a9b74f7a9c347ce0687de6f8d75232840f5ffc26e02bbb25a3b1f5f9deabbe44f82ada01459586ee8452a3ee2da05d1b3c48558c8df6f49e1b1 Fixing CChainState Fixing CChainState in other places Fixing CChainState in other places Fixing CChainState in other places Fixing errors Fixing Build error Fixing alignment Missed blockchain.cpp file for CChainState conversion Signed-off-by: Shailendra Kumar Gupta --- doc/design/assumeutxo.md | 4 +- doc/developer-notes.md | 4 +- src/bench/load_external.cpp | 2 +- src/chainlock/signing.cpp | 2 +- src/chainlock/signing.h | 4 +- src/coinjoin/client.cpp | 7 +- src/coinjoin/client.h | 6 +- src/coinjoin/coinjoin.cpp | 2 +- src/coinjoin/coinjoin.h | 4 +- src/coinjoin/walletman.cpp | 4 +- src/coinjoin/walletman.h | 4 +- src/index/base.cpp | 2 +- src/index/base.h | 6 +- src/init.cpp | 6 +- src/instantsend/net_instantsend.cpp | 2 +- src/instantsend/net_instantsend.h | 6 +- src/instantsend/signing.cpp | 2 +- src/instantsend/signing.h | 4 +- src/llmq/blockprocessor.cpp | 2 +- src/llmq/blockprocessor.h | 6 +- src/llmq/signing.h | 2 +- src/node/blockstorage.cpp | 2 +- src/node/blockstorage.h | 6 +- src/node/chainstate.cpp | 10 +- src/node/interfaces.cpp | 2 +- src/node/miner.cpp | 4 +- src/node/miner.h | 6 +- src/node/utxo_snapshot.h | 2 +- src/rpc/blockchain.cpp | 22 +-- src/rpc/blockchain.h | 4 +- src/rpc/mempool.cpp | 4 +- src/rpc/mining.cpp | 4 +- src/rpc/rawtransaction.cpp | 4 +- src/rpc/txoutproof.cpp | 2 +- src/test/coinstatsindex_tests.cpp | 2 +- src/test/fuzz/tx_pool.cpp | 6 +- src/test/net_tests.cpp | 2 +- src/test/util/setup_common.cpp | 4 +- src/test/util/setup_common.h | 6 +- src/test/util/validation.h | 2 +- src/test/validation_chainstate_tests.cpp | 8 +- .../validation_chainstatemanager_tests.cpp | 22 +-- src/test/validation_flush_tests.cpp | 4 +- src/txmempool.h | 2 +- src/validation.cpp | 144 +++++++++--------- src/validation.h | 52 +++---- test/sanitizer_suppressions/tsan | 4 +- 47 files changed, 206 insertions(+), 205 deletions(-) diff --git a/doc/design/assumeutxo.md b/doc/design/assumeutxo.md index 667b3deda0b5..e9562f87a1a3 100644 --- a/doc/design/assumeutxo.md +++ b/doc/design/assumeutxo.md @@ -41,7 +41,7 @@ be of use. Chainstate within the system goes through a number of phases when UTXO snapshots are used, as managed by `ChainstateManager`. At various points there can be multiple -`CChainState` objects in existence to facilitate both maintaining the network tip and +`Chainstate` objects in existence to facilitate both maintaining the network tip and performing historical validation of the assumed-valid chain. It is worth noting that though there are multiple separate chainstates, those @@ -53,7 +53,7 @@ data. ### "Normal" operation via initial block download -`ChainstateManager` manages a single CChainState object, for which +`ChainstateManager` manages a single Chainstate object, for which `m_snapshot_blockhash` is null. This chainstate is (maybe obviously) considered active. This is the "traditional" mode of operation for dashd. diff --git a/doc/developer-notes.md b/doc/developer-notes.md index c343f3a7e007..61025728bef1 100644 --- a/doc/developer-notes.md +++ b/doc/developer-notes.md @@ -1034,7 +1034,7 @@ void CTxMemPool::UpdateTransactionsFromBlock(...) ```C++ // validation.h -class CChainState +class Chainstate { protected: ... @@ -1055,7 +1055,7 @@ public: } // validation.cpp -bool CChainState::PreciousBlock(BlockValidationState& state, CBlockIndex* pindex) +bool Chainstate::PreciousBlock(BlockValidationState& state, CBlockIndex* pindex) { AssertLockNotHeld(m_chainstate_mutex); AssertLockNotHeld(::cs_main); diff --git a/src/bench/load_external.cpp b/src/bench/load_external.cpp index 150654a095ca..ec97be45ff1e 100644 --- a/src/bench/load_external.cpp +++ b/src/bench/load_external.cpp @@ -48,7 +48,7 @@ static void LoadExternalBlockFile(benchmark::Bench& bench) fclose(file); } - CChainState& chainstate{testing_setup->m_node.chainman->ActiveChainstate()}; + Chainstate& chainstate{testing_setup->m_node.chainman->ActiveChainstate()}; std::multimap blocks_with_unknown_parent; FlatFilePos pos; bench.run([&] { diff --git a/src/chainlock/signing.cpp b/src/chainlock/signing.cpp index 9a63ee387ae2..3711037bfddd 100644 --- a/src/chainlock/signing.cpp +++ b/src/chainlock/signing.cpp @@ -20,7 +20,7 @@ using node::ReadBlockFromDisk; namespace chainlock { -ChainLockSigner::ChainLockSigner(CChainState& chainstate, const chainlock::Chainlocks& chainlocks, +ChainLockSigner::ChainLockSigner(Chainstate& chainstate, const chainlock::Chainlocks& chainlocks, ChainlockHandler& clhandler, const llmq::CInstantSendManager& isman, const llmq::CQuorumManager& qman, llmq::CSigningManager& sigman, llmq::CSigSharesManager& shareman, const CMasternodeSync& mn_sync) : diff --git a/src/chainlock/signing.h b/src/chainlock/signing.h index f19659727f72..56287e1805fb 100644 --- a/src/chainlock/signing.h +++ b/src/chainlock/signing.h @@ -26,7 +26,7 @@ class ChainlockHandler; class ChainLockSigner final : public llmq::CRecoveredSigsListener, public CValidationInterface { private: - CChainState& m_chainstate; + Chainstate& m_chainstate; const chainlock::Chainlocks& m_chainlocks; ChainlockHandler& m_clhandler; const llmq::CInstantSendManager& m_isman; @@ -59,7 +59,7 @@ class ChainLockSigner final : public llmq::CRecoveredSigsListener, public CValid ChainLockSigner() = delete; ChainLockSigner(const ChainLockSigner&) = delete; ChainLockSigner& operator=(const ChainLockSigner&) = delete; - explicit ChainLockSigner(CChainState& chainstate, const chainlock::Chainlocks& chainlocks, + explicit ChainLockSigner(Chainstate& chainstate, const chainlock::Chainlocks& chainlocks, ChainlockHandler& clhandler, const llmq::CInstantSendManager& isman, const llmq::CQuorumManager& qman, llmq::CSigningManager& sigman, llmq::CSigSharesManager& shareman, const CMasternodeSync& mn_sync); diff --git a/src/coinjoin/client.cpp b/src/coinjoin/client.cpp index 6474cbd708bb..b9fd49c5a769 100644 --- a/src/coinjoin/client.cpp +++ b/src/coinjoin/client.cpp @@ -55,7 +55,8 @@ CCoinJoinClientManager::CCoinJoinClientManager(const std::shared_ptr& w m_isman{isman} {} -void CCoinJoinClientSession::ProcessMessage(CNode& peer, CChainState& active_chainstate, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv) +void CCoinJoinClientSession::ProcessMessage(CNode& peer, Chainstate& active_chainstate, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv) { if (!CCoinJoinClientOptions::IsEnabled()) return; if (!m_mn_sync.IsBlockchainSynced()) return; @@ -444,7 +445,7 @@ void CCoinJoinClientSession::ProcessPoolStateUpdate(CCoinJoinStatusUpdate psssup // check it to make sure it's what we want, then sign it if we agree. // If we refuse to sign, it's possible we'll be charged collateral // -bool CCoinJoinClientSession::SignFinalTransaction(CNode& peer, CChainState& active_chainstate, CConnman& connman, const CTxMemPool& mempool, const CTransaction& finalTransactionNew) +bool CCoinJoinClientSession::SignFinalTransaction(CNode& peer, Chainstate& active_chainstate, CConnman& connman, const CTxMemPool& mempool, const CTransaction& finalTransactionNew) { if (!CCoinJoinClientOptions::IsEnabled()) return false; diff --git a/src/coinjoin/client.h b/src/coinjoin/client.h index 3785d307099e..effd7f62e0c9 100644 --- a/src/coinjoin/client.h +++ b/src/coinjoin/client.h @@ -117,7 +117,7 @@ class CCoinJoinClientSession : public CCoinJoinBaseSession void CompletedTransaction(PoolMessage nMessageID); /// As a client, check and sign the final transaction - bool SignFinalTransaction(CNode& peer, CChainState& active_chainstate, CConnman& connman, const CTxMemPool& mempool, const CTransaction& finalTransactionNew) EXCLUSIVE_LOCKS_REQUIRED(!cs_coinjoin); + bool SignFinalTransaction(CNode& peer, Chainstate& active_chainstate, CConnman& connman, const CTxMemPool& mempool, const CTransaction& finalTransactionNew) EXCLUSIVE_LOCKS_REQUIRED(!cs_coinjoin); void RelayIn(const CCoinJoinEntry& entry, CConnman& connman) const; @@ -128,7 +128,7 @@ class CCoinJoinClientSession : public CCoinJoinBaseSession CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_metaman, const CMasternodeSync& mn_sync, const llmq::CInstantSendManager& isman); - void ProcessMessage(CNode& peer, CChainState& active_chainstate, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv); + void ProcessMessage(CNode& peer, Chainstate& active_chainstate, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv); void UnlockCoins(); @@ -195,7 +195,7 @@ class CCoinJoinClientManager const llmq::CInstantSendManager& isman, CoinJoinQueueManager* queueman); ~CCoinJoinClientManager(); - void ProcessMessage(CNode& peer, CChainState& active_chainstate, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv) EXCLUSIVE_LOCKS_REQUIRED(!cs_deqsessions); + void ProcessMessage(CNode& peer, Chainstate& active_chainstate, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv) EXCLUSIVE_LOCKS_REQUIRED(!cs_deqsessions); bool StartMixing(); void StopMixing(); diff --git a/src/coinjoin/coinjoin.cpp b/src/coinjoin/coinjoin.cpp index 010a81c877b7..947dc2ea40c7 100644 --- a/src/coinjoin/coinjoin.cpp +++ b/src/coinjoin/coinjoin.cpp @@ -199,7 +199,7 @@ std::string CCoinJoinBaseSession::GetStateString() const } } -bool CCoinJoinBaseSession::IsValidInOuts(CChainState& active_chainstate, const llmq::CInstantSendManager& isman, +bool CCoinJoinBaseSession::IsValidInOuts(Chainstate& active_chainstate, const llmq::CInstantSendManager& isman, const CTxMemPool& mempool, const std::vector& vin, const std::vector& vout, PoolMessage& nMessageIDRet, bool* fConsumeCollateralRet) const diff --git a/src/coinjoin/coinjoin.h b/src/coinjoin/coinjoin.h index ea073f14f79e..e39387c2edb8 100644 --- a/src/coinjoin/coinjoin.h +++ b/src/coinjoin/coinjoin.h @@ -25,7 +25,7 @@ #include -class CChainState; +class Chainstate; class CBLSPublicKey; class CBlockIndex; class ChainstateManager; @@ -304,7 +304,7 @@ class CCoinJoinBaseSession virtual void SetNull() EXCLUSIVE_LOCKS_REQUIRED(cs_coinjoin); - bool IsValidInOuts(CChainState& active_chainstate, const llmq::CInstantSendManager& isman, + bool IsValidInOuts(Chainstate& active_chainstate, const llmq::CInstantSendManager& isman, const CTxMemPool& mempool, const std::vector& vin, const std::vector& vout, PoolMessage& nMessageIDRet, bool* fConsumeCollateralRet) const; diff --git a/src/coinjoin/walletman.cpp b/src/coinjoin/walletman.cpp index a54ac93795b4..42c70b30e24f 100644 --- a/src/coinjoin/walletman.cpp +++ b/src/coinjoin/walletman.cpp @@ -40,7 +40,7 @@ class CJWalletManagerImpl final : public CJWalletManager public: bool hasQueue(const uint256& hash) const override; CCoinJoinClientManager* getClient(const std::string& name) override EXCLUSIVE_LOCKS_REQUIRED(!cs_wallet_manager_map); - MessageProcessingResult processMessage(CNode& peer, CChainState& chainstate, CConnman& connman, CTxMemPool& mempool, + MessageProcessingResult processMessage(CNode& peer, Chainstate& chainstate, CConnman& connman, CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv) override EXCLUSIVE_LOCKS_REQUIRED(!cs_ProcessDSQueue, !cs_wallet_manager_map); std::optional getQueueFromHash(const uint256& hash) const override; std::optional getQueueSize() const override; @@ -202,7 +202,7 @@ void CJWalletManagerImpl::DoMaintenance(CConnman& connman) } } -MessageProcessingResult CJWalletManagerImpl::processMessage(CNode& pfrom, CChainState& chainstate, CConnman& connman, +MessageProcessingResult CJWalletManagerImpl::processMessage(CNode& pfrom, Chainstate& chainstate, CConnman& connman, CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv) { diff --git a/src/coinjoin/walletman.h b/src/coinjoin/walletman.h index 720a4bdf2f81..9d79f4f4f78f 100644 --- a/src/coinjoin/walletman.h +++ b/src/coinjoin/walletman.h @@ -14,7 +14,7 @@ #include class CBlockIndex; -class CChainState; +class Chainstate; class CCoinJoinClientManager; class CCoinJoinQueue; class CConnman; @@ -48,7 +48,7 @@ class CJWalletManager : public CValidationInterface public: virtual bool hasQueue(const uint256& hash) const = 0; virtual CCoinJoinClientManager* getClient(const std::string& name) = 0; - virtual MessageProcessingResult processMessage(CNode& peer, CChainState& chainstate, CConnman& connman, + virtual MessageProcessingResult processMessage(CNode& peer, Chainstate& chainstate, CConnman& connman, CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv) = 0; virtual std::optional getQueueFromHash(const uint256& hash) const = 0; virtual std::optional getQueueSize() const = 0; diff --git a/src/index/base.cpp b/src/index/base.cpp index d585cac6dd53..e508e6acb391 100644 --- a/src/index/base.cpp +++ b/src/index/base.cpp @@ -355,7 +355,7 @@ void BaseIndex::Interrupt() m_interrupt(); } -bool BaseIndex::Start(CChainState& active_chainstate) +bool BaseIndex::Start(Chainstate& active_chainstate) { m_chainstate = &active_chainstate; // Need to register this ValidationInterface before running Init(), so that diff --git a/src/index/base.h b/src/index/base.h index 8c4fc98b68b2..416717ebf1b5 100644 --- a/src/index/base.h +++ b/src/index/base.h @@ -13,7 +13,7 @@ class CBlock; class CBlockIndex; -class CChainState; +class Chainstate; struct IndexSummary { std::string name; @@ -85,7 +85,7 @@ class BaseIndex : public CValidationInterface virtual bool AllowPrune() const = 0; protected: - CChainState* m_chainstate{nullptr}; + Chainstate* m_chainstate{nullptr}; void BlockConnected(const std::shared_ptr& block, const CBlockIndex* pindex) override; @@ -130,7 +130,7 @@ class BaseIndex : public CValidationInterface /// Start initializes the sync state and registers the instance as a /// ValidationInterface so that it stays in sync with blockchain updates. - [[nodiscard]] bool Start(CChainState& active_chainstate); + [[nodiscard]] bool Start(Chainstate& active_chainstate); /// Stops the instance from staying in sync with blockchain updates. void Stop(); diff --git a/src/init.cpp b/src/init.cpp index 113bd4c9f025..1ac4cd024548 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -338,7 +338,7 @@ void PrepareShutdown(NodeContext& node) // FlushStateToDisk generates a ChainStateFlushed callback, which we should avoid missing if (node.chainman) { LOCK(cs_main); - for (CChainState* chainstate : node.chainman->GetAll()) { + for (Chainstate* chainstate : node.chainman->GetAll()) { if (chainstate->CanFlushToDisk()) { chainstate->ForceFlushStateToDisk(); } @@ -396,7 +396,7 @@ void PrepareShutdown(NodeContext& node) if (node.chainman) { LOCK(cs_main); - for (CChainState* chainstate : node.chainman->GetAll()) { + for (Chainstate* chainstate : node.chainman->GetAll()) { if (chainstate->CanFlushToDisk()) { chainstate->ForceFlushStateToDisk(); chainstate->ResetCoinsViews(); @@ -2317,7 +2317,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) if (fPruneMode) { if (!fReindex) { LOCK(cs_main); - for (CChainState* chainstate : chainman.GetAll()) { + for (Chainstate* chainstate : chainman.GetAll()) { uiInterface.InitMessage(_("Pruning blockstore…").translated); chainstate->PruneAndFlush(); } diff --git a/src/instantsend/net_instantsend.cpp b/src/instantsend/net_instantsend.cpp index c25d771a5833..dbaff1fb712c 100644 --- a/src/instantsend/net_instantsend.cpp +++ b/src/instantsend/net_instantsend.cpp @@ -37,7 +37,7 @@ constexpr int OLD_ACTIVE_SET_FAILURE_MISBEHAVIOR_SCORE{20}; constexpr auto WORK_THREAD_SLEEP_INTERVAL{std::chrono::milliseconds{100}}; } // namespace -static std::optional GetBlockHeight(llmq::CInstantSendManager& is_manager, const CChainState& chainstate, +static std::optional GetBlockHeight(llmq::CInstantSendManager& is_manager, const Chainstate& chainstate, const uint256& hash) { if (hash.IsNull()) { diff --git a/src/instantsend/net_instantsend.h b/src/instantsend/net_instantsend.h index d5b35e89eb2a..a6c29d7a6769 100644 --- a/src/instantsend/net_instantsend.h +++ b/src/instantsend/net_instantsend.h @@ -14,7 +14,7 @@ #include #include -class CChainState; +class Chainstate; namespace Consensus { struct LLMQParams; @@ -44,7 +44,7 @@ class NetInstantSend final : public NetHandler, public CValidationInterface public: NetInstantSend(PeerManagerInternal* peer_manager, llmq::CInstantSendManager& is_manager, instantsend::InstantSendSigner* signer, llmq::CSigningManager& sigman, llmq::CQuorumManager& qman, - const chainlock::Chainlocks& chainlocks, CChainState& chainstate, CTxMemPool& mempool, + const chainlock::Chainlocks& chainlocks, Chainstate& chainstate, CTxMemPool& mempool, const CMasternodeSync& mn_sync) : NetHandler(peer_manager), m_is_manager{is_manager}, @@ -113,7 +113,7 @@ class NetInstantSend final : public NetHandler, public CValidationInterface llmq::CSigningManager& m_sigman; llmq::CQuorumManager& m_qman; const chainlock::Chainlocks& m_chainlocks; - CChainState& m_chainstate; + Chainstate& m_chainstate; CTxMemPool& m_mempool; const CMasternodeSync& m_mn_sync; diff --git a/src/instantsend/signing.cpp b/src/instantsend/signing.cpp index 7c46f8d389aa..267debe29bd3 100644 --- a/src/instantsend/signing.cpp +++ b/src/instantsend/signing.cpp @@ -30,7 +30,7 @@ using node::fReindex; using node::GetTransaction; namespace instantsend { -InstantSendSigner::InstantSendSigner(CChainState& chainstate, const chainlock::Chainlocks& chainlocks, +InstantSendSigner::InstantSendSigner(Chainstate& chainstate, const chainlock::Chainlocks& chainlocks, llmq::CInstantSendManager& isman, llmq::CSigningManager& sigman, llmq::CSigSharesManager& shareman, llmq::CQuorumManager& qman, CSporkManager& sporkman, CTxMemPool& mempool, const CMasternodeSync& mn_sync) : diff --git a/src/instantsend/signing.h b/src/instantsend/signing.h index 7202bd2daf80..fe06d2aa7c45 100644 --- a/src/instantsend/signing.h +++ b/src/instantsend/signing.h @@ -33,7 +33,7 @@ namespace instantsend { class InstantSendSigner final : public llmq::CRecoveredSigsListener { private: - CChainState& m_chainstate; + Chainstate& m_chainstate; const chainlock::Chainlocks& m_chainlocks; llmq::CInstantSendManager& m_isman; llmq::CSigningManager& m_sigman; @@ -66,7 +66,7 @@ class InstantSendSigner final : public llmq::CRecoveredSigsListener InstantSendSigner() = delete; InstantSendSigner(const InstantSendSigner&) = delete; InstantSendSigner& operator=(const InstantSendSigner&) = delete; - explicit InstantSendSigner(CChainState& chainstate, const chainlock::Chainlocks& chainlocks, + explicit InstantSendSigner(Chainstate& chainstate, const chainlock::Chainlocks& chainlocks, llmq::CInstantSendManager& isman, llmq::CSigningManager& sigman, llmq::CSigSharesManager& shareman, llmq::CQuorumManager& qman, CSporkManager& sporkman, CTxMemPool& mempool, const CMasternodeSync& mn_sync); diff --git a/src/llmq/blockprocessor.cpp b/src/llmq/blockprocessor.cpp index ce7948e62132..59b7b57f3d31 100644 --- a/src/llmq/blockprocessor.cpp +++ b/src/llmq/blockprocessor.cpp @@ -45,7 +45,7 @@ static const std::string DB_MINED_COMMITMENT_BY_INVERSED_HEIGHT_Q_INDEXED = "q_m static const std::string DB_BEST_BLOCK_UPGRADE = "q_bbu2"; -CQuorumBlockProcessor::CQuorumBlockProcessor(CChainState& chainstate, CDeterministicMNManager& dmnman, CEvoDB& evoDb, +CQuorumBlockProcessor::CQuorumBlockProcessor(Chainstate& chainstate, CDeterministicMNManager& dmnman, CEvoDB& evoDb, CQuorumSnapshotManager& qsnapman, int8_t bls_threads) : m_chainstate{chainstate}, m_dmnman{dmnman}, diff --git a/src/llmq/blockprocessor.h b/src/llmq/blockprocessor.h index 15ca83307117..4cf2598b3f44 100644 --- a/src/llmq/blockprocessor.h +++ b/src/llmq/blockprocessor.h @@ -25,7 +25,7 @@ class CBlock; class CBlockIndex; class CBLSSignature; class CChain; -class CChainState; +class Chainstate; class CDataStream; class CDeterministicMNManager; class CEvoDB; @@ -41,7 +41,7 @@ class CQuorumSnapshotManager; class CQuorumBlockProcessor { private: - CChainState& m_chainstate; + Chainstate& m_chainstate; CDeterministicMNManager& m_dmnman; CEvoDB& m_evoDb; CQuorumSnapshotManager& m_qsnapman; @@ -58,7 +58,7 @@ class CQuorumBlockProcessor CQuorumBlockProcessor() = delete; CQuorumBlockProcessor(const CQuorumBlockProcessor&) = delete; CQuorumBlockProcessor& operator=(const CQuorumBlockProcessor&) = delete; - explicit CQuorumBlockProcessor(CChainState& chainstate, CDeterministicMNManager& dmnman, CEvoDB& evoDb, + explicit CQuorumBlockProcessor(Chainstate& chainstate, CDeterministicMNManager& dmnman, CEvoDB& evoDb, CQuorumSnapshotManager& qsnapman, int8_t bls_threads); ~CQuorumBlockProcessor(); diff --git a/src/llmq/signing.h b/src/llmq/signing.h index 0d9cc71bf7a4..f1a575bdf344 100644 --- a/src/llmq/signing.h +++ b/src/llmq/signing.h @@ -19,7 +19,7 @@ #include #include -class CChainState; +class Chainstate; class CDataStream; class CDBBatch; class CDBWrapper; diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp index d6606442475a..14e7652cd401 100644 --- a/src/node/blockstorage.cpp +++ b/src/node/blockstorage.cpp @@ -897,7 +897,7 @@ void ThreadImport(ChainstateManager& chainman, std::vector vImportFile // We can't hold cs_main during ActivateBestChain even though we're accessing // the chainman unique_ptrs since ABC requires us not to be holding cs_main, so retrieve // the relevant pointers before the ABC call. - for (CChainState* chainstate : WITH_LOCK(::cs_main, return chainman.GetAll())) { + for (Chainstate* chainstate : WITH_LOCK(::cs_main, return chainman.GetAll())) { BlockValidationState state; if (!chainstate->ActivateBestChain(state, nullptr)) { LogPrintf("Failed to connect best block (%s)\n", state.ToString()); diff --git a/src/node/blockstorage.h b/src/node/blockstorage.h index e524f27e6d2f..7afcafcef0c4 100644 --- a/src/node/blockstorage.h +++ b/src/node/blockstorage.h @@ -27,7 +27,7 @@ class CBlock; class CBlockUndo; class CChain; class CChainParams; -class CChainState; +class Chainstate; class ChainstateManager; struct CCheckpointData; struct FlatFilePos; @@ -90,12 +90,12 @@ struct PruneLockInfo { * Maintains a tree of blocks (stored in `m_block_index`) which is consulted * to determine where the most-work tip is. * - * This data is used mostly in `CChainState` - information about, e.g., + * This data is used mostly in `Chainstate` - information about, e.g., * candidate tips is not maintained here. */ class BlockManager { - friend CChainState; + friend Chainstate; friend ChainstateManager; private: diff --git a/src/node/chainstate.cpp b/src/node/chainstate.cpp index 289720d0949f..aaed4ffc8719 100644 --- a/src/node/chainstate.cpp +++ b/src/node/chainstate.cpp @@ -64,7 +64,7 @@ std::optional LoadChainstate(bool fReset, std::function shutdown_requested, std::function coins_error_cb) { - auto is_coinsview_empty = [&](CChainState* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { + auto is_coinsview_empty = [&](Chainstate* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { return fReset || fReindexChainState || chainstate->CoinsTip().GetBestBlock().IsNull(); }; @@ -152,7 +152,7 @@ std::optional LoadChainstate(bool fReset, // At this point we're either in reindex or we've loaded a useful // block tree into BlockIndex()! - for (CChainState* chainstate : chainman.GetAll()) { + for (Chainstate* chainstate : chainman.GetAll()) { chainstate->InitCoinsDB( /*cache_size_bytes=*/nCoinDBCache, /*in_memory=*/coins_db_in_memory, @@ -262,13 +262,13 @@ std::optional VerifyLoadedChainstate(ChainstateManage std::function get_unix_time_seconds, std::function notify_bls_state) { - auto is_coinsview_empty = [&](CChainState* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { + auto is_coinsview_empty = [&](Chainstate* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { return fReset || fReindexChainState || chainstate->CoinsTip().GetBestBlock().IsNull(); }; LOCK(cs_main); - for (CChainState* chainstate : chainman.GetAll()) { + for (Chainstate* chainstate : chainman.GetAll()) { if (!is_coinsview_empty(chainstate)) { const CBlockIndex* tip = chainstate->m_chain.Tip(); if (tip && tip->nTime > get_unix_time_seconds() + MAX_FUTURE_BLOCK_TIME) { @@ -300,7 +300,7 @@ std::optional VerifyLoadedChainstate(ChainstateManage } } else { - // TODO: CEvoDB instance should probably be a part of CChainState + // TODO: CEvoDB instance should probably be a part of Chainstate // (for multiple chainstates to actually work in parallel) // and not a global if (&chainman.ActiveChainstate() == chainstate && !evodb.IsEmpty()) { diff --git a/src/node/interfaces.cpp b/src/node/interfaces.cpp index f3eac13383ad..5cf464cfc831 100644 --- a/src/node/interfaces.cpp +++ b/src/node/interfaces.cpp @@ -1223,7 +1223,7 @@ class ChainImpl : public Chain std::optional findLocatorFork(const CBlockLocator& locator) override { LOCK(::cs_main); - const CChainState& active = chainman().ActiveChainstate(); + const Chainstate& active = chainman().ActiveChainstate(); if (const CBlockIndex* fork = active.FindForkInGlobalIndex(locator)) { return fork->nHeight; } diff --git a/src/node/miner.cpp b/src/node/miner.cpp index d93c320eb195..64a074187579 100644 --- a/src/node/miner.cpp +++ b/src/node/miner.cpp @@ -69,7 +69,7 @@ BlockAssembler::Options::Options() nBlockMaxSize = DEFAULT_BLOCK_MAX_SIZE; } -BlockAssembler::BlockAssembler(CChainState& chainstate, const NodeContext& node, const CTxMemPool* mempool, const CChainParams& params, const Options& options) : +BlockAssembler::BlockAssembler(Chainstate& chainstate, const NodeContext& node, const CTxMemPool* mempool, const CChainParams& params, const Options& options) : m_blockman(chainstate.m_blockman), m_chain_helper(chainstate.ChainHelper()), m_chainstate(chainstate), @@ -103,7 +103,7 @@ static BlockAssembler::Options DefaultOptions() return options; } -BlockAssembler::BlockAssembler(CChainState& chainstate, const NodeContext& node, const CTxMemPool* mempool, const CChainParams& params) +BlockAssembler::BlockAssembler(Chainstate& chainstate, const NodeContext& node, const CTxMemPool* mempool, const CChainParams& params) : BlockAssembler(chainstate, node, mempool, params, DefaultOptions()) {} void BlockAssembler::resetBlock() diff --git a/src/node/miner.h b/src/node/miner.h index f16bb8ef5d94..1c6c7cac2730 100644 --- a/src/node/miner.h +++ b/src/node/miner.h @@ -170,7 +170,7 @@ class BlockAssembler BlockManager& m_blockman; CChainstateHelper& m_chain_helper; - CChainState& m_chainstate; + Chainstate& m_chainstate; CEvoDB& m_evoDb; const chainlock::Chainlocks& m_chainlocks; chainlock::ChainlockHandler& m_clhandler; @@ -187,8 +187,8 @@ class BlockAssembler CFeeRate blockMinFeeRate; }; - explicit BlockAssembler(CChainState& chainstate, const node::NodeContext& node, const CTxMemPool* mempool, const CChainParams& params); - explicit BlockAssembler(CChainState& chainstate, const node::NodeContext& node, const CTxMemPool* mempool, const CChainParams& params, + explicit BlockAssembler(Chainstate& chainstate, const node::NodeContext& node, const CTxMemPool* mempool, const CChainParams& params); + explicit BlockAssembler(Chainstate& chainstate, const node::NodeContext& node, const CTxMemPool* mempool, const CChainParams& params, const Options& options); /** Construct a new block template with coinbase to scriptPubKeyIn */ diff --git a/src/node/utxo_snapshot.h b/src/node/utxo_snapshot.h index 401d4baaeb92..9dd6f0699734 100644 --- a/src/node/utxo_snapshot.h +++ b/src/node/utxo_snapshot.h @@ -11,7 +11,7 @@ namespace node { //! Metadata describing a serialized version of a UTXO set from which an -//! assumeutxo CChainState can be constructed. +//! assumeutxo Chainstate can be constructed. class SnapshotMetadata { public: diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 1803294f7b3c..69fe14364b06 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -83,7 +83,7 @@ static GlobalMutex cs_blockchange; static std::condition_variable cond_blockchange; static CUpdatedBlock latestblock GUARDED_BY(cs_blockchange); -extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, const CTxMemPool& mempool, const CChainState& active_chainstate, const chainlock::Chainlocks& chainlocks, const llmq::CInstantSendManager& isman, UniValue& entry, TxVerbosity verbosity = TxVerbosity::SHOW_DETAILS); +extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, const CTxMemPool& mempool, const Chainstate& active_chainstate, const chainlock::Chainlocks& chainlocks, const llmq::CInstantSendManager& isman, UniValue& entry, TxVerbosity verbosity = TxVerbosity::SHOW_DETAILS); /* Calculate the difficulty for a given block index. */ @@ -725,7 +725,7 @@ static RPCHelpMan getblockheaders() ChainstateManager& chainman = EnsureChainman(node); - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); CChain& active_chain = active_chainstate.m_chain; const CBlockIndex* pblockindex; @@ -1062,7 +1062,7 @@ static RPCHelpMan pruneblockchain() ChainstateManager& chainman = EnsureAnyChainman(request.context); LOCK(cs_main); - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); CChain& active_chain = active_chainstate.m_chain; int heightParam = request.params[0].getInt(); @@ -1198,7 +1198,7 @@ static RPCHelpMan gettxoutsetinfo() const NodeContext& node = EnsureAnyNodeContext(request.context); ChainstateManager& chainman = EnsureChainman(node); - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); active_chainstate.ForceFlushStateToDisk(); CCoinsView* coins_view; @@ -1331,7 +1331,7 @@ static RPCHelpMan gettxout() ChainstateManager& chainman = EnsureChainman(node); LOCK(cs_main); - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); UniValue ret(UniValue::VOBJ); @@ -1400,7 +1400,7 @@ static RPCHelpMan verifychain() ChainstateManager& chainman = EnsureChainman(node); LOCK(cs_main); - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); return CVerifyDB().VerifyDB( active_chainstate, Params().GetConsensus(), active_chainstate.CoinsTip(), *CHECK_NONFATAL(node.evodb), check_level, check_depth); }, @@ -1545,7 +1545,7 @@ RPCHelpMan getblockchaininfo() ChainstateManager& chainman = EnsureChainman(node); LOCK(cs_main); - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); const CBlockIndex& tip{*CHECK_NONFATAL(active_chainstate.m_chain.Tip())}; const int height{tip.nHeight}; @@ -1815,7 +1815,7 @@ static RPCHelpMan invalidateblock() } } - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); active_chainstate.InvalidateBlock(state, pblockindex); if (state.IsValid()) { @@ -1848,7 +1848,7 @@ static RPCHelpMan reconsiderblock() [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue { ChainstateManager& chainman = EnsureAnyChainman(request.context); - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); uint256 hash(ParseHashV(request.params[0], "blockhash")); const bool ignore_chainlocks{request.params[1].isNull() ? false : request.params[1].get_bool()}; @@ -2554,7 +2554,7 @@ static RPCHelpMan scantxoutset() { ChainstateManager& chainman = EnsureChainman(node); LOCK(cs_main); - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); active_chainstate.ForceFlushStateToDisk(); pcursor = CHECK_NONFATAL(active_chainstate.CoinsDB().Cursor()); tip = CHECK_NONFATAL(active_chainstate.m_chain.Tip()); @@ -2735,7 +2735,7 @@ static RPCHelpMan dumptxoutset() UniValue CreateUTXOSnapshot( NodeContext& node, - CChainState& chainstate, + Chainstate& chainstate, AutoFile& afile, const fs::path& path, const fs::path& temppath) diff --git a/src/rpc/blockchain.h b/src/rpc/blockchain.h index 7c2051bd1d2e..7a4575f78423 100644 --- a/src/rpc/blockchain.h +++ b/src/rpc/blockchain.h @@ -21,7 +21,7 @@ extern RecursiveMutex cs_main; // NOLINT(readability-redundant-declaration) class CBlock; class CBlockIndex; -class CChainState; +class Chainstate; class CCoinsView; namespace chainlock { class Chainlocks; } namespace kernel { @@ -65,7 +65,7 @@ void CalculatePercentilesBySize(CAmount result[NUM_GETBLOCKSTATS_PERCENTILES], s */ UniValue CreateUTXOSnapshot( node::NodeContext& node, - CChainState& chainstate, + Chainstate& chainstate, AutoFile& afile, const fs::path& path, const fs::path& tmppath); diff --git a/src/rpc/mempool.cpp b/src/rpc/mempool.cpp index 8315c6a96db3..169b4f9a00b1 100644 --- a/src/rpc/mempool.cpp +++ b/src/rpc/mempool.cpp @@ -173,7 +173,7 @@ static RPCHelpMan testmempoolaccept() NodeContext& node = EnsureAnyNodeContext(request.context); CTxMemPool& mempool = EnsureMemPool(node); ChainstateManager& chainman = EnsureChainman(node); - CChainState& chainstate = chainman.ActiveChainstate(); + Chainstate& chainstate = chainman.ActiveChainstate(); const PackageMempoolAcceptResult package_result = [&] { LOCK(::cs_main); if (txns.size() > 1) return ProcessNewPackage(chainstate, mempool, txns, /*test_accept=*/true); @@ -831,7 +831,7 @@ static RPCHelpMan submitpackage() NodeContext& node = EnsureAnyNodeContext(request.context); CTxMemPool& mempool = EnsureMemPool(node); - CChainState& chainstate = EnsureChainman(node).ActiveChainstate(); + Chainstate& chainstate = EnsureChainman(node).ActiveChainstate(); const auto package_result = WITH_LOCK(::cs_main, return ProcessNewPackage(chainstate, mempool, txns, /*test_accept=*/ false)); // First catch any errors. diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 385240ee1e93..ecb80e2497ec 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -356,7 +356,7 @@ static RPCHelpMan generateblock() const CChainParams& chainparams(Params()); ChainstateManager& chainman = EnsureChainman(node); - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); CBlock block; { @@ -659,7 +659,7 @@ static RPCHelpMan getblocktemplate() std::string strMode = "template"; UniValue lpval = NullUniValue; std::set setClientRules; - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); CChain& active_chain = active_chainstate.m_chain; if (!request.params[0].isNull()) { diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 7a0dd1f71e05..7f9a01c7f539 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -70,7 +70,7 @@ using node::GetTransaction; using node::NodeContext; using node::PSBTAnalysis; -void TxToJSON(const CTransaction& tx, const uint256 hashBlock, const CTxMemPool& mempool, const CChainState& active_chainstate, const chainlock::Chainlocks& chainlocks, const llmq::CInstantSendManager& isman, UniValue& entry, TxVerbosity verbosity = TxVerbosity::SHOW_DETAILS) +void TxToJSON(const CTransaction& tx, const uint256 hashBlock, const CTxMemPool& mempool, const Chainstate& active_chainstate, const chainlock::Chainlocks& chainlocks, const llmq::CInstantSendManager& isman, UniValue& entry, TxVerbosity verbosity = TxVerbosity::SHOW_DETAILS) { CHECK_NONFATAL(verbosity >= TxVerbosity::SHOW_DETAILS); LOCK(::cs_main); @@ -618,7 +618,7 @@ static RPCHelpMan gettxchainlocks() { const NodeContext& node = EnsureAnyNodeContext(request.context); const ChainstateManager& chainman = EnsureChainman(node); - const CChainState& active_chainstate = chainman.ActiveChainstate(); + const Chainstate& active_chainstate = chainman.ActiveChainstate(); CHECK_NONFATAL(node.chainlocks); UniValue result_arr(UniValue::VARR); diff --git a/src/rpc/txoutproof.cpp b/src/rpc/txoutproof.cpp index bf7b8dc2e069..79c685721bf0 100644 --- a/src/rpc/txoutproof.cpp +++ b/src/rpc/txoutproof.cpp @@ -70,7 +70,7 @@ static RPCHelpMan gettxoutproof() } } else { LOCK(cs_main); - CChainState& active_chainstate = chainman.ActiveChainstate(); + Chainstate& active_chainstate = chainman.ActiveChainstate(); // Loop through txids and try to find which block they're in. Exit loop once a block is found. for (const auto& tx : setTxids) { diff --git a/src/test/coinstatsindex_tests.cpp b/src/test/coinstatsindex_tests.cpp index b8f5a2b4b9f0..b1a334a5d4f3 100644 --- a/src/test/coinstatsindex_tests.cpp +++ b/src/test/coinstatsindex_tests.cpp @@ -78,7 +78,7 @@ BOOST_FIXTURE_TEST_CASE(coinstatsindex_initial_sync, TestChain100Setup) // make sure index is not corrupted and is able to reload. BOOST_FIXTURE_TEST_CASE(coinstatsindex_unclean_shutdown, TestChain100Setup) { - CChainState& chainstate = Assert(m_node.chainman)->ActiveChainstate(); + Chainstate& chainstate = Assert(m_node.chainman)->ActiveChainstate(); const CChainParams& params = Params(); { CoinStatsIndex index{1 << 20}; diff --git a/src/test/fuzz/tx_pool.cpp b/src/test/fuzz/tx_pool.cpp index 8799b1bad806..3a1486f42c64 100644 --- a/src/test/fuzz/tx_pool.cpp +++ b/src/test/fuzz/tx_pool.cpp @@ -32,7 +32,7 @@ struct MockedTxPool : public CTxMemPool { } }; -class DummyChainState final : public CChainState +class DummyChainState final : public Chainstate { public: void SetMempool(CTxMemPool* mempool) @@ -91,7 +91,7 @@ void SetMempoolConstraints(ArgsManager& args, FuzzedDataProvider& fuzzed_data_pr ToString(fuzzed_data_provider.ConsumeIntegralInRange(0, 999))); } -void Finish(FuzzedDataProvider& fuzzed_data_provider, MockedTxPool& tx_pool, const NodeContext& node, CChainState& chainstate) +void Finish(FuzzedDataProvider& fuzzed_data_provider, MockedTxPool& tx_pool, const NodeContext& node, Chainstate& chainstate) { WITH_LOCK(::cs_main, tx_pool.check(chainstate.CoinsTip(), chainstate.m_chain.Height() + 1)); { @@ -115,7 +115,7 @@ void Finish(FuzzedDataProvider& fuzzed_data_provider, MockedTxPool& tx_pool, con SyncWithValidationInterfaceQueue(); } -void MockTime(FuzzedDataProvider& fuzzed_data_provider, const CChainState& chainstate) +void MockTime(FuzzedDataProvider& fuzzed_data_provider, const Chainstate& chainstate) { const auto time = ConsumeTime(fuzzed_data_provider, chainstate.m_chain.Tip()->GetMedianTimePast() + 1, diff --git a/src/test/net_tests.cpp b/src/test/net_tests.cpp index 3c77fed9bd8f..8ea01278bf7f 100644 --- a/src/test/net_tests.cpp +++ b/src/test/net_tests.cpp @@ -850,7 +850,7 @@ BOOST_AUTO_TEST_CASE(initial_advertise_from_version_message) const int64_t time{0}; const CNetMsgMaker msg_maker{PROTOCOL_VERSION}; - // Force CChainState::IsInitialBlockDownload() to return false. + // Force Chainstate::IsInitialBlockDownload() to return false. // Otherwise PushAddress() isn't called by PeerManager::ProcessMessage(). TestChainState& chainstate = *static_cast(&m_node.chainman->ActiveChainstate()); diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp index 8a96cb0c9ba4..dede915123ed 100644 --- a/src/test/util/setup_common.cpp +++ b/src/test/util/setup_common.cpp @@ -504,7 +504,7 @@ void TestChainSetup::mineBlocks(int num_blocks) CBlock TestChainSetup::CreateAndProcessBlock( const std::vector& txns, const CScript& scriptPubKey, - CChainState* chainstate) + Chainstate* chainstate) { if (!chainstate) { chainstate = &Assert(m_node.chainman)->ActiveChainstate(); @@ -520,7 +520,7 @@ CBlock TestChainSetup::CreateAndProcessBlock( CBlock TestChainSetup::CreateBlock( const std::vector& txns, const CScript& scriptPubKey, - CChainState& chainstate) + Chainstate& chainstate) { const CChainParams& chainparams = Params(); CTxMemPool empty_pool; diff --git a/src/test/util/setup_common.h b/src/test/util/setup_common.h index deba315dac4b..b1de8402df98 100644 --- a/src/test/util/setup_common.h +++ b/src/test/util/setup_common.h @@ -31,7 +31,7 @@ namespace Consensus { struct Params; }; -class CChainState; +class Chainstate; /** This is connected to the logger. Can be used to redirect logs to any other log */ extern const std::function G_TEST_LOG_FUN; @@ -163,7 +163,7 @@ struct TestChainSetup : public TestingSetup */ CBlock CreateAndProcessBlock(const std::vector& txns, const CScript& scriptPubKey, - CChainState* chainstate = nullptr); + Chainstate* chainstate = nullptr); /** * Create a new block with just given transactions, coinbase paying to @@ -171,7 +171,7 @@ struct TestChainSetup : public TestingSetup */ CBlock CreateBlock(const std::vector& txns, const CScript& scriptPubKey, - CChainState& chainstate); + Chainstate& chainstate); //! Mine a series of new blocks on the active chain. void mineBlocks(int num_blocks); diff --git a/src/test/util/validation.h b/src/test/util/validation.h index b0bc717b6c22..cbe7745b81e4 100644 --- a/src/test/util/validation.h +++ b/src/test/util/validation.h @@ -9,7 +9,7 @@ class CValidationInterface; -struct TestChainState : public CChainState { +struct TestChainState : public Chainstate { /** Reset the ibd cache to its initial state */ void ResetIbd(); /** Toggle IsInitialBlockDownload from true to false */ diff --git a/src/test/validation_chainstate_tests.cpp b/src/test/validation_chainstate_tests.cpp index d1a3fda4539f..78d4f21d4c48 100644 --- a/src/test/validation_chainstate_tests.cpp +++ b/src/test/validation_chainstate_tests.cpp @@ -20,7 +20,7 @@ BOOST_FIXTURE_TEST_SUITE(validation_chainstate_tests, ChainTestingSetup) -//! Test resizing coins-related CChainState caches during runtime. +//! Test resizing coins-related Chainstate caches during runtime. //! BOOST_AUTO_TEST_CASE(validation_chainstate_resize_caches) { @@ -40,7 +40,7 @@ BOOST_AUTO_TEST_CASE(validation_chainstate_resize_caches) return outp; }; - CChainState& c1 = WITH_LOCK(cs_main, return manager.InitializeChainstate(&mempool, *m_node.evodb, m_node.chain_helper)); + Chainstate& c1 = WITH_LOCK(cs_main, return manager.InitializeChainstate(&mempool, *m_node.evodb, m_node.chain_helper)); c1.InitCoinsDB( /*cache_size_bytes=*/1 << 23, /*in_memory=*/true, /*should_wipe=*/false); WITH_LOCK(::cs_main, c1.InitCoinsCache(1 << 23)); @@ -108,8 +108,8 @@ BOOST_FIXTURE_TEST_CASE(chainstate_update_tip, TestChain100Setup) BOOST_CHECK_EQUAL(chainman.GetAll().size(), 2); - CChainState& background_cs{*[&] { - for (CChainState* cs : chainman.GetAll()) { + Chainstate& background_cs{*[&] { + for (Chainstate* cs : chainman.GetAll()) { if (cs != &chainman.ActiveChainstate()) { return cs; } diff --git a/src/test/validation_chainstatemanager_tests.cpp b/src/test/validation_chainstatemanager_tests.cpp index af77dc04dff3..bbf8cf6070f6 100644 --- a/src/test/validation_chainstatemanager_tests.cpp +++ b/src/test/validation_chainstatemanager_tests.cpp @@ -40,13 +40,13 @@ BOOST_AUTO_TEST_CASE(chainstatemanager) ChainstateManager& manager = *m_node.chainman; CTxMemPool& mempool = *m_node.mempool; CEvoDB& evodb = *m_node.evodb; - std::vector chainstates; + std::vector chainstates; BOOST_CHECK(!manager.SnapshotBlockhash().has_value()); // Create a legacy (IBD) chainstate. // - CChainState& c1 = WITH_LOCK(::cs_main, return manager.InitializeChainstate(&mempool, evodb, m_node.chain_helper)); + Chainstate& c1 = WITH_LOCK(::cs_main, return manager.InitializeChainstate(&mempool, evodb, m_node.chain_helper)); chainstates.push_back(&c1); c1.InitCoinsDB( /*cache_size_bytes=*/1 << 23, /*in_memory=*/true, /*should_wipe=*/false); @@ -78,7 +78,7 @@ BOOST_AUTO_TEST_CASE(chainstatemanager) // Create a snapshot-based chainstate. // const uint256 snapshot_blockhash = GetRandHash(); - CChainState& c2 = WITH_LOCK(::cs_main, return manager.InitializeChainstate( + Chainstate& c2 = WITH_LOCK(::cs_main, return manager.InitializeChainstate( &mempool, evodb, m_node.chain_helper, snapshot_blockhash) ); @@ -135,11 +135,11 @@ BOOST_AUTO_TEST_CASE(chainstatemanager_rebalance_caches) manager.m_total_coinsdb_cache = max_cache; manager.m_total_coinstip_cache = max_cache; - std::vector chainstates; + std::vector chainstates; // Create a legacy (IBD) chainstate. // - CChainState& c1 = WITH_LOCK(cs_main, return manager.InitializeChainstate(&mempool, evodb, m_node.chain_helper)); + Chainstate& c1 = WITH_LOCK(cs_main, return manager.InitializeChainstate(&mempool, evodb, m_node.chain_helper)); chainstates.push_back(&c1); c1.InitCoinsDB( /*cache_size_bytes=*/1 << 23, /*in_memory=*/true, /*should_wipe=*/false); @@ -157,7 +157,7 @@ BOOST_AUTO_TEST_CASE(chainstatemanager_rebalance_caches) // Create a snapshot-based chainstate. // - CChainState& c2 = WITH_LOCK(cs_main, return manager.InitializeChainstate(&mempool, evodb, m_node.chain_helper, GetRandHash())); + Chainstate& c2 = WITH_LOCK(cs_main, return manager.InitializeChainstate(&mempool, evodb, m_node.chain_helper, GetRandHash())); chainstates.push_back(&c2); c2.InitCoinsDB( /*cache_size_bytes=*/1 << 23, /*in_memory=*/true, /*should_wipe=*/false); @@ -274,7 +274,7 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_activate_snapshot, TestChain100Setup) LOCK(::cs_main); int chains_tested{0}; - for (CChainState* chainstate : chainman.GetAll()) { + for (Chainstate* chainstate : chainman.GetAll()) { BOOST_TEST_MESSAGE("Checking coins in " << chainstate->ToString()); CCoinsViewCache& coinscache = chainstate->CoinsTip(); @@ -307,7 +307,7 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_activate_snapshot, TestChain100Setup) size_t coins_in_background{0}; size_t coins_missing_from_background{0}; - for (CChainState* chainstate : chainman.GetAll()) { + for (Chainstate* chainstate : chainman.GetAll()) { BOOST_TEST_MESSAGE("Checking coins in " << chainstate->ToString()); CCoinsViewCache& coinscache = chainstate->CoinsTip(); bool is_background = chainstate != &chainman.ActiveChainstate(); @@ -350,7 +350,7 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_loadblockindex, TestChain100Setup) { ChainstateManager& chainman = *Assert(m_node.chainman); CTxMemPool& mempool = *m_node.mempool; - CChainState& cs1 = chainman.ActiveChainstate(); + Chainstate& cs1 = chainman.ActiveChainstate(); int num_indexes{0}; int num_assumed_valid{0}; @@ -362,7 +362,7 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_loadblockindex, TestChain100Setup) CBlockIndex* assumed_tip{chainman.ActiveChain().Tip()}; auto reload_all_block_indexes = [&]() { - for (CChainState* cs : chainman.GetAll()) { + for (Chainstate* cs : chainman.GetAll()) { LOCK(::cs_main); cs->UnloadBlockIndex(); BOOST_CHECK(cs->setBlockIndexCandidates.empty()); @@ -397,7 +397,7 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_loadblockindex, TestChain100Setup) BOOST_CHECK_EQUAL(expected_assumed_valid, num_assumed_valid); - CChainState& cs2 = WITH_LOCK(::cs_main, + Chainstate& cs2 = WITH_LOCK(::cs_main, return chainman.InitializeChainstate(&mempool, *m_node.evodb, m_node.chain_helper, GetRandHash())); reload_all_block_indexes(); diff --git a/src/test/validation_flush_tests.cpp b/src/test/validation_flush_tests.cpp index 960dd2997baf..99eb3f47ff32 100644 --- a/src/test/validation_flush_tests.cpp +++ b/src/test/validation_flush_tests.cpp @@ -14,11 +14,11 @@ BOOST_FIXTURE_TEST_SUITE(validation_flush_tests, TestingSetup) //! Test utilities for detecting when we need to flush the coins cache based //! on estimated memory usage. //! -//! @sa CChainState::GetCoinsCacheSizeState() +//! @sa Chainstate::GetCoinsCacheSizeState() //! BOOST_AUTO_TEST_CASE(getcoinscachesizestate) { - CChainState& chainstate{m_node.chainman->ActiveChainstate()}; + Chainstate& chainstate{m_node.chainman->ActiveChainstate()}; constexpr bool is_64_bit = sizeof(void*) == 8; diff --git a/src/txmempool.h b/src/txmempool.h index d2285f1bbdf3..6f1289ad69fe 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -41,7 +41,7 @@ class CBlockIndex; class CChain; -class CChainState; +class Chainstate; extern RecursiveMutex cs_main; // NOLINT(readability-redundant-declaration) // Forward declaration for CBLSLazyPublicKey: diff --git a/src/validation.cpp b/src/validation.cpp index 2a16f339b631..c3833703e167 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -146,7 +146,7 @@ CTransactionRef GetTransaction(const CBlockIndex* const block_index, const CTxMe } // namespace node using node::GetTransaction; -const CBlockIndex* CChainState::FindForkInGlobalIndex(const CBlockLocator& locator) const +const CBlockIndex* Chainstate::FindForkInGlobalIndex(const CBlockLocator& locator) const { AssertLockHeld(cs_main); @@ -290,7 +290,7 @@ bool CheckSequenceLocksAtTip(CBlockIndex* tip, return EvaluateSequenceLocks(index, {lock_points.height, lock_points.time}); } -bool GetUTXOCoin(CChainState& active_chainstate, const COutPoint& outpoint, Coin& coin) +bool GetUTXOCoin(Chainstate& active_chainstate, const COutPoint& outpoint, Coin& coin) { LOCK(cs_main); if (!active_chainstate.CoinsTip().GetCoin(outpoint, coin)) @@ -300,14 +300,14 @@ bool GetUTXOCoin(CChainState& active_chainstate, const COutPoint& outpoint, Coin return true; } -int GetUTXOHeight(CChainState& active_chainstate, const COutPoint& outpoint) +int GetUTXOHeight(Chainstate& active_chainstate, const COutPoint& outpoint) { // -1 means UTXO is yet unknown or already spent Coin coin; return GetUTXOCoin(active_chainstate, outpoint, coin) ? coin.nHeight : -1; } -int GetUTXOConfirmations(CChainState& active_chainstate, const COutPoint& outpoint) +int GetUTXOConfirmations(Chainstate& active_chainstate, const COutPoint& outpoint) { // -1 means UTXO is yet unknown or already spent LOCK(cs_main); @@ -368,7 +368,7 @@ static void LimitMempoolSize(CTxMemPool& pool, CCoinsViewCache& coins_cache, siz coins_cache.Uncache(removed); } -static bool IsCurrentForFeeEstimation(CChainState& active_chainstate) EXCLUSIVE_LOCKS_REQUIRED(cs_main) +static bool IsCurrentForFeeEstimation(Chainstate& active_chainstate) EXCLUSIVE_LOCKS_REQUIRED(cs_main) { AssertLockHeld(cs_main); if (active_chainstate.IsInitialBlockDownload()) @@ -381,7 +381,7 @@ static bool IsCurrentForFeeEstimation(CChainState& active_chainstate) EXCLUSIVE_ return true; } -void CChainState::MaybeUpdateMempoolForReorg( +void Chainstate::MaybeUpdateMempoolForReorg( DisconnectedBlockTransactions& disconnectpool, bool fAddToMempool) { @@ -528,7 +528,7 @@ namespace { class MemPoolAccept { public: - explicit MemPoolAccept(CTxMemPool& mempool, CChainState& active_chainstate) : + explicit MemPoolAccept(CTxMemPool& mempool, Chainstate& active_chainstate) : m_pool(mempool), m_view(&m_dummy), m_viewmempool(&active_chainstate.CoinsTip(), m_pool), @@ -737,7 +737,7 @@ class MemPoolAccept CCoinsViewCache m_view; CCoinsViewMemPool m_viewmempool; CCoinsView m_dummy; - CChainState& m_active_chainstate; + Chainstate& m_active_chainstate; CChainstateHelper& m_chain_helper; // The package limits in effect at the time of invocation. @@ -1401,7 +1401,7 @@ PackageMempoolAcceptResult MemPoolAccept::AcceptPackage(const Package& package, } // anon namespace -MempoolAcceptResult AcceptToMemoryPool(CChainState& active_chainstate, const CTransactionRef& tx, +MempoolAcceptResult AcceptToMemoryPool(Chainstate& active_chainstate, const CTransactionRef& tx, int64_t accept_time, bool bypass_limits, bool test_accept) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { @@ -1431,7 +1431,7 @@ MempoolAcceptResult AcceptToMemoryPool(CChainState& active_chainstate, const CTr return result; } -PackageMempoolAcceptResult ProcessNewPackage(CChainState& active_chainstate, CTxMemPool& pool, +PackageMempoolAcceptResult ProcessNewPackage(Chainstate& active_chainstate, CTxMemPool& pool, const Package& package, bool test_accept) { AssertLockHeld(cs_main); @@ -1653,7 +1653,7 @@ void CoinsViews::InitCache() m_cacheview = std::make_unique(&m_catcherview); } -CChainState::CChainState(CTxMemPool* mempool, +Chainstate::Chainstate(CTxMemPool* mempool, BlockManager& blockman, ChainstateManager& chainman, CEvoDB& evoDb, @@ -1667,7 +1667,7 @@ CChainState::CChainState(CTxMemPool* mempool, m_chainman(chainman), m_from_snapshot_blockhash(from_snapshot_blockhash) {} -void CChainState::InitCoinsDB( +void Chainstate::InitCoinsDB( size_t cache_size_bytes, bool in_memory, bool should_wipe, @@ -1681,7 +1681,7 @@ void CChainState::InitCoinsDB( leveldb_name, cache_size_bytes, in_memory, should_wipe); } -void CChainState::InitCoinsCache(size_t cache_size_bytes) +void Chainstate::InitCoinsCache(size_t cache_size_bytes) { AssertLockHeld(::cs_main); assert(m_coins_views != nullptr); @@ -1691,10 +1691,10 @@ void CChainState::InitCoinsCache(size_t cache_size_bytes) // Note that though this is marked const, we may end up modifying `m_cached_finished_ibd`, which // is a performance-related implementation detail. This function must be marked -// `const` so that `CValidationInterface` clients (which are given a `const CChainState*`) +// `const` so that `CValidationInterface` clients (which are given a `const Chainstate*`) // can call it. // -bool CChainState::IsInitialBlockDownload() const +bool Chainstate::IsInitialBlockDownload() const { // Optimization: pre-test latch before taking the lock. if (m_cached_finished_ibd.load(std::memory_order_relaxed)) @@ -1736,7 +1736,7 @@ static void AlertNotify(const std::string& strMessage) #endif } -void CChainState::CheckForkWarningConditions() +void Chainstate::CheckForkWarningConditions() { AssertLockHeld(cs_main); @@ -1755,7 +1755,7 @@ void CChainState::CheckForkWarningConditions() } // Called both upon regular invalid block discovery *and* InvalidateBlock -void CChainState::InvalidChainFound(CBlockIndex* pindexNew) +void Chainstate::InvalidChainFound(CBlockIndex* pindexNew) { AssertLockHeld(cs_main); @@ -1779,7 +1779,7 @@ void CChainState::InvalidChainFound(CBlockIndex* pindexNew) CheckForkWarningConditions(); } -void CChainState::ConflictingChainFound(CBlockIndex* pindexNew) +void Chainstate::ConflictingChainFound(CBlockIndex* pindexNew) { AssertLockHeld(cs_main); @@ -1798,7 +1798,7 @@ void CChainState::ConflictingChainFound(CBlockIndex* pindexNew) // Same as InvalidChainFound, above, except not called directly from InvalidateBlock, // which does its own setBlockIndexCandidates manageent. -void CChainState::InvalidBlockFound(CBlockIndex *pindex, const BlockValidationState &state) +void Chainstate::InvalidBlockFound(CBlockIndex *pindex, const BlockValidationState &state) { AssertLockHeld(cs_main); @@ -2001,7 +2001,7 @@ int ApplyTxInUndo(Coin&& undo, CCoinsViewCache& view, const COutPoint& out) /** Undo the effects of this block (with given index) on the UTXO set represented by coins. * When FAILED is returned, view is left in an indeterminate state. */ -DisconnectResult CChainState::DisconnectBlock(const CBlock& block, const CBlockIndex* pindex, CCoinsViewCache& view) +DisconnectResult Chainstate::DisconnectBlock(const CBlock& block, const CBlockIndex* pindex, CCoinsViewCache& view) { AssertLockHeld(cs_main); assert(m_chain_helper); @@ -2280,7 +2280,7 @@ static int64_t nBlocksTotal = 0; /** Apply the effects of this block (with given index) on the UTXO set represented by coins. * Validity checks that depend on the UTXO set are also done; ConnectBlock() * can fail if those validity checks fail (among other reasons). */ -bool CChainState::ConnectBlock(const CBlock& block, BlockValidationState& state, CBlockIndex* pindex, +bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state, CBlockIndex* pindex, CCoinsViewCache& view, bool fJustCheck) { int64_t nTimeStart = GetTimeMicros(); @@ -2734,7 +2734,7 @@ bool CChainState::ConnectBlock(const CBlock& block, BlockValidationState& state, return true; } -CoinsCacheSizeState CChainState::GetCoinsCacheSizeState() +CoinsCacheSizeState Chainstate::GetCoinsCacheSizeState() { AssertLockHeld(::cs_main); return this->GetCoinsCacheSizeState( @@ -2742,7 +2742,7 @@ CoinsCacheSizeState CChainState::GetCoinsCacheSizeState() gArgs.GetIntArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000); } -CoinsCacheSizeState CChainState::GetCoinsCacheSizeState( +CoinsCacheSizeState Chainstate::GetCoinsCacheSizeState( size_t max_coins_cache_size_bytes, size_t max_mempool_size_bytes) { @@ -2766,7 +2766,7 @@ CoinsCacheSizeState CChainState::GetCoinsCacheSizeState( return CoinsCacheSizeState::OK; } -bool CChainState::FlushStateToDisk( +bool Chainstate::FlushStateToDisk( BlockValidationState &state, FlushStateMode mode, int nManualPruneHeight) @@ -2918,7 +2918,7 @@ bool CChainState::FlushStateToDisk( return true; } -void CChainState::ForceFlushStateToDisk() +void Chainstate::ForceFlushStateToDisk() { BlockValidationState state; if (!this->FlushStateToDisk(state, FlushStateMode::ALWAYS)) { @@ -2926,7 +2926,7 @@ void CChainState::ForceFlushStateToDisk() } } -void CChainState::PruneAndFlush() +void Chainstate::PruneAndFlush() { BlockValidationState state; m_blockman.m_check_for_pruning = true; @@ -2975,7 +2975,7 @@ static void UpdateTipLog( !warning_messages.empty() ? strprintf(" warning='%s'", warning_messages) : ""); } -void CChainState::UpdateTip(const CBlockIndex* pindexNew) +void Chainstate::UpdateTip(const CBlockIndex* pindexNew) { AssertLockHeld(::cs_main); const auto& coins_tip = this->CoinsTip(); @@ -3032,7 +3032,7 @@ void CChainState::UpdateTip(const CBlockIndex* pindexNew) * disconnectpool (note that the caller is responsible for mempool consistency * in any case). */ -bool CChainState::DisconnectTip(BlockValidationState& state, DisconnectedBlockTransactions* disconnectpool) +bool Chainstate::DisconnectTip(BlockValidationState& state, DisconnectedBlockTransactions* disconnectpool) { AssertLockHeld(cs_main); if (m_mempool) AssertLockHeld(m_mempool->cs); @@ -3116,7 +3116,7 @@ bool CChainState::DisconnectTip(BlockValidationState& state, DisconnectedBlockTr static int64_t nTimeConnectTotal = 0; static int64_t nTimeFlush = 0; -static int64_t nTimeChainState = 0; +static int64_t nTimeChainstate = 0; static int64_t nTimePostConnect = 0; struct PerBlockConnectTrace { @@ -3165,7 +3165,7 @@ class ConnectTrace { * * The block is added to connectTrace if connection succeeds. */ -bool CChainState::ConnectTip(BlockValidationState& state, CBlockIndex* pindexNew, const std::shared_ptr& pblock, ConnectTrace& connectTrace, DisconnectedBlockTransactions& disconnectpool) +bool Chainstate::ConnectTip(BlockValidationState& state, CBlockIndex* pindexNew, const std::shared_ptr& pblock, ConnectTrace& connectTrace, DisconnectedBlockTransactions& disconnectpool) { AssertLockHeld(cs_main); if (m_mempool) AssertLockHeld(m_mempool->cs); @@ -3215,8 +3215,8 @@ bool CChainState::ConnectTip(BlockValidationState& state, CBlockIndex* pindexNew if (!FlushStateToDisk(state, FlushStateMode::IF_NEEDED)) { return false; } - int64_t nTime5 = GetTimeMicros(); nTimeChainState += nTime5 - nTime4; - LogPrint(BCLog::BENCHMARK, " - Writing chainstate: %.2fms [%.2fs (%.2fms/blk)]\n", (nTime5 - nTime4) * MILLI, nTimeChainState * MICRO, nTimeChainState * MILLI / nBlocksTotal); + int64_t nTime5 = GetTimeMicros(); nTimeChainstate += nTime5 - nTime4; + LogPrint(BCLog::BENCHMARK, " - Writing chainstate: %.2fms [%.2fs (%.2fms/blk)]\n", (nTime5 - nTime4) * MILLI, nTimeChainstate * MICRO, nTimeChainstate * MILLI / nBlocksTotal); // Remove conflicting transactions from the mempool.; if (m_mempool) { m_mempool->removeForBlock(blockConnecting.vtx, pindexNew->nHeight); @@ -3250,7 +3250,7 @@ bool CChainState::ConnectTip(BlockValidationState& state, CBlockIndex* pindexNew * Return the tip of the chain with the most work in it, that isn't * known to be invalid (it's however far from certain to be valid). */ -CBlockIndex* CChainState::FindMostWorkChain() +CBlockIndex* Chainstate::FindMostWorkChain() { AssertLockHeld(::cs_main); do { @@ -3313,7 +3313,7 @@ CBlockIndex* CChainState::FindMostWorkChain() } /** Delete all entries in setBlockIndexCandidates that are worse than the current tip. */ -void CChainState::PruneBlockIndexCandidates() { +void Chainstate::PruneBlockIndexCandidates() { // Note that we can't delete the current block itself, as we may need to return to it later in case a // reorganization to a better block fails. std::set::iterator it = setBlockIndexCandidates.begin(); @@ -3330,7 +3330,7 @@ void CChainState::PruneBlockIndexCandidates() { * * @returns true unless a system error occurred */ -bool CChainState::ActivateBestChainStep(BlockValidationState& state, CBlockIndex* pindexMostWork, const std::shared_ptr& pblock, bool& fInvalidFound, ConnectTrace& connectTrace) +bool Chainstate::ActivateBestChainStep(BlockValidationState& state, CBlockIndex* pindexMostWork, const std::shared_ptr& pblock, bool& fInvalidFound, ConnectTrace& connectTrace) { AssertLockHeld(cs_main); if (m_mempool) AssertLockHeld(m_mempool->cs); @@ -3422,7 +3422,7 @@ static SynchronizationState GetSynchronizationState(bool init) return SynchronizationState::INIT_DOWNLOAD; } -static bool NotifyHeaderTip(CChainState& chainstate) LOCKS_EXCLUDED(cs_main) { +static bool NotifyHeaderTip(Chainstate& chainstate) LOCKS_EXCLUDED(cs_main) { bool fNotify = false; bool fInitialBlockDownload = false; static CBlockIndex* pindexHeaderOld = nullptr; @@ -3453,7 +3453,7 @@ static void LimitValidationInterfaceQueue() LOCKS_EXCLUDED(cs_main) { } } -bool CChainState::ActivateBestChain(BlockValidationState& state, std::shared_ptr pblock) +bool Chainstate::ActivateBestChain(BlockValidationState& state, std::shared_ptr pblock) { AssertLockNotHeld(m_chainstate_mutex); @@ -3562,7 +3562,7 @@ bool CChainState::ActivateBestChain(BlockValidationState& state, std::shared_ptr return true; } -bool CChainState::PreciousBlock(BlockValidationState& state, CBlockIndex* pindex) +bool Chainstate::PreciousBlock(BlockValidationState& state, CBlockIndex* pindex) { AssertLockNotHeld(m_chainstate_mutex); AssertLockNotHeld(::cs_main); @@ -3593,7 +3593,7 @@ bool CChainState::PreciousBlock(BlockValidationState& state, CBlockIndex* pindex return ActivateBestChain(state, std::shared_ptr()); } -bool CChainState::InvalidateBlock(BlockValidationState& state, CBlockIndex* pindex) +bool Chainstate::InvalidateBlock(BlockValidationState& state, CBlockIndex* pindex) { AssertLockNotHeld(m_chainstate_mutex); AssertLockNotHeld(::cs_main); @@ -3749,7 +3749,7 @@ bool CChainState::InvalidateBlock(BlockValidationState& state, CBlockIndex* pind return true; } -void CChainState::EnforceBlock(BlockValidationState& state, const CBlockIndex *pindex) +void Chainstate::EnforceBlock(BlockValidationState& state, const CBlockIndex *pindex) { AssertLockNotHeld(m_chainstate_mutex); AssertLockNotHeld(::cs_main); @@ -3766,11 +3766,11 @@ void CChainState::EnforceBlock(BlockValidationState& state, const CBlockIndex *p continue; } if (!MarkConflictingBlock(state, jt->second)) { - LogPrintf("CChainState::%s -- MarkConflictingBlock failed: %s\n", __func__, state.ToString()); + LogPrintf("Chainstate::%s -- MarkConflictingBlock failed: %s\n", __func__, state.ToString()); // This should not have happened and we are in a state were it's not safe to continue anymore assert(false); } - LogPrintf("CChainState::%s -- marked block %s as conflicting\n", + LogPrintf("Chainstate::%s -- marked block %s as conflicting\n", __func__, jt->second->GetBlockHash().ToString()); } pindex_walk = pindex_walk->pprev; @@ -3781,7 +3781,7 @@ void CChainState::EnforceBlock(BlockValidationState& state, const CBlockIndex *p } } -bool CChainState::MarkConflictingBlock(BlockValidationState& state, CBlockIndex *pindex) +bool Chainstate::MarkConflictingBlock(BlockValidationState& state, CBlockIndex *pindex) { AssertLockHeld(cs_main); @@ -3851,7 +3851,7 @@ bool CChainState::MarkConflictingBlock(BlockValidationState& state, CBlockIndex return true; } -void CChainState::ResetBlockFailureFlags(CBlockIndex *pindex, bool ignore_chainlocks) { +void Chainstate::ResetBlockFailureFlags(CBlockIndex *pindex, bool ignore_chainlocks) { AssertLockHeld(cs_main); if (!pindex) { @@ -3921,7 +3921,7 @@ void CChainState::ResetBlockFailureFlags(CBlockIndex *pindex, bool ignore_chainl } /** Mark a block as having its data received and checked (up to BLOCK_VALID_TRANSACTIONS). */ -void CChainState::ReceivedBlockTransactions(const CBlock& block, CBlockIndex* pindexNew, const FlatFilePos& pos) +void Chainstate::ReceivedBlockTransactions(const CBlock& block, CBlockIndex* pindexNew, const FlatFilePos& pos) { AssertLockHeld(cs_main); pindexNew->nTx = block.vtx.size(); @@ -4356,7 +4356,7 @@ bool ChainstateManager::ProcessNewBlockHeaders(const std::vector& } /** Store block on disk. If dbp is non-nullptr, the file is known to already reside on disk */ -bool CChainState::AcceptBlock(const std::shared_ptr& pblock, BlockValidationState& state, CBlockIndex** ppindex, bool fRequested, const FlatFilePos* dbp, bool* fNewBlock, const uint256* known_hash) +bool Chainstate::AcceptBlock(const std::shared_ptr& pblock, BlockValidationState& state, CBlockIndex** ppindex, bool fRequested, const FlatFilePos* dbp, bool* fNewBlock, const uint256* known_hash) { auto start = Now(); @@ -4494,7 +4494,7 @@ bool ChainstateManager::ProcessNewBlock(const std::shared_ptr& blo MempoolAcceptResult ChainstateManager::ProcessTransaction(const CTransactionRef& tx, bool test_accept, bool bypass_limits) { - CChainState& active_chainstate = ActiveChainstate(); + Chainstate& active_chainstate = ActiveChainstate(); if (!active_chainstate.GetMempool()) { TxValidationState state; state.Invalid(TxValidationResult::TX_NO_MEMPOOL, "no-mempool"); @@ -4509,7 +4509,7 @@ bool TestBlockValidity(BlockValidationState& state, const chainlock::Chainlocks& chainlocks, CEvoDB& evoDb, const CChainParams& chainparams, - CChainState& chainstate, + Chainstate& chainstate, const CBlock& block, CBlockIndex* pindexPrev, bool fCheckPOW, @@ -4561,7 +4561,7 @@ bool TestBlockValidity(BlockValidationState& state, } /* This function is called from the RPC code for pruneblockchain */ -void PruneBlockFilesManual(CChainState& active_chainstate, int nManualPruneHeight) +void PruneBlockFilesManual(Chainstate& active_chainstate, int nManualPruneHeight) { BlockValidationState state; if (!active_chainstate.FlushStateToDisk(state, FlushStateMode::NONE, nManualPruneHeight)) { @@ -4569,7 +4569,7 @@ void PruneBlockFilesManual(CChainState& active_chainstate, int nManualPruneHeigh } } -void CChainState::LoadMempool(const ArgsManager& args) +void Chainstate::LoadMempool(const ArgsManager& args) { if (!m_mempool) return; if (args.GetBoolArg("-persistmempool", DEFAULT_PERSIST_MEMPOOL)) { @@ -4578,7 +4578,7 @@ void CChainState::LoadMempool(const ArgsManager& args) m_mempool->SetIsLoaded(!ShutdownRequested()); } -bool CChainState::LoadChainTip() +bool Chainstate::LoadChainTip() { AssertLockHeld(cs_main); const CCoinsViewCache& coins_cache = CoinsTip(); @@ -4617,7 +4617,7 @@ CVerifyDB::~CVerifyDB() } bool CVerifyDB::VerifyDB( - CChainState& chainstate, + Chainstate& chainstate, const Consensus::Params& consensus_params, CCoinsView& coinsview, CEvoDB& evoDb, @@ -4742,7 +4742,7 @@ bool CVerifyDB::VerifyDB( } /** Apply the effects of a block on the utxo cache, ignoring that it may already have been applied. */ -bool CChainState::RollforwardBlock(const CBlockIndex* pindex, CCoinsViewCache& inputs) +bool Chainstate::RollforwardBlock(const CBlockIndex* pindex, CCoinsViewCache& inputs) { AssertLockHeld(cs_main); @@ -4849,7 +4849,7 @@ bool CChainState::RollforwardBlock(const CBlockIndex* pindex, CCoinsViewCache& i return true; } -bool CChainState::ReplayBlocks() +bool Chainstate::ReplayBlocks() { LOCK(cs_main); @@ -4926,7 +4926,7 @@ bool CChainState::ReplayBlocks() return true; } -void CChainState::UnloadBlockIndex() +void Chainstate::UnloadBlockIndex() { AssertLockHeld(::cs_main); nBlockSequenceId = 1; @@ -4995,7 +4995,7 @@ bool ChainstateManager::LoadBlockIndex() // detecting "holistically" whether the block index under consideration // relied on an assumed-valid ancestor, but this proved to be too slow to // be practical. - for (CChainState* chainstate : GetAll()) { + for (Chainstate* chainstate : GetAll()) { if (chainstate->reliesOnAssumedValid() || pindex->nHeight < first_assumed_valid_height) { chainstate->setBlockIndexCandidates.insert(pindex); @@ -5041,7 +5041,7 @@ void ChainstateManager::InitAdditionalIndexes() } -bool CChainState::AddGenesisBlock(const CBlock& block, BlockValidationState& state) +bool Chainstate::AddGenesisBlock(const CBlock& block, BlockValidationState& state) { FlatFilePos blockPos{m_blockman.SaveBlockToDisk(block, 0, m_chain, nullptr)}; if (blockPos.IsNull()) { @@ -5052,7 +5052,7 @@ bool CChainState::AddGenesisBlock(const CBlock& block, BlockValidationState& sta return true; } -bool CChainState::LoadGenesisBlock() +bool Chainstate::LoadGenesisBlock() { LOCK(cs_main); @@ -5085,7 +5085,7 @@ bool CChainState::LoadGenesisBlock() return true; } -void CChainState::LoadExternalBlockFile( +void Chainstate::LoadExternalBlockFile( FILE* fileIn, FlatFilePos* dbp, std::multimap* blocks_with_unknown_parent) @@ -5253,7 +5253,7 @@ void CChainState::LoadExternalBlockFile( LogPrintf("Loaded %i blocks from external file in %dms\n", nLoaded, Ticks(SteadyClock::now() - start)); } -void CChainState::CheckBlockIndex() +void Chainstate::CheckBlockIndex() { if (!fCheckBlockIndex) { return; @@ -5482,7 +5482,7 @@ void CChainState::CheckBlockIndex() assert(nNodes == forward.size()); } -std::string CChainState::ToString() +std::string Chainstate::ToString() { AssertLockHeld(::cs_main); CBlockIndex* tip = m_chain.Tip(); @@ -5491,7 +5491,7 @@ std::string CChainState::ToString() tip ? tip->nHeight : -1, tip ? tip->GetBlockHash().ToString() : "null"); } -bool CChainState::ResizeCoinsCaches(size_t coinstip_size, size_t coinsdb_size) +bool Chainstate::ResizeCoinsCaches(size_t coinstip_size, size_t coinsdb_size) { AssertLockHeld(::cs_main); if (coinstip_size == m_coinstip_cache_size_bytes && @@ -5524,7 +5524,7 @@ bool CChainState::ResizeCoinsCaches(size_t coinstip_size, size_t coinsdb_size) static const uint64_t MEMPOOL_DUMP_VERSION = 1; -bool LoadMempool(CTxMemPool& pool, CChainState& active_chainstate, FopenFn mockable_fopen_function) +bool LoadMempool(CTxMemPool& pool, Chainstate& active_chainstate, FopenFn mockable_fopen_function) { int64_t nExpiryTimeout = gArgs.GetIntArg("-mempoolexpiry", DEFAULT_MEMPOOL_EXPIRY) * 60 * 60; FILE* filestr{mockable_fopen_function(gArgs.GetDataDirNet() / "mempool.dat", "rb")}; @@ -5708,10 +5708,10 @@ std::optional ChainstateManager::SnapshotBlockhash() const { return std::nullopt; } -std::vector ChainstateManager::GetAll() +std::vector ChainstateManager::GetAll() { LOCK(::cs_main); - std::vector out; + std::vector out; if (!IsSnapshotValidated() && m_ibd_chainstate) { out.push_back(m_ibd_chainstate.get()); @@ -5724,21 +5724,21 @@ std::vector ChainstateManager::GetAll() return out; } -CChainState& ChainstateManager::InitializeChainstate(CTxMemPool* mempool, +Chainstate& ChainstateManager::InitializeChainstate(CTxMemPool* mempool, CEvoDB& evoDb, const std::unique_ptr& chain_helper, const std::optional& snapshot_blockhash) { AssertLockHeld(::cs_main); bool is_snapshot = snapshot_blockhash.has_value(); - std::unique_ptr& to_modify = + std::unique_ptr& to_modify = is_snapshot ? m_snapshot_chainstate : m_ibd_chainstate; if (to_modify) { throw std::logic_error("should not be overwriting a chainstate"); } - to_modify.reset(new CChainState(mempool, m_blockman, *this, evoDb, chain_helper, snapshot_blockhash)); + to_modify.reset(new Chainstate(mempool, m_blockman, *this, evoDb, chain_helper, snapshot_blockhash)); // Snapshot chainstates and initial IBD chaintates always become active. if (is_snapshot || (!is_snapshot && !m_active_chainstate)) { @@ -5807,7 +5807,7 @@ bool ChainstateManager::ActivateSnapshot( static_cast(current_coinsdb_cache_size * IBD_CACHE_PERC)); } - auto snapshot_chainstate = WITH_LOCK(::cs_main, return std::make_unique( + auto snapshot_chainstate = WITH_LOCK(::cs_main, return std::make_unique( /*mempool=*/ nullptr, m_blockman, *this, this->ActiveChainstate().m_evoDb, this->ActiveChainstate().m_chain_helper, @@ -5862,7 +5862,7 @@ static void FlushSnapshotToDisk(CCoinsViewCache& coins_cache, bool snapshot_load } bool ChainstateManager::PopulateAndValidateSnapshot( - CChainState& snapshot_chainstate, + Chainstate& snapshot_chainstate, AutoFile& coins_file, const SnapshotMetadata& metadata) { @@ -5956,7 +5956,7 @@ bool ChainstateManager::PopulateAndValidateSnapshot( // Important that we set this. This and the coins_cache accesses above are // sort of a layer violation, but either we reach into the innards of - // CCoinsViewCache here or we have to invert some of the CChainState to + // CCoinsViewCache here or we have to invert some of the Chainstate to // embed them in a snapshot-activation-specific CCoinsViewCache bulk load // method. coins_cache.SetBestBlock(base_blockhash); @@ -6052,7 +6052,7 @@ bool ChainstateManager::PopulateAndValidateSnapshot( return true; } -CChainState& ChainstateManager::ActiveChainstate() const +Chainstate& ChainstateManager::ActiveChainstate() const { LOCK(::cs_main); assert(m_active_chainstate); diff --git a/src/validation.h b/src/validation.h index 666773994265..84ee9679f830 100644 --- a/src/validation.h +++ b/src/validation.h @@ -46,7 +46,7 @@ #include #include -class CChainState; +class Chainstate; class CBlockTreeDB; class CChainParams; class CEvoDB; @@ -161,7 +161,7 @@ bool AbortNode(BlockValidationState& state, const std::string& strMessage, const double GuessVerificationProgress(const ChainTxData& data, const CBlockIndex* pindex); /** Prune block files up to a given height */ -void PruneBlockFilesManual(CChainState& active_chainstate, int nManualPruneHeight); +void PruneBlockFilesManual(Chainstate& active_chainstate, int nManualPruneHeight); /** * Validation result for a single transaction mempool acceptance. @@ -262,7 +262,7 @@ struct PackageMempoolAcceptResult * * @returns a MempoolAcceptResult indicating whether the transaction was accepted/rejected with reason. */ -MempoolAcceptResult AcceptToMemoryPool(CChainState& active_chainstate, const CTransactionRef& tx, +MempoolAcceptResult AcceptToMemoryPool(Chainstate& active_chainstate, const CTransactionRef& tx, int64_t accept_time, bool bypass_limits, bool test_accept) EXCLUSIVE_LOCKS_REQUIRED(cs_main); @@ -274,13 +274,13 @@ MempoolAcceptResult AcceptToMemoryPool(CChainState& active_chainstate, const CTr * If a transaction fails, validation will exit early and some results may be missing. It is also * possible for the package to be partially submitted. */ -PackageMempoolAcceptResult ProcessNewPackage(CChainState& active_chainstate, CTxMemPool& pool, +PackageMempoolAcceptResult ProcessNewPackage(Chainstate& active_chainstate, CTxMemPool& pool, const Package& txns, bool test_accept) EXCLUSIVE_LOCKS_REQUIRED(cs_main); -bool GetUTXOCoin(CChainState& active_chainstate, const COutPoint& outpoint, Coin& coin); -int GetUTXOHeight(CChainState& active_chainstate, const COutPoint& outpoint); -int GetUTXOConfirmations(CChainState& active_chainstate, const COutPoint& outpoint); +bool GetUTXOCoin(Chainstate& active_chainstate, const COutPoint& outpoint, Coin& coin); +int GetUTXOHeight(Chainstate& active_chainstate, const COutPoint& outpoint); +int GetUTXOConfirmations(Chainstate& active_chainstate, const COutPoint& outpoint); /* Mempool validation helper functions */ @@ -378,7 +378,7 @@ bool TestBlockValidity(BlockValidationState& state, const chainlock::Chainlocks& chainlocks, CEvoDB& evoDb, const CChainParams& chainparams, - CChainState& chainstate, + Chainstate& chainstate, const CBlock& block, CBlockIndex* pindexPrev, bool fCheckPOW = true, @@ -390,7 +390,7 @@ class CVerifyDB { CVerifyDB(); ~CVerifyDB(); bool VerifyDB( - CChainState& chainstate, + Chainstate& chainstate, const Consensus::Params& consensus_params, CCoinsView& coinsview, CEvoDB& evoDb, @@ -406,7 +406,7 @@ enum DisconnectResult { class ConnectTrace; -/** @see CChainState::FlushStateToDisk */ +/** @see Chainstate::FlushStateToDisk */ enum class FlushStateMode { NONE, IF_NEEDED, @@ -459,7 +459,7 @@ enum class CoinsCacheSizeState }; /** - * CChainState stores and provides an API to update our local knowledge of the + * Chainstate stores and provides an API to update our local knowledge of the * current best chain. * * Eventually, the API here is targeted at being exposed externally as a @@ -472,7 +472,7 @@ enum class CoinsCacheSizeState * whereas block information and metadata independent of the current tip is * kept in `BlockManager`. */ -class CChainState +class Chainstate { protected: /** @@ -487,8 +487,8 @@ class CChainState arith_uint256 nLastPreciousChainwork = 0; /** - * The ChainState Mutex - * A lock that must be held when modifying this ChainState - held in ActivateBestChain() and + * The Chainstate Mutex + * A lock that must be held when modifying this Chainstate - held in ActivateBestChain() and * InvalidateBlock() */ Mutex m_chainstate_mutex; @@ -514,7 +514,7 @@ class CChainState public: //! Reference to a BlockManager instance which itself is shared across all - //! CChainState instances. + //! Chainstate instances. node::BlockManager& m_blockman; /** Chain parameters for this chainstate */ @@ -526,7 +526,7 @@ class CChainState //! chainstate within deeply nested method calls. ChainstateManager& m_chainman; - explicit CChainState(CTxMemPool* mempool, + explicit Chainstate(CTxMemPool* mempool, node::BlockManager& blockman, ChainstateManager& chainman, CEvoDB& evoDb, @@ -870,7 +870,7 @@ class ChainstateManager //! This is especially important when, e.g., calling ActivateBestChain() //! on all chainstates because we are not able to hold ::cs_main going into //! that call. - std::unique_ptr m_ibd_chainstate GUARDED_BY(::cs_main); + std::unique_ptr m_ibd_chainstate GUARDED_BY(::cs_main); //! A chainstate initialized on the basis of a UTXO snapshot. If this is //! non-null, it is always our active chainstate. @@ -881,7 +881,7 @@ class ChainstateManager //! This is especially important when, e.g., calling ActivateBestChain() //! on all chainstates because we are not able to hold ::cs_main going into //! that call. - std::unique_ptr m_snapshot_chainstate GUARDED_BY(::cs_main); + std::unique_ptr m_snapshot_chainstate GUARDED_BY(::cs_main); //! Points to either the ibd or snapshot chainstate; indicates our //! most-work chain. @@ -892,7 +892,7 @@ class ChainstateManager //! This is especially important when, e.g., calling ActivateBestChain() //! on all chainstates because we are not able to hold ::cs_main going into //! that call. - CChainState* m_active_chainstate GUARDED_BY(::cs_main) {nullptr}; + Chainstate* m_active_chainstate GUARDED_BY(::cs_main) {nullptr}; //! If true, the assumed-valid chainstate has been fully validated //! by the background validation chainstate. @@ -904,7 +904,7 @@ class ChainstateManager //! Internal helper for ActivateSnapshot(). [[nodiscard]] bool PopulateAndValidateSnapshot( - CChainState& snapshot_chainstate, + Chainstate& snapshot_chainstate, AutoFile& coins_file, const node::SnapshotMetadata& metadata); @@ -917,7 +917,7 @@ class ChainstateManager BlockValidationState& state, CBlockIndex** ppindex, const uint256& hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main); - friend CChainState; + friend Chainstate; public: explicit ChainstateManager(const CChainParams& chainparams) : m_chainparams{chainparams}, m_blockman{{chainparams}} { } @@ -969,20 +969,20 @@ class ChainstateManager // constructor //! @param[in] snapshot_blockhash If given, signify that this chainstate //! is based on a snapshot. - CChainState& InitializeChainstate(CTxMemPool* mempool, + Chainstate& InitializeChainstate(CTxMemPool* mempool, CEvoDB& evoDb, const std::unique_ptr& chain_helper, const std::optional& snapshot_blockhash = std::nullopt) LIFETIMEBOUND EXCLUSIVE_LOCKS_REQUIRED(::cs_main); //! Get all chainstates currently being used. - std::vector GetAll(); + std::vector GetAll(); //! Construct and activate a Chainstate on the basis of UTXO snapshot data. //! //! Steps: //! - //! - Initialize an unused CChainState. + //! - Initialize an unused Chainstate. //! - Load its `CoinsViews` contents from `coins_file`. //! - Verify that the hash of the resulting coinsdb matches the expected hash //! per assumeutxo chain parameters. @@ -995,7 +995,7 @@ class ChainstateManager AutoFile& coins_file, const node::SnapshotMetadata& metadata, bool in_memory); //! The most-work chain. - CChainState& ActiveChainstate() const; + Chainstate& ActiveChainstate() const; CChain& ActiveChain() const { return ActiveChainstate().m_chain; } int ActiveHeight() const { return ActiveChain().Height(); } CBlockIndex* ActiveTip() const { return ActiveChain().Tip(); } @@ -1115,7 +1115,7 @@ using FopenFn = std::function; bool DumpMempool(const CTxMemPool& pool, FopenFn mockable_fopen_function = fsbridge::fopen, bool skip_file_commit = false); /** Load the mempool from disk. */ -bool LoadMempool(CTxMemPool& pool, CChainState& active_chainstate, FopenFn mockable_fopen_function = fsbridge::fopen); +bool LoadMempool(CTxMemPool& pool, Chainstate& active_chainstate, FopenFn mockable_fopen_function = fsbridge::fopen); /** * Return the expected assumeutxo value for a given height, if one exists. diff --git a/test/sanitizer_suppressions/tsan b/test/sanitizer_suppressions/tsan index 9d9012895b6e..30c00874cec3 100644 --- a/test/sanitizer_suppressions/tsan +++ b/test/sanitizer_suppressions/tsan @@ -17,11 +17,11 @@ race:bitcoin-qt # deadlock (TODO fix) # To reproduce, see: # https://github.com/bitcoin/bitcoin/issues/19303#issuecomment-1514926359 -deadlock:CChainState::ConnectTip +deadlock:Chainstate::ConnectTip deadlock:wallet_tests::CreateWallet # deadlock false positive (see: https://github.com/dashpay/dash/pull/4563) -deadlock:CChainState::ConnectTip +deadlock:Chainstate::ConnectTip # Intentional deadlock in tests deadlock:sync_tests::potential_deadlock_detected From ffcf4f62c90aadda100df3bc48d6afeec1eb8c08 Mon Sep 17 00:00:00 2001 From: fanquake Date: Wed, 29 Nov 2023 10:23:46 +0000 Subject: [PATCH 2/4] Merge bitcoin/bitcoin#28966: test: Add missing CBlockPolicyEstimator::processBlockTx suppression fa9dc92c5362431852a9cfe152c6fdb819710eb4 test: Add missing CBlockPolicyEstimator::processBlockTx suppression (MarcoFalke) Pull request description: Fixes https://github.com/bitcoin/bitcoin/pull/28865#discussion_r1408954537 ``` # FUZZ=policy_estimator UBSAN_OPTIONS="suppressions=/root/fuzz_dir/scratch/fuzz_gen/code/test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1:report_error_type=1" ./src/test/fuzz/fuzz /tmp/crash-154b42214e70781a9c1ad72d3f2693913dcf8c06 ... policy/fees.cpp:632:27: runtime error: implicit conversion from type 'unsigned int' of value 4294574080 (32-bit, unsigned) to type 'int' changed the value to -393216 (32-bit, signed) #0 0x55cbbe10daee in CBlockPolicyEstimator::processBlockTx(unsigned int, CTxMemPoolEntry const*) src/policy/fees.cpp:632:27 #1 0x55cbbe10e361 in CBlockPolicyEstimator::processBlock(unsigned int, std::vector>&) src/policy/fees.cpp:680:13 #2 0x55cbbd84af48 in policy_estimator_fuzz_target(Span)::$_1::operator()() const src/test/fuzz/policy_estimator.cpp:69:40 #3 0x55cbbd84af48 in unsigned long CallOneOf)::$_0, policy_estimator_fuzz_target(Span)::$_1, policy_estimator_fuzz_target(Span)::$_2, policy_estimator_fuzz_target(Span)::$_3>(FuzzedDataProvider&, policy_estimator_fuzz_target(Span)::$_0, policy_estimator_fuzz_target(Span)::$_1, policy_estimator_fuzz_target(Span)::$_2, policy_estimator_fuzz_target(Span)::$_3) src/./test/fuzz/util.h:43:27 #4 0x55cbbd84af48 in policy_estimator_fuzz_target(Span) src/test/fuzz/policy_estimator.cpp:38:9 #5 0x55cbbda1cc18 in std::function)>::operator()(Span) const /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:591:9 #6 0x55cbbda1cc18 in LLVMFuzzerTestOneInput src/test/fuzz/fuzz.cpp:178:5 #7 0x55cbbd26a944 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) (/root/fuzz_dir/scratch/fuzz_gen/code/src/test/fuzz/fuzz+0x190e944) (BuildId: ffb89e0b86c093ca3bdeae6f85537737a4e3b42d) #8 0x55cbbd253916 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) (/root/fuzz_dir/scratch/fuzz_gen/code/src/test/fuzz/fuzz+0x18f7916) (BuildId: ffb89e0b86c093ca3bdeae6f85537737a4e3b42d) #9 0x55cbbd25945a in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) (/root/fuzz_dir/scratch/fuzz_gen/code/src/test/fuzz/fuzz+0x18fd45a) (BuildId: ffb89e0b86c093ca3bdeae6f85537737a4e3b42d) #10 0x55cbbd284026 in main (/root/fuzz_dir/scratch/fuzz_gen/code/src/test/fuzz/fuzz+0x1928026) (BuildId: ffb89e0b86c093ca3bdeae6f85537737a4e3b42d) #11 0x7fe4aa8280cf (/lib/x86_64-linux-gnu/libc.so.6+0x280cf) (BuildId: 96ab1a8f3b2c9a2ed37c7388615e6a726d037e89) #12 0x7fe4aa828188 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x28188) (BuildId: 96ab1a8f3b2c9a2ed37c7388615e6a726d037e89) #13 0x55cbbd24e494 in _start (/root/fuzz_dir/scratch/fuzz_gen/code/src/test/fuzz/fuzz+0x18f2494) (BuildId: ffb89e0b86c093ca3bdeae6f85537737a4e3b42d) SUMMARY: UndefinedBehaviorSanitizer: implicit-integer-sign-change policy/fees.cpp:632:27 in ``` ``` # base64 /tmp/crash-154b42214e70781a9c1ad72d3f2693913dcf8c06 AQEAAAAAADkFlVwAAQEAAAAAADkFlZVcACTDSSsP3746IAZrH48khwMAAQEB/QEALQAACwAAAAAA FgAAAAAAAQAABgAAAAAAAAAAAAAAAAAAACcQAAAAAAAAAAAAAAAAAAAAAAD6AAAAOQWVXAABAQAA AAAAOQWVlVwAIMNJKw/fvjogBmsfjySHAwABAQH9AQAtAAALAAAAAAAAAAABAAAGAAAAAAAAAAAA AAAAAAAAJxAAAAAAAAAAAAAAAAAAAAAAAPr/AAAAAAAAAAAAAAQAAAAA/wAAAAAAAAAAAAAEAAAA AAEBAeAIAVwBXAAA/jbSBvwBKABSKBwBYgEB2wAEkvXInHYAAAAAAAAAvgAAAAAA/9//6v8e/xIk MgAlAiUAOw== ACKs for top commit: fanquake: ACK fa9dc92c5362431852a9cfe152c6fdb819710eb4 dergoegge: utACK fa9dc92c5362431852a9cfe152c6fdb819710eb4 Tree-SHA512: 3898c17c928ecc2bcc8c7086359e9ae00da2197b4d8e10c7bf6d12415326c9bca3ef6e1d8d3b83172ccfa604ce7e7371415262ba705225f9ea4da8b1a7eb0306 Signed-off-by: Shailendra Kumar Gupta --- test/sanitizer_suppressions/ubsan | 1 + 1 file changed, 1 insertion(+) diff --git a/test/sanitizer_suppressions/ubsan b/test/sanitizer_suppressions/ubsan index 1d1f2ad352b5..b2268035bc0f 100644 --- a/test/sanitizer_suppressions/ubsan +++ b/test/sanitizer_suppressions/ubsan @@ -52,6 +52,7 @@ unsigned-integer-overflow:EvalScript unsigned-integer-overflow:txmempool.cpp unsigned-integer-overflow:util/strencodings.cpp unsigned-integer-overflow:xoroshiro128plusplus.h +implicit-integer-sign-change:CBlockPolicyEstimator::processBlockTx implicit-integer-sign-change:addrman.h implicit-integer-sign-change:bech32.cpp implicit-integer-sign-change:compat/stdin.cpp From 7c43465e4cfd76777fd9a79f24b41f0aee972306 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:41:44 +0000 Subject: [PATCH 3/4] Merge bitcoin-core/gui#803: test: Set organization name 0dcbad341b0a8420a899c6dce0db56dd0deaa036 qt, test: Clean settings after tests (Hennadii Stepanov) 49cf63522e202caf326bad161ff6fa05d1076566 qt, test: Set organization name (Hennadii Stepanov) Pull request description: From Qt [docs](https://doc.qt.io/qt-5/qsettings.html#QSettings-4): > If [`QCoreApplication::setOrganizationName()`](https://doc.qt.io/qt-5/qcoreapplication.html#organizationName-prop) and [`QCoreApplication::setApplicationName()`](https://doc.qt.io/qt-5/qcoreapplication.html#applicationName-prop) has not been previously called, the `QSettings` object will not be able to read or write any settings, and [`status()`](https://doc.qt.io/qt-5/qsettings.html#status) will return [`AccessError`](https://doc.qt.io/qt-5/qsettings.html#Status-enum). Fixes https://github.com/bitcoin-core/gui/issues/799. ACKs for top commit: pablomartin4btc: utACK 0dcbad341b0a8420a899c6dce0db56dd0deaa036 Tree-SHA512: d5ac160f17cc358f0c1b89097193cd5adfd25f5531955c211f3e0994fc084e0a2b8d3aeddebe38f3a8ab5333edef5aa92b18915885c9e58b33f2e5786f31c600 --- src/qt/test/optiontests.cpp | 11 +++++++++ src/qt/test/test_main.cpp | 49 +++++++++++++++++++++++-------------- 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/src/qt/test/optiontests.cpp b/src/qt/test/optiontests.cpp index 17ffeb220b69..3db9c4e6a6a0 100644 --- a/src/qt/test/optiontests.cpp +++ b/src/qt/test/optiontests.cpp @@ -46,6 +46,17 @@ void OptionTests::migrateSettings() settings.sync(); + QVERIFY(settings.contains("nDatabaseCache")); + QVERIFY(settings.contains("nThreadsScriptVerif")); + QVERIFY(settings.contains("fUseUPnP")); + QVERIFY(settings.contains("fListen")); + QVERIFY(settings.contains("bPrune")); + QVERIFY(settings.contains("nPruneSize")); + QVERIFY(settings.contains("fUseProxy")); + QVERIFY(settings.contains("addrProxy")); + QVERIFY(settings.contains("fUseSeparateProxyTor")); + QVERIFY(settings.contains("addrSeparateProxyTor")); + OptionsModel options{m_node}; bilingual_str error; QVERIFY(options.Init(error)); diff --git a/src/qt/test/test_main.cpp b/src/qt/test/test_main.cpp index 466c347c19fb..67c52db1c8af 100644 --- a/src/qt/test/test_main.cpp +++ b/src/qt/test/test_main.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -25,6 +26,7 @@ #include #include #include +#include #include #include @@ -81,38 +83,47 @@ int main(int argc, char* argv[]) setenv("QT_QPA_PLATFORM", "minimal", 0 /* overwrite */); #endif - BitcoinApplication app; - app.setApplicationName("Dash-Qt-test"); - app.createNode(*init); + + QCoreApplication::setOrganizationName(QAPP_ORG_NAME); + QCoreApplication::setApplicationName(QAPP_APP_NAME_DEFAULT "-test"); int num_test_failures{0}; - AppTests app_tests(app); - num_test_failures += QTest::qExec(&app_tests); + { + BitcoinApplication app; + app.createNode(*init); + + AppTests app_tests(app); + num_test_failures += QTest::qExec(&app_tests); - OptionTests options_tests(app.node()); - num_test_failures += QTest::qExec(&options_tests); + OptionTests options_tests(app.node()); + num_test_failures += QTest::qExec(&options_tests); - URITests test1; - num_test_failures += QTest::qExec(&test1); + URITests test1; + num_test_failures += QTest::qExec(&test1); - RPCNestedTests test3(app.node()); - num_test_failures += QTest::qExec(&test3); + RPCNestedTests test3(app.node()); + num_test_failures += QTest::qExec(&test3); #ifdef ENABLE_WALLET - WalletTests test5(app.node()); - num_test_failures += QTest::qExec(&test5); + WalletTests test5(app.node()); + num_test_failures += QTest::qExec(&test5); - AddressBookTests test6(app.node()); - num_test_failures += QTest::qExec(&test6); + AddressBookTests test6(app.node()); + num_test_failures += QTest::qExec(&test6); #endif TrafficGraphDataTests test7; num_test_failures += QTest::qExec(&test7); - if (num_test_failures) { - qWarning("\nFailed tests: %d\n", num_test_failures); - } else { - qDebug("\nAll tests passed.\n"); + if (num_test_failures) { + qWarning("\nFailed tests: %d\n", num_test_failures); + } else { + qDebug("\nAll tests passed.\n"); + } } + + QSettings settings; + settings.clear(); + return num_test_failures; } From e55fe92e47bf33b69eaa2d75b63f4e4a1101fd83 Mon Sep 17 00:00:00 2001 From: fanquake Date: Mon, 3 Apr 2023 14:20:35 +0100 Subject: [PATCH 4/4] Merge bitcoin/bitcoin#27254: refactor: Extract util/fs from util/system 00e9b97f37e0bdf4c647236838c10b68b7ad5be3 refactor: Move fs.* to util/fs.* (TheCharlatan) 106b46d9d25b5228ef009fbbe6f9a7ae35090d15 Add missing fs.h includes (TheCharlatan) b202b3dd6393b415fa68e18dc49c9431dc6b58b2 Add missing cstddef include in assumptions.h (TheCharlatan) 18fb36367a28819bd5ab402344802796a1248979 refactor: Extract util/fs_helpers from util/system (Ben Woosley) Pull request description: This pull request is part of the `libbitcoinkernel` project https://github.com/bitcoin/bitcoin/issues/24303 https://github.com/bitcoin/bitcoin/projects/18 and more specifically its "Step 2: Decouple most non-consensus code from libbitcoinkernel". This commit was originally authored by empact and is taken from its parent PR #25152. #### Context There is an ongoing effort to decouple the `ArgsManager` used for command line parsing user-provided arguments from the libbitcoinkernel library (https://github.com/bitcoin/bitcoin/pull/25290, https://github.com/bitcoin/bitcoin/pull/25487, https://github.com/bitcoin/bitcoin/pull/25527, https://github.com/bitcoin/bitcoin/pull/25862, https://github.com/bitcoin/bitcoin/pull/26177, and https://github.com/bitcoin/bitcoin/pull/27125). The `ArgsManager` is defined in `system.h`. A similar pull request extracting functionality from `system.h` has been merged in https://github.com/bitcoin/bitcoin/pull/27238. #### Changes Next to providing better code organization, this PR removes some reliance of the tree of libbitcoinkernel header includes on `system.h` (and thus the `ArgsManager` definition) by moving filesystem related functions out of the `system.*` files. There is already a pair of `fs.h` / `fs.cpp` in the top-level `src/` directory. They were not combined with the files introduced here, to keep the patch cleaner and more importantly because they are often included without the utility functions. The new files are therefore named `fs_helpers` and the existing `fs` files are moved into the util directory. Further commits splitting more functionality out of `system.h` are still in #25152 and will be submitted in separate PRs once this PR has been processed. ACKs for top commit: hebasto: ACK 00e9b97f37e0bdf4c647236838c10b68b7ad5be3 Tree-SHA512: 31422f148d14ba3c843b99b1550a6fd77c77f350905ca324f93d4f97b652246bc58fa9696c64d1201979cf88733e40be02d262739bb7d417cf22bf506fdb7666 --- src/Makefile.am | 6 +- src/addrdb.cpp | 3 +- src/addrdb.h | 2 +- src/banman.h | 2 +- src/bench/bench.cpp | 2 +- src/bench/bench.h | 2 +- src/bench/bench_bitcoin.cpp | 2 +- src/bitcoin-tx.cpp | 2 +- src/coinjoin/client.cpp | 2 +- src/dbwrapper.cpp | 3 +- src/dbwrapper.h | 2 +- src/flat-database.h | 2 +- src/flatfile.cpp | 2 +- src/flatfile.h | 2 +- src/i2p.cpp | 2 +- src/i2p.h | 2 +- src/index/blockfilterindex.cpp | 1 + src/init.cpp | 3 +- src/init/common.cpp | 2 +- src/interfaces/wallet.h | 2 +- src/ipc/interfaces.cpp | 2 +- src/ipc/process.cpp | 2 +- src/ipc/process.h | 2 + src/logging.cpp | 2 +- src/logging.h | 2 +- src/net.cpp | 2 +- src/net.h | 2 +- src/node/blockstorage.cpp | 2 +- src/node/blockstorage.h | 2 +- src/policy/fees.cpp | 2 +- src/policy/fees.h | 1 + src/qt/bitcoin.cpp | 2 +- src/qt/guiutil.cpp | 3 +- src/qt/guiutil.h | 2 +- src/qt/intro.cpp | 3 +- src/qt/psbtoperationsdialog.cpp | 2 +- src/qt/walletframe.cpp | 3 +- src/rpc/blockchain.cpp | 2 +- src/rpc/blockchain.h | 2 +- src/rpc/mempool.cpp | 2 +- src/rpc/request.cpp | 3 +- src/stacktraces.cpp | 2 +- src/test/argsman_tests.cpp | 6 +- src/test/fs_tests.cpp | 3 +- src/test/fuzz/banman.cpp | 2 +- src/test/fuzz/fuzz.cpp | 2 +- src/test/fuzz/utxo_snapshot.cpp | 1 + src/test/script_tests.cpp | 1 + src/test/settings_tests.cpp | 2 +- src/test/streams_tests.cpp | 2 +- src/test/util/chainstate.h | 2 +- src/test/util/setup_common.h | 2 +- src/test/util_tests.cpp | 6 +- src/torcontrol.h | 2 +- src/util/asmap.cpp | 2 +- src/util/asmap.h | 2 +- src/{ => util}/fs.cpp | 2 +- src/{ => util}/fs.h | 6 +- src/util/fs_helpers.cpp | 296 ++++++++++++++++++++++++++ src/util/fs_helpers.h | 63 ++++++ src/util/getuniquepath.cpp | 2 +- src/util/getuniquepath.h | 2 +- src/util/readwritefile.cpp | 2 +- src/util/readwritefile.h | 2 +- src/util/settings.cpp | 2 +- src/util/settings.h | 2 +- src/util/system.cpp | 241 +-------------------- src/util/system.h | 47 +--- src/validation.cpp | 1 + src/validation.h | 2 +- src/wallet/bdb.cpp | 3 +- src/wallet/bdb.h | 2 +- src/wallet/db.cpp | 2 +- src/wallet/db.h | 2 +- src/wallet/dump.cpp | 2 +- src/wallet/dump.h | 2 +- src/wallet/load.cpp | 2 +- src/wallet/rpc/backup.cpp | 2 +- src/wallet/salvage.cpp | 2 +- src/wallet/salvage.h | 2 +- src/wallet/sqlite.cpp | 2 +- src/wallet/test/db_tests.cpp | 2 +- src/wallet/test/init_test_fixture.cpp | 2 +- src/wallet/wallet.cpp | 3 +- src/wallet/wallet.h | 2 +- src/wallet/walletdb.cpp | 2 +- src/wallet/wallettool.cpp | 2 +- src/wallet/walletutil.h | 2 +- 88 files changed, 466 insertions(+), 370 deletions(-) rename src/{ => util}/fs.cpp (99%) rename src/{ => util}/fs.h (99%) create mode 100644 src/util/fs_helpers.cpp create mode 100644 src/util/fs_helpers.h diff --git a/src/Makefile.am b/src/Makefile.am index a0eca537b48d..99627e98a932 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -244,7 +244,6 @@ BITCOIN_CORE_H = \ gsl/pointers.h \ flat-database.h \ flatfile.h \ - fs.h \ httprpc.h \ httpserver.h \ i2p.h \ @@ -398,6 +397,8 @@ BITCOIN_CORE_H = \ util/error.h \ util/fastrange.h \ util/fees.h \ + util/fs.h \ + util/fs_helpers.h \ util/golombrice.h \ util/hasher.h \ util/hash_type.h \ @@ -978,7 +979,6 @@ libbitcoin_util_a_SOURCES = \ support/lockedpool.cpp \ chainparamsbase.cpp \ clientversion.cpp \ - fs.cpp \ interfaces/echo.cpp \ interfaces/handler.cpp \ interfaces/init.cpp \ @@ -996,6 +996,8 @@ libbitcoin_util_a_SOURCES = \ util/edge.cpp \ util/error.cpp \ util/fees.cpp \ + util/fs.cpp \ + util/fs_helpers.cpp \ util/hasher.cpp \ util/getuniquepath.cpp \ util/sock.cpp \ diff --git a/src/addrdb.cpp b/src/addrdb.cpp index 83bc6192ff7b..823bbc7fe009 100644 --- a/src/addrdb.cpp +++ b/src/addrdb.cpp @@ -8,7 +8,8 @@ #include #include #include -#include +#include +#include #include #include #include diff --git a/src/addrdb.h b/src/addrdb.h index 911b791b7170..2d71f7456e74 100644 --- a/src/addrdb.h +++ b/src/addrdb.h @@ -6,9 +6,9 @@ #ifndef BITCOIN_ADDRDB_H #define BITCOIN_ADDRDB_H -#include #include // For banmap_t #include +#include #include #include diff --git a/src/banman.h b/src/banman.h index c968fd99a2c0..77d78966a58d 100644 --- a/src/banman.h +++ b/src/banman.h @@ -7,9 +7,9 @@ #include #include -#include #include // For banmap_t #include +#include #include #include diff --git a/src/bench/bench.cpp b/src/bench/bench.cpp index ae017833ce6b..de8eacfa9570 100644 --- a/src/bench/bench.cpp +++ b/src/bench/bench.cpp @@ -4,8 +4,8 @@ #include -#include #include +#include #include #include diff --git a/src/bench/bench.h b/src/bench/bench.h index 63e1bf67e21e..d3fba1e28c41 100644 --- a/src/bench/bench.h +++ b/src/bench/bench.h @@ -5,7 +5,7 @@ #ifndef BITCOIN_BENCH_BENCH_H #define BITCOIN_BENCH_BENCH_H -#include +#include #include #include diff --git a/src/bench/bench_bitcoin.cpp b/src/bench/bench_bitcoin.cpp index 4db5412e16d6..c34949264cc2 100644 --- a/src/bench/bench_bitcoin.cpp +++ b/src/bench/bench_bitcoin.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp index a1dfb9e7d374..47b569f1ae19 100644 --- a/src/bitcoin-tx.cpp +++ b/src/bitcoin-tx.cpp @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include