Add get_latest_commited_state method to Process

This commit is contained in:
Sosthene 2024-10-10 16:57:56 +02:00
parent ef556fddaa
commit 4eda758b64

View File

@ -283,6 +283,37 @@ impl Process {
self.states.split_off(pos)
}
pub fn get_latest_commited_state(&self) -> Option<&ProcessState> {
if self.states.is_empty() {
return None;
}
let latest_state = self.get_latest_state().unwrap();
// a commited outpoint with an index of u32::MAX is a pending state
if latest_state.commited_in.vout != u32::MAX {
// This state is commited, there's no pending state
return Some(latest_state);
}
// We look for the last state before all the pending states
let latest_outpoint = latest_state.commited_in;
let pos = self
.states
.iter()
.position(|s| s.commited_in == latest_outpoint)
.unwrap();
if pos == 0 {
// There's no commited states, we just return None
return None;
} else {
// The state just before is last commited state
return self.get_state_at(pos-1);
}
}
pub fn insert_impending_request(&mut self, request: Prd) {
self.impending_requests.push(request);
}