git / moonbite-core / src/node/context.h · raw
// Copyright (c) 2019-2020 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#ifndef BITCOIN_NODE_CONTEXT_H#define BITCOIN_NODE_CONTEXT_H#include <cassert>#include <functional>#include <memory>#include <vector>class ArgsManager;class BanMan;class CConnman;class CScheduler;class CTxMemPool;class ChainstateManager;class PeerManager;namespace interfaces {class Chain;class ChainClient;class WalletClient;} // namespace interfaces//! NodeContext struct containing references to chain state and connection//! state.//!//! This is used by init, rpc, and test code to pass object references around//! without needing to declare the same variables and parameters repeatedly, or//! to use globals. More variables could be added to this struct (particularly//! references to validation objects) to eliminate use of globals//! and make code more modular and testable. The struct isn't intended to have//! any member functions. It should just be a collection of references that can//! be used without pulling in unwanted dependencies or functionality.struct NodeContext { std::unique_ptr<CConnman> connman; std::unique_ptr<CTxMemPool> mempool; std::unique_ptr<PeerManager> peerman; ChainstateManager* chainman{nullptr}; // Currently a raw pointer because the memory is not managed by this struct std::unique_ptr<BanMan> banman; ArgsManager* args{nullptr}; // Currently a raw pointer because the memory is not managed by this struct std::unique_ptr<interfaces::Chain> chain; //! List of all chain clients (wallet processes or other client) connected to node. std::vector<std::unique_ptr<interfaces::ChainClient>> chain_clients; //! Reference to chain client that should used to load or create wallets //! opened by the gui. interfaces::WalletClient* wallet_client{nullptr}; std::unique_ptr<CScheduler> scheduler; std::function<void()> rpc_interruption_point = [] {}; //! Declare default constructor and destructor that are not inline, so code //! instantiating the NodeContext struct doesn't need to #include class //! definitions for all the unique_ptr members. NodeContext(); ~NodeContext();};#endif // BITCOIN_NODE_CONTEXT_H