Ban peers with stuck or lagging monerod

pull/166/head
SChernykh 2 years ago
parent 2a77695832
commit b2f86a5f6b

@ -1030,6 +1030,7 @@ P2PServer::P2PClient::P2PClient()
, m_peerListPendingRequests(0)
, m_pingTime(0)
, m_blockPendingRequests(0)
, m_chainTipBlockRequest(false)
, m_lastAlive(0)
, m_lastBroadcastTimestamp(0)
, m_lastBlockrequestTimestamp(0)
@ -1059,6 +1060,7 @@ void P2PServer::P2PClient::reset()
m_peerListPendingRequests = 0;
m_pingTime = 0;
m_blockPendingRequests = 0;
m_chainTipBlockRequest = false;
m_lastAlive = 0;
m_lastBroadcastTimestamp = 0;
m_lastBlockrequestTimestamp = 0;
@ -1642,6 +1644,7 @@ void P2PServer::P2PClient::on_after_handshake(uint8_t* &p)
p += HASH_SIZE;
++m_blockPendingRequests;
m_chainTipBlockRequest = true;
m_lastBroadcastTimestamp = seconds_since_epoch();
}
@ -1714,6 +1717,18 @@ bool P2PServer::P2PClient::on_block_response(const uint8_t* buf, uint32_t size)
return false;
}
if (m_chainTipBlockRequest) {
m_chainTipBlockRequest = false;
const uint64_t peer_height = server->m_block->m_txinGenHeight;
const uint64_t our_height = server->m_pool->miner_data().height;
if (peer_height + 2 < our_height) {
LOGWARN(4, "peer " << static_cast<char*>(m_addrString) << " is mining on top of a stale block (mainchain height " << peer_height << ", expected >= " << our_height << ')');
return false;
}
}
return handle_incoming_block_async(server->m_block);
}
@ -1756,7 +1771,7 @@ bool P2PServer::P2PClient::on_block_broadcast(const uint8_t* buf, uint32_t size)
}
}
else {
LOGWARN(5, "peer " << static_cast<char*>(m_addrString) << " broadcasted an unreasonably stale block (mainchain height " << peer_height << ", expected >= " << our_height << ')');
LOGWARN(4, "peer " << static_cast<char*>(m_addrString) << " broadcasted an unreasonably stale block (mainchain height " << peer_height << ", expected >= " << our_height << ')');
return false;
}
}

@ -117,6 +117,7 @@ public:
int64_t m_pingTime;
int m_blockPendingRequests;
bool m_chainTipBlockRequest;
uint64_t m_lastAlive;
uint64_t m_lastBroadcastTimestamp;

Loading…
Cancel
Save