mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 12:32:48 +01:00
Merge #12603: [docs] PeerLogicValidation interface
b7cd08b71
Add documentation to PeerLogicValidation interface and related functions (James O'Beirne)
Pull request description:
Adds docs for PeerLogicValidation's public interface and two related functions.
Tree-SHA512: b4c2f47e9baa9396d2b6faf3792e46b371c50cd91b9ac890f263f4d14eb24a71e7b40ceb4cbb41e254f5008eff357f417b842618e7ebece9039802ab2a5dd728
This commit is contained in:
parent
95edea4e3e
commit
8adade97a4
@ -544,6 +544,12 @@ void UpdateBlockAvailability(NodeId nodeid, const uint256 &hash) EXCLUSIVE_LOCKS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When a peer sends us a valid block, instruct it to announce blocks to us
|
||||||
|
* using CMPCTBLOCK if possible by adding its nodeid to the end of
|
||||||
|
* lNodesAnnouncingHeaderAndIDs, and keeping that list under a certain size by
|
||||||
|
* removing the first element if necessary.
|
||||||
|
*/
|
||||||
void MaybeSetPeerAsAnnouncingHeaderAndIDs(NodeId nodeid, CConnman* connman)
|
void MaybeSetPeerAsAnnouncingHeaderAndIDs(NodeId nodeid, CConnman* connman)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
@ -1109,6 +1115,10 @@ PeerLogicValidation::PeerLogicValidation(CConnman* connmanIn, CScheduler &schedu
|
|||||||
scheduler.scheduleEvery(std::bind(&PeerLogicValidation::CheckForStaleTipAndEvictPeers, this, consensusParams), EXTRA_PEER_CHECK_INTERVAL * 1000);
|
scheduler.scheduleEvery(std::bind(&PeerLogicValidation::CheckForStaleTipAndEvictPeers, this, consensusParams), EXTRA_PEER_CHECK_INTERVAL * 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Evict orphan txn pool entries (EraseOrphanTx) based on a newly connected
|
||||||
|
* block. Also save the time of the last tip update.
|
||||||
|
*/
|
||||||
void PeerLogicValidation::BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindex, const std::vector<CTransactionRef>& vtxConflicted) {
|
void PeerLogicValidation::BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindex, const std::vector<CTransactionRef>& vtxConflicted) {
|
||||||
LOCK2(cs_main, g_cs_orphans);
|
LOCK2(cs_main, g_cs_orphans);
|
||||||
|
|
||||||
@ -1139,7 +1149,7 @@ void PeerLogicValidation::BlockConnected(const std::shared_ptr<const CBlock>& pb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Erase orphan transactions include or precluded by this block
|
// Erase orphan transactions included or precluded by this block
|
||||||
if (vOrphanErase.size()) {
|
if (vOrphanErase.size()) {
|
||||||
int nErased = 0;
|
int nErased = 0;
|
||||||
for (uint256 &orphanHash : vOrphanErase) {
|
for (uint256 &orphanHash : vOrphanErase) {
|
||||||
@ -1162,6 +1172,10 @@ static std::shared_ptr<const CBlock> most_recent_block GUARDED_BY(cs_most_recent
|
|||||||
static std::shared_ptr<const CBlockHeaderAndShortTxIDs> most_recent_compact_block GUARDED_BY(cs_most_recent_block);
|
static std::shared_ptr<const CBlockHeaderAndShortTxIDs> most_recent_compact_block GUARDED_BY(cs_most_recent_block);
|
||||||
static uint256 most_recent_block_hash GUARDED_BY(cs_most_recent_block);
|
static uint256 most_recent_block_hash GUARDED_BY(cs_most_recent_block);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maintain state about the best-seen block and fast-announce a compact block
|
||||||
|
* to compatible peers.
|
||||||
|
*/
|
||||||
void PeerLogicValidation::NewPoWValidBlock(const CBlockIndex *pindex, const std::shared_ptr<const CBlock>& pblock) {
|
void PeerLogicValidation::NewPoWValidBlock(const CBlockIndex *pindex, const std::shared_ptr<const CBlock>& pblock) {
|
||||||
std::shared_ptr<const CBlockHeaderAndShortTxIDs> pcmpctblock = std::make_shared<const CBlockHeaderAndShortTxIDs> (*pblock);
|
std::shared_ptr<const CBlockHeaderAndShortTxIDs> pcmpctblock = std::make_shared<const CBlockHeaderAndShortTxIDs> (*pblock);
|
||||||
const CNetMsgMaker msgMaker(PROTOCOL_VERSION);
|
const CNetMsgMaker msgMaker(PROTOCOL_VERSION);
|
||||||
@ -1202,6 +1216,10 @@ void PeerLogicValidation::NewPoWValidBlock(const CBlockIndex *pindex, const std:
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update our best height and announce any block hashes which weren't previously
|
||||||
|
* in chainActive to our peers.
|
||||||
|
*/
|
||||||
void PeerLogicValidation::UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) {
|
void PeerLogicValidation::UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) {
|
||||||
const int nNewHeight = pindexNew->nHeight;
|
const int nNewHeight = pindexNew->nHeight;
|
||||||
connman->SetBestHeight(nNewHeight);
|
connman->SetBestHeight(nNewHeight);
|
||||||
@ -1235,6 +1253,10 @@ void PeerLogicValidation::UpdatedBlockTip(const CBlockIndex *pindexNew, const CB
|
|||||||
nTimeBestReceived = GetTime();
|
nTimeBestReceived = GetTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle invalid block rejection and consequent peer banning, maintain which
|
||||||
|
* peers announce compact blocks.
|
||||||
|
*/
|
||||||
void PeerLogicValidation::BlockChecked(const CBlock& block, const CValidationState& state) {
|
void PeerLogicValidation::BlockChecked(const CBlock& block, const CValidationState& state) {
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
|
|
||||||
|
@ -28,13 +28,26 @@ private:
|
|||||||
public:
|
public:
|
||||||
explicit PeerLogicValidation(CConnman* connmanIn, CScheduler &scheduler, bool enable_bip61);
|
explicit PeerLogicValidation(CConnman* connmanIn, CScheduler &scheduler, bool enable_bip61);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overridden from CValidationInterface.
|
||||||
|
*/
|
||||||
void BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindexConnected, const std::vector<CTransactionRef>& vtxConflicted) override;
|
void BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindexConnected, const std::vector<CTransactionRef>& vtxConflicted) override;
|
||||||
|
/**
|
||||||
|
* Overridden from CValidationInterface.
|
||||||
|
*/
|
||||||
void UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) override;
|
void UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) override;
|
||||||
|
/**
|
||||||
|
* Overridden from CValidationInterface.
|
||||||
|
*/
|
||||||
void BlockChecked(const CBlock& block, const CValidationState& state) override;
|
void BlockChecked(const CBlock& block, const CValidationState& state) override;
|
||||||
|
/**
|
||||||
|
* Overridden from CValidationInterface.
|
||||||
|
*/
|
||||||
void NewPoWValidBlock(const CBlockIndex *pindex, const std::shared_ptr<const CBlock>& pblock) override;
|
void NewPoWValidBlock(const CBlockIndex *pindex, const std::shared_ptr<const CBlock>& pblock) override;
|
||||||
|
|
||||||
|
/** Initialize a peer by adding it to mapNodeState and pushing a message requesting its version */
|
||||||
void InitializeNode(CNode* pnode) override;
|
void InitializeNode(CNode* pnode) override;
|
||||||
|
/** Handle removal of a peer by updating various state and removing it from mapNodeState */
|
||||||
void FinalizeNode(NodeId nodeid, bool& fUpdateConnectionTime) override;
|
void FinalizeNode(NodeId nodeid, bool& fUpdateConnectionTime) override;
|
||||||
/** Process protocol messages received from a given node */
|
/** Process protocol messages received from a given node */
|
||||||
bool ProcessMessages(CNode* pfrom, std::atomic<bool>& interrupt, bool &fRetDidWork) override;
|
bool ProcessMessages(CNode* pfrom, std::atomic<bool>& interrupt, bool &fRetDidWork) override;
|
||||||
@ -47,8 +60,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool SendMessages(CNode* pto, std::atomic<bool>& interrupt) override;
|
bool SendMessages(CNode* pto, std::atomic<bool>& interrupt) override;
|
||||||
|
|
||||||
|
/** Consider evicting an outbound peer based on the amount of time they've been behind our tip */
|
||||||
void ConsiderEviction(CNode *pto, int64_t time_in_seconds);
|
void ConsiderEviction(CNode *pto, int64_t time_in_seconds);
|
||||||
|
/** Evict extra outbound peers. If we think our tip may be stale, connect to an extra outbound */
|
||||||
void CheckForStaleTipAndEvictPeers(const Consensus::Params &consensusParams);
|
void CheckForStaleTipAndEvictPeers(const Consensus::Params &consensusParams);
|
||||||
|
/** If we have extra outbound peers, try to disconnect the one with the oldest block announcement */
|
||||||
void EvictExtraOutboundPeers(int64_t time_in_seconds) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
void EvictExtraOutboundPeers(int64_t time_in_seconds) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Loading…
Reference in New Issue
Block a user