keri_controller/identifier/mechanics/
notify_witness.rs1use futures::future::join_all;
2
3use crate::identifier::Identifier;
4
5use super::MechanicsError;
6
7impl Identifier {
8 pub async fn notify_witnesses(&mut self) -> Result<usize, MechanicsError> {
9 let mut n = 0;
10 let to_notify = self.to_notify.iter().filter_map(|ev| {
11 let id_idx = self.get_index(&ev.event_message.data).unwrap_or_default();
15 let min_sig_idx =
16 ev.signatures
17 .iter()
18 .map(|at| at.index.current())
19 .min()
20 .expect("event should have at least one signature") as usize;
21 if min_sig_idx == id_idx {
22 let witnesses = self
23 .known_events
24 .find_witnesses_at_event(&ev.event_message)
25 .expect("Can't find witnesses");
26 n += 1;
27 Some(self.communication.publish(witnesses, &ev))
28 } else {
29 None
30 }
31 });
32 join_all(to_notify).await;
33 self.to_notify.clear();
34
35 Ok(n)
36 }
37}