From 763e860a62c332bc49099c5416e73a1c5a7e4387 Mon Sep 17 00:00:00 2001 From: ClaytonNorthey92 Date: Tue, 24 Mar 2026 14:49:47 -0400 Subject: [PATCH] crates/trust: add public set_upstream_state_id function * add public function set_upstream_state_id to trust fixes #923 --- crates/trust/src/trust.rs | 53 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/crates/trust/src/trust.rs b/crates/trust/src/trust.rs index 1048a3444..81920be4f 100644 --- a/crates/trust/src/trust.rs +++ b/crates/trust/src/trust.rs @@ -1,8 +1,10 @@ -use crate::trust_db::{TrustDB, TrustDBError}; +use crate::trust_db::{TrustDB, TrustDBError, TrustDBTable::MetadataCF}; use bitcoin::Network; use std::path::Path; use thiserror::Error; +static DB_METADATA_KEY_UPSTREAM_STATE_ID: &str = "upstream_state_id"; + #[derive(Error, Debug)] pub enum TrustError { #[error("TrustDB error: {0}")] @@ -54,6 +56,16 @@ impl Trust { Ok(Self { db, cfg, network }) } + + pub fn set_upstream_state_id(&self, upstream_state_id: &[u8; 32]) { + self.db + .put( + &MetadataCF, + DB_METADATA_KEY_UPSTREAM_STATE_ID, + upstream_state_id, + ) + .expect("could not insert into metadata table: {e}") + } } #[cfg(test)] @@ -86,4 +98,43 @@ mod tests { other_err => panic!("unexpected error {other_err}"), } } + + #[test] + fn test_set_upstream_state_id() { + let tmp = tempdir().expect("temp dir should have been created"); + let tmp = tmp.path().to_str(); + assert!(tmp.is_some()); + + let cfg = TrustConfig::new_default_config(tmp.unwrap()); + let trust = Trust::new(cfg).unwrap(); + + trust.set_upstream_state_id(b"this_is_a_test_for_this_test_yes"); + + match trust.db.get(&MetadataCF, DB_METADATA_KEY_UPSTREAM_STATE_ID) { + Err(e) => panic!("could not get upstream state id from metadata table: {e}"), + Ok(state_id) => { + assert_eq!(state_id, b"this_is_a_test_for_this_test_yes"); + } + } + } + + #[test] + fn test_set_upstream_state_id_more_than_once() { + let tmp = tempdir().expect("temp dir should have been created"); + let tmp = tmp.path().to_str(); + assert!(tmp.is_some()); + + let cfg = TrustConfig::new_default_config(tmp.unwrap()); + let trust = Trust::new(cfg).unwrap(); + + trust.set_upstream_state_id(b"this_is_a_test_for_this_test_yes"); + trust.set_upstream_state_id(b"this_is_a_test_for_this_test____"); + + match trust.db.get(&MetadataCF, DB_METADATA_KEY_UPSTREAM_STATE_ID) { + Err(e) => panic!("could not get upstream state id from metadata table: {e}"), + Ok(state_id) => { + assert_eq!(state_id, b"this_is_a_test_for_this_test____"); + } + } + } }