in librabft-v2/src/record_store.rs [426:454]
fn compute_state(
&self,
block_hash: BlockHash<Context::HashValue>,
context: &mut Context,
) -> Option<Context::State> {
let block = self.block(block_hash).unwrap();
let (previous_state, previous_voters, previous_author) = {
if block.value.previous_quorum_certificate_hash == self.initial_hash {
(&self.initial_state, None, Vec::new())
} else {
let previous_qc = self
.quorum_certificate(block.value.previous_quorum_certificate_hash)
.unwrap();
let voters = previous_qc.value.votes.iter().map(|x| x.0).collect();
(
&previous_qc.value.state,
Some(previous_qc.value.author),
voters,
)
}
};
context.compute(
previous_state,
block.value.command.clone(),
block.value.time,
previous_voters,
previous_author,
)
}