From 18ec2d14d0e6566500f5205014684d746cafc723 Mon Sep 17 00:00:00 2001 From: Marcio Diaz Date: Sat, 4 May 2019 01:16:14 +0200 Subject: [PATCH] Fix grandpa issue for InvalidViewChanges (#2468) * fix: add message_allowed to send_topic to avoid InvalidViewChanges * fix: this should be strict * fix typo * fix: simplify --- substrate/core/network/src/consensus_gossip.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/substrate/core/network/src/consensus_gossip.rs b/substrate/core/network/src/consensus_gossip.rs index 88fd209d8a..9f1267118c 100644 --- a/substrate/core/network/src/consensus_gossip.rs +++ b/substrate/core/network/src/consensus_gossip.rs @@ -445,11 +445,22 @@ impl ConsensusGossip { /// Send all messages with given topic to a peer. pub fn send_topic(&mut self, protocol: &mut Context, who: &PeerId, topic: B::Hash, engine_id: ConsensusEngineId, force: bool) { + let validator = self.validators.get(&engine_id); + let mut message_allowed = match validator { + None => return, // treat all messages with no validator as not allowed + Some(validator) => validator.message_allowed(), + }; + + let intent = if force { MessageIntent::ForcedBroadcast } else { MessageIntent::Broadcast }; + if let Some(ref mut peer) = self.peers.get_mut(who) { for entry in self.messages.iter().filter(|m| m.topic == topic && m.message.engine_id == engine_id) { if !force && peer.known_messages.contains(&entry.message_hash) { continue } + if !message_allowed(who, intent, &entry.topic, &entry.message.data) { + continue + } peer.known_messages.insert(entry.message_hash.clone()); trace!(target: "gossip", "Sending topic message to {}: {:?}", who, entry.message); protocol.send_consensus(who.clone(), ConsensusMessage {