Bitcoin Core  27.99.0
P2P Digital Currency
Classes | Public Member Functions | Static Public Member Functions | List of all members
PeerManager Class Referenceabstract

#include <net_processing.h>

Inheritance diagram for PeerManager:
[legend]
Collaboration diagram for PeerManager:
[legend]

Classes

struct  Options
 

Public Member Functions

virtual ~PeerManager ()
 
virtual std::optional< std::string > FetchBlock (NodeId peer_id, const CBlockIndex &block_index)=0
 Attempt to manually fetch block from a given peer. More...
 
virtual void StartScheduledTasks (CScheduler &scheduler)=0
 Begin running background tasks, should only be called once. More...
 
virtual bool GetNodeStateStats (NodeId nodeid, CNodeStateStats &stats) const =0
 Get statistics from node state. More...
 
virtual bool IgnoresIncomingTxs ()=0
 Whether this node ignores txs received over p2p. More...
 
virtual void RelayTransaction (const uint256 &txid, const uint256 &wtxid)=0
 Relay transaction to all peers. More...
 
virtual void SendPings ()=0
 Send ping message to all peers. More...
 
virtual void SetBestBlock (int height, std::chrono::seconds time)=0
 Set the height of the best block and its time (seconds since epoch). More...
 
virtual void UnitTestMisbehaving (NodeId peer_id, int howmuch)=0
 
virtual void CheckForStaleTipAndEvictPeers ()=0
 Evict extra outbound peers. More...
 
virtual void ProcessMessage (CNode &pfrom, const std::string &msg_type, DataStream &vRecv, const std::chrono::microseconds time_received, const std::atomic< bool > &interruptMsgProc) EXCLUSIVE_LOCKS_REQUIRED(g_msgproc_mutex)=0
 Process a single message from a peer. More...
 
virtual void UpdateLastBlockAnnounceTime (NodeId node, int64_t time_in_seconds)=0
 This function is used for testing the stale tip eviction logic, see denialofservice_tests.cpp. More...
 
virtual ServiceFlags GetDesirableServiceFlags (ServiceFlags services) const =0
 Gets the set of service flags which are "desirable" for a given peer. More...
 
- Public Member Functions inherited from NetEventsInterface
virtual void InitializeNode (CNode &node, ServiceFlags our_services)=0
 Initialize a peer (setup state, queue any initial messages) More...
 
virtual void FinalizeNode (const CNode &node)=0
 Handle removal of a peer (clear state) More...
 
virtual bool HasAllDesirableServiceFlags (ServiceFlags services) const =0
 Callback to determine whether the given set of service flags are sufficient for a peer to be "relevant". More...
 
virtual bool ProcessMessages (CNode *pnode, std::atomic< bool > &interrupt) EXCLUSIVE_LOCKS_REQUIRED(g_msgproc_mutex)=0
 Process protocol messages received from a given node. More...
 
virtual bool SendMessages (CNode *pnode) EXCLUSIVE_LOCKS_REQUIRED(g_msgproc_mutex)=0
 Send queued protocol messages to a given node. More...
 

Static Public Member Functions

static std::unique_ptr< PeerManagermake (CConnman &connman, AddrMan &addrman, BanMan *banman, ChainstateManager &chainman, CTxMemPool &pool, Options opts)
 

Additional Inherited Members

- Static Public Attributes inherited from NetEventsInterface
static Mutex g_msgproc_mutex
 Mutex for anything that is only accessed via the msg processing thread. More...
 
- Protected Member Functions inherited from CValidationInterface
 ~CValidationInterface ()=default
 Protected destructor so that instances can only be deleted by derived classes. More...
 
virtual void UpdatedBlockTip (const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload)
 Notifies listeners when the block chain tip advances. More...
 
virtual void TransactionAddedToMempool (const NewMempoolTransactionInfo &tx, uint64_t mempool_sequence)
 Notifies listeners of a transaction having been added to mempool. More...
 
virtual void TransactionRemovedFromMempool (const CTransactionRef &tx, MemPoolRemovalReason reason, uint64_t mempool_sequence)
 Notifies listeners of a transaction leaving mempool. More...
 
virtual void MempoolTransactionsRemovedForBlock (const std::vector< RemovedMempoolTransactionInfo > &txs_removed_for_block, unsigned int nBlockHeight)
 
virtual void BlockConnected (ChainstateRole role, const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex)
 Notifies listeners of a block being connected. More...
 
virtual void BlockDisconnected (const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex)
 Notifies listeners of a block being disconnected Provides the block that was disconnected. More...
 
virtual void ChainStateFlushed (ChainstateRole role, const CBlockLocator &locator)
 Notifies listeners of the new active block chain on-disk. More...
 
