|
26 | 26 | namespace {
|
27 | 27 | constexpr const char *syncPeerMetricName = "kagome_sync_peers";
|
28 | 28 | constexpr const char *kPeersCountMetricName = "kagome_sub_libp2p_peers_count";
|
29 |
| - /// Reputation change for a node when we get disconnected from it. |
| 29 | + /// Reputation value for a node when we get disconnected from it. |
30 | 30 | static constexpr int32_t kDisconnectReputation = -256;
|
| 31 | + /// Reputation change for a node when we get disconnected from it. |
| 32 | + static constexpr int32_t kMinReputationForInnerConnection = -128; |
| 33 | + static constexpr int32_t kMinReputationForOuterConnection = -128; |
31 | 34 | } // namespace
|
32 | 35 |
|
33 | 36 | OUTCOME_CPP_DEFINE_CATEGORY(kagome::network, PeerManagerImpl::Error, e) {
|
@@ -421,6 +424,18 @@ namespace kagome::network {
|
421 | 424 | return;
|
422 | 425 | }
|
423 | 426 |
|
| 427 | + // Don't establish connection to bad (negative reputation) peers |
| 428 | + const auto peer_reputation = reputation_repository_->reputation(peer_id); |
| 429 | + if (peer_reputation < kMinReputationForOuterConnection) { |
| 430 | + SL_DEBUG(log_, |
| 431 | + "Attempt to establish connection to peer {} skipped: " |
| 432 | + "peer has low ({}) reputation", |
| 433 | + peer_id, |
| 434 | + peer_reputation); |
| 435 | + connecting_peers_.erase(peer_id); |
| 436 | + return; |
| 437 | + } |
| 438 | + |
424 | 439 | auto peer_info = host_.getPeerRepository().getPeerInfo(peer_id);
|
425 | 440 | if (peer_info.addresses.empty()) {
|
426 | 441 | SL_DEBUG(log_, "Not found addresses for peer {}", peer_id);
|
@@ -799,6 +814,19 @@ namespace kagome::network {
|
799 | 814 | }
|
800 | 815 | }
|
801 | 816 |
|
| 817 | + // Don't accept connection from bad (negative reputation) peers |
| 818 | + const auto peer_reputation = reputation_repository_->reputation(peer_id); |
| 819 | + if (peer_reputation < kMinReputationForInnerConnection) { |
| 820 | + SL_DEBUG(log_, |
| 821 | + "New connection from peer {} was dropped: " |
| 822 | + "peer has low ({}) reputation", |
| 823 | + peer_id, |
| 824 | + peer_reputation); |
| 825 | + connecting_peers_.erase(peer_id); |
| 826 | + disconnectFromPeer(peer_id); |
| 827 | + return; |
| 828 | + } |
| 829 | + |
802 | 830 | PeerInfo peer_info{.id = peer_id, .addresses = {}};
|
803 | 831 | openBlockAnnounceProtocol(
|
804 | 832 | peer_info,
|
|
0 commit comments