iuna

iuna - experimental devnet protocol
git clone https://iuna.jhx.app/git/iuna.git
Log | Files | Refs | README | LICENSE

wallet_persistence.rs (1602B)


      1 use std::time::Duration;
      2 
      3 use tokio::time::sleep;
      4 
      5 use crate::adapters::wallet_store;
      6 
      7 use super::{HttpState, now_ms};
      8 
      9 pub(super) async fn run_owned_blinded_outbox_persistence(state: HttpState) {
     10     loop {
     11         sleep(Duration::from_millis(500)).await;
     12         let (version, entries) = {
     13             let node = state.node.lock().await;
     14             let version = node.owned_blinded_outbox_version();
     15             if version == 0 {
     16                 continue;
     17             }
     18             (version, node.owned_blinded_transactions())
     19         };
     20         let password = wallet_persistence_password(&state).await;
     21         match wallet_store::replace_owned_blinded_transactions(
     22             &state.wallet_path,
     23             password.as_deref(),
     24             entries,
     25         ) {
     26             Ok(()) => {
     27                 state
     28                     .node
     29                     .lock()
     30                     .await
     31                     .mark_owned_blinded_outbox_persisted(version);
     32             }
     33             Err(error) if format!("{error:#}").contains("wallet is encrypted") => {}
     34             Err(error) => eprintln!("failed to persist owned blinded transactions: {error:#}"),
     35         }
     36     }
     37 }
     38 
     39 async fn wallet_persistence_password(state: &HttpState) -> Option<String> {
     40     let metadata = wallet_store::metadata(&state.wallet_path).ok().flatten()?;
     41     if !metadata.encrypted {
     42         return None;
     43     }
     44     let now = now_ms();
     45     state
     46         .auth_sessions
     47         .lock()
     48         .await
     49         .values()
     50         .find(|session| session.expires_at > now)
     51         .map(|session| session.wallet_password.clone())
     52 }