virtual void BlockChecked (const CBlock &, const BlockValidationState &)
 Notifies listeners of a block validation result. More...
 
virtual void NewPoWValidBlock (const CBlockIndex *pindex, const std::shared_ptr< const CBlock > &block)
 Notifies listeners that a block which builds directly on our current tip has been received and connected to the headers tree, though not validated yet. More...
 
- Protected Member Functions inherited from NetEventsInterface
 ~NetEventsInterface ()=default
 Protected destructor so that instances can only be deleted by derived classes. More...
 

Detailed Description

Definition at line 46 of file net_processing.h.

Constructor & Destructor Documentation

◆ ~PeerManager()

virtual PeerManager::~PeerManager ( )
inlinevirtual

Definition at line 69 of file net_processing.h.

Member Function Documentation

◆ CheckForStaleTipAndEvictPeers()

virtual void PeerManager::CheckForStaleTipAndEvictPeers ( )
pure virtual

Evict extra outbound peers.

If we think our tip may be stale, connect to an extra outbound. Public for unit testing.

◆ FetchBlock()

virtual std::optional<std::string> PeerManager::FetchBlock ( NodeId  peer_id,
const CBlockIndex block_index 
)
pure virtual

Attempt to manually fetch block from a given peer.

We must already have the header.

Parameters
[in]peer_idThe peer id
[in]block_indexThe blockindex
Returns
std::nullopt if a request was successfully made, otherwise an error message
Here is the caller graph for this function:

◆ GetDesirableServiceFlags()

virtual ServiceFlags PeerManager::GetDesirableServiceFlags ( ServiceFlags  services) const
pure virtual

Gets the set of service flags which are "desirable" for a given peer.

These are the flags which are required for a peer to support for them to be "interesting" to us, ie for us to wish to use one of our few outbound connection slots for or for us to wish to prioritize keeping their connection around.

Relevant service flags may be peer- and state-specific in that the version of the peer may determine which flags are required (eg in the case of NODE_NETWORK_LIMITED where we seek out NODE_NETWORK peers unless they set NODE_NETWORK_LIMITED and we are out of IBD, in which case NODE_NETWORK_LIMITED suffices).

Thus, generally, avoid calling with 'services' == NODE_NONE, unless state-specific flags must absolutely be avoided. When called with 'services' == NODE_NONE, the returned desirable service flags are guaranteed to not change dependent on state - ie they are suitable for use when describing peers which we know to be desirable, but for which we do not have a confirmed set of service flags.

◆ GetNodeStateStats()

virtual bool PeerManager::GetNodeStateStats ( NodeId  nodeid,
CNodeStateStats stats 
) const
pure virtual

Get statistics from node state.

Here is the caller graph for this function:

◆ IgnoresIncomingTxs()

virtual bool PeerManager::IgnoresIncomingTxs ( )
pure virtual

Whether this node ignores txs received over p2p.

◆ make()

std::unique_ptr< PeerManager > PeerManager::make ( CConnman connman,
AddrMan addrman,
BanMan banman,
ChainstateManager chainman,
CTxMemPool pool,
Options  opts 
)
static

Definition at line 1958 of file net_processing.cpp.

Here is the caller graph for this function:

◆ ProcessMessage()

virtual void PeerManager::ProcessMessage ( CNode pfrom,
const std::string &  msg_type,
DataStream vRecv,
const std::chrono::microseconds  time_received,
const std::atomic< bool > &  interruptMsgProc 
)
pure virtual

Process a single message from a peer.

Public for fuzz testing

◆ RelayTransaction()

virtual void PeerManager::RelayTransaction ( const uint256 txid,
const uint256 wtxid 
)
pure virtual

Relay transaction to all peers.

◆ SendPings()

virtual void PeerManager::SendPings ( )
pure virtual

Send ping message to all peers.

Here is the caller graph for this function:

◆ SetBestBlock()

virtual void PeerManager::SetBestBlock ( int  height,
std::chrono::seconds  time 
)
pure virtual

Set the height of the best block and its time (seconds since epoch).

◆ StartScheduledTasks()

virtual void PeerManager::StartScheduledTasks ( CScheduler scheduler)
pure virtual

Begin running background tasks, should only be called once.

◆ UnitTestMisbehaving()

virtual void PeerManager::UnitTestMisbehaving ( NodeId  peer_id,
int  howmuch 
)
pure virtual

◆ UpdateLastBlockAnnounceTime()

virtual void PeerManager::UpdateLastBlockAnnounceTime ( NodeId  node,
int64_t  time_in_seconds 
)
pure virtual

This function is used for testing the stale tip eviction logic, see denialofservice_tests.cpp.


The documentation for this class was generated from the following files: