message: Send/request evidence on faults
diff: @@ -30,7 +30,7 @@ use crate::{
  Dependency, GetDepOutcome, Highway, Params, PreValidatedVertex, ValidVertex, Vertex,
  },
  state::{Observation, Panorama},
  - validators::Validators,
  + validators::{ValidatorIndex, Validators},
  },
  traits::{ConsensusValueT, Context, NodeIdT},
  },
  @@ -589,10 +589,21 @@ where
  let state = self.highway.state();
  let create_message =
  - |observations: (&Observation<C>, &Observation<C>)| match observations {
  - (Observation::None, Observation::None)
  - | (Observation::Faulty, _)
  - | (_, Observation::Faulty) => None,
  + |observations: ((ValidatorIndex, &Observation<C>), &Observation<C>)| {
  + let vid = observations.0 .0;
  + let observations = (observations.0 .1, observations.1);
  + match observations {
  + (obs0, obs1) if obs0 == obs1 => None,
  +
  + (Observation::None, Observation::None) => None,
  +
  + (Observation::Faulty, _) => state.maybe_evidence(vid).map(|evidence| {
  + HighwayMessage::NewVertex(Vertex::Evidence(evidence.clone()))
  + }),
  +
  + (_, Observation::Faulty) => {
  + Some(HighwayMessage::RequestDependency(Dependency::Evidence(vid)))
  + }
  (Observation::None, Observation::Correct(hash)) => {
  Some(HighwayMessage::RequestDependency(Dependency::Unit(*hash)))
  @@ -617,11 +628,12 @@ where
  None
  }
  }
  + }
  };
  state
  .panorama()
  - .iter()
  + .enumerate()
  .zip(&panorama)
  .filter_map(create_message)
  .map(|msg| {
  