Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
client/authority-discovery: Compare PeerIds and not Multihashes (#6414)
Browse files Browse the repository at this point in the history
In order to tell whether an address is the local nodes address the
authority discovery module previously compared the Multihash within the
`p2p` Multiaddr protocol.

rust-libp2p recently switched to a new PeerId representation (see [1]).
Multihashes of the same PeerId in the new and the old format don't
equal.

Instead of comparing the Multihashes, this patch ensures the module
compares the PeerIds

[1] libp2p/rust-libp2p#555
  • Loading branch information
mxinden authored Jun 19, 2020
1 parent 26aec42 commit 4c67aee
Showing 1 changed file with 19 additions and 4 deletions.
23 changes: 19 additions & 4 deletions client/authority-discovery/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ use sc_network::{
ExHashT,
Multiaddr,
NetworkStateInfo,
PeerId,
};
use sp_authority_discovery::{AuthorityDiscoveryApi, AuthorityId, AuthoritySignature, AuthorityPair};
use sp_core::crypto::{key_types, Pair};
Expand Down Expand Up @@ -430,7 +431,7 @@ where
.get(&remote_key)
.ok_or(Error::MatchingHashedAuthorityIdWithAuthorityId)?;

let local_peer_id = multiaddr::Protocol::P2p(self.network.local_peer_id().into());
let local_peer_id = self.network.local_peer_id();

let remote_addresses: Vec<Multiaddr> = values.into_iter()
.map(|(_k, v)| {
Expand Down Expand Up @@ -459,9 +460,23 @@ where
.into_iter()
.flatten()
// Ignore own addresses.
.filter(|addr| !addr.iter().any(|protocol|
protocol == local_peer_id
))
.filter(|addr| !addr.iter().any(|protocol| {
// Parse to PeerId first as Multihashes of old and new PeerId
// representation don't equal.
//
// See https://github.com/libp2p/rust-libp2p/issues/555 for
// details.
if let multiaddr::Protocol::P2p(hash) = protocol {
let peer_id = match PeerId::from_multihash(hash) {
Ok(peer_id) => peer_id,
Err(_) => return true, // Discard address.
};

return peer_id == local_peer_id;
}

false // Multiaddr does not contain a PeerId.
}))
.collect();

if !remote_addresses.is_empty() {
Expand Down

0 comments on commit 4c67aee

Please sign in to comment.