mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-09 19:01:08 +00:00
client/authority-discovery: Compare PeerIds and not Multihashes (#6414)
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] https://github.com/libp2p/rust-libp2p/issues/555
This commit is contained in:
@@ -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};
|
||||
@@ -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)| {
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user