Skip to content

Commit 7069ee8

Browse files
committed
sim-rs: only include EBs in RBs if we have their IBs
1 parent 445db4c commit 7069ee8

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

sim-rs/sim-core/src/sim/node.rs

+24-15
Original file line numberDiff line numberDiff line change
@@ -738,21 +738,30 @@ impl Node {
738738
// - the age of the EB (older EBs take priority)
739739
// - the TXs in the EB (more TXs take priority)
740740
// - the number of votes (more votes is better)
741-
let (&block, _) = self
742-
.leios
743-
.votes_by_eb
744-
.iter()
745-
.filter_map(|(eb, votes)| {
746-
if slot - eb.slot > max_eb_age || forbidden_slots.contains(&eb.slot) {
747-
return None;
748-
}
749-
let vote_count: usize = votes.values().sum();
750-
if (vote_count as u64) < vote_threshold {
751-
return None;
752-
}
753-
Some((eb, vote_count))
754-
})
755-
.max_by_key(|(eb, votes)| (slot - eb.slot, self.count_txs_in_eb(eb), *votes))?;
741+
let (&block, _) =
742+
self.leios
743+
.votes_by_eb
744+
.iter()
745+
.filter_map(|(eb, votes)| {
746+
if slot - eb.slot > max_eb_age || forbidden_slots.contains(&eb.slot) {
747+
return None;
748+
}
749+
let vote_count: usize = votes.values().sum();
750+
if (vote_count as u64) < vote_threshold {
751+
return None;
752+
}
753+
// Only select the EB if we have seen all IBs which it references
754+
let Some(EndorserBlockState::Received(eb_body)) = self.leios.ebs.get(eb) else {
755+
return None;
756+
};
757+
if eb_body.ibs.iter().any(|ib| {
758+
!matches!(self.leios.ibs.get(ib), Some(InputBlockState::Received(_)))
759+
}) {
760+
return None;
761+
}
762+
Some((eb, vote_count))
763+
})
764+
.max_by_key(|(eb, votes)| (slot - eb.slot, self.count_txs_in_eb(eb), *votes))?;
756765

757766
let (block, votes) = self.leios.votes_by_eb.remove_entry(&block)?;
758767
let bytes = self.sim_config.sizes.cert(votes.len());

0 commit comments

Comments
 (0)