1use lightning_signer::persist::{ExternalPersistHelper, SimpleEntropy};
2use std::collections::BTreeMap;
3use std::sync::{Arc, Mutex};
4use tokio::sync::Mutex as AsyncMutex;
5use vls_frontend::external_persist::ExternalPersist;
6
7#[derive(Clone)]
12pub struct ExternalPersistWithHelper {
13 pub persist_client: Arc<AsyncMutex<Box<dyn ExternalPersist>>>,
14 pub state: Arc<Mutex<BTreeMap<String, (u64, Vec<u8>)>>>,
15 pub helper: ExternalPersistHelper,
16}
17
18impl ExternalPersistWithHelper {
19 pub async fn init_state(&self) {
20 let client = self.persist_client.lock().await;
21 let entropy = SimpleEntropy::new();
22 let mut helper = self.helper.clone();
23 let nonce = helper.new_nonce(&entropy);
24 let (muts, server_hmac) = client.get("".to_string(), &nonce).await.unwrap();
25 let success = helper.check_hmac(&muts, server_hmac);
26 assert!(success, "server hmac mismatch on get");
27 let mut local = self.state.lock().unwrap();
28 for (key, version_value) in muts.into_iter() {
29 local.insert(key, version_value);
30 }
31 }
32}