// Copyright (c) 2018-2022 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_LLMQ_CONTEXT_H #define BITCOIN_LLMQ_CONTEXT_H #include class CBLSWorker; class CChainState; class CConnman; class CDBWrapper; class CEvoDB; class CTxMemPool; class CSporkManager; class PeerManager; namespace llmq { class CDKGDebugManager; class CQuorumBlockProcessor; class CDKGSessionManager; class CQuorumManager; class CSigSharesManager; class CSigningManager; class CChainLocksHandler; class CInstantSendManager; } struct LLMQContext { LLMQContext() = delete; LLMQContext(const LLMQContext&) = delete; LLMQContext(CChainState& chainstate, CConnman& connman, CEvoDB& evo_db, CSporkManager& sporkman, CTxMemPool& mempool, const std::unique_ptr& peerman, bool unit_tests, bool wipe); ~LLMQContext(); void Interrupt(); void Start(); void Stop(); /** Guaranteed if LLMQContext is initialized then all members are valid too * * Please note, that members here should not be re-ordered, because initialization * some of them requires other member initialized. * For example, constructor `quorumManager` requires `bls_worker`. * * Some objects are still global variables and their de-globalization is not trivial * at this point. LLMQContext keeps just a pointer to them and doesn't own these objects, * but it still guarantees that objects are created and valid */ const std::shared_ptr bls_worker; const std::unique_ptr dkg_debugman; llmq::CQuorumBlockProcessor* const quorum_block_processor; const std::unique_ptr qdkgsman; llmq::CQuorumManager* const qman; const std::unique_ptr sigman; const std::unique_ptr shareman; llmq::CChainLocksHandler* const clhandler; llmq::CInstantSendManager* const isman; }; #endif // BITCOIN_LLMQ_CONTEXT_H