From 4eda758b64bb6cf4ab8e9b3246c22f78db1a87be Mon Sep 17 00:00:00 2001 From: Sosthene Date: Thu, 10 Oct 2024 16:57:56 +0200 Subject: [PATCH] Add get_latest_commited_state method to Process --- src/process.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/process.rs b/src/process.rs index 6d111f2..5aecad4 100644 --- a/src/process.rs +++ b/src/process.rs @@ -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); }