Skip to content
This repository was archived by the owner on Feb 3, 2025. It is now read-only.

Commit d65f815

Browse files
committed
Move device lock out of NodeManager
Another refactor for optional NodeManager. This moves the device lock out of the NodeManager so we can still enforce a single device even for fedimint only wallets.
1 parent 3615aac commit d65f815

File tree

3 files changed

+34
-33
lines changed

3 files changed

+34
-33
lines changed

mutiny-core/src/lib.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ use crate::nostr::{NostrKeySource, RELAYS};
132132
#[cfg(test)]
133133
use mockall::{automock, predicate::*};
134134

135+
pub const DEVICE_LOCK_INTERVAL_SECS: u64 = 30;
135136
const BITCOIN_PRICE_CACHE_SEC: u64 = 300;
136137
const DEFAULT_PAYMENT_TIMEOUT: u64 = 30;
137138
const MAX_FEDERATION_INVOICE_AMT: u64 = 200_000;
@@ -836,6 +837,37 @@ impl<S: MutinyStorage> MutinyWalletBuilder<S> {
836837
self.session_id,
837838
));
838839

840+
// Need to prevent other devices from running at the same time
841+
if !config.skip_device_lock {
842+
let start = Instant::now();
843+
log_trace!(logger, "Checking device lock");
844+
if let Some(lock) = self.storage.get_device_lock()? {
845+
log_info!(logger, "Current device lock: {lock:?}");
846+
}
847+
self.storage.set_device_lock().await?;
848+
log_trace!(
849+
logger,
850+
"Device lock set: took {}ms",
851+
start.elapsed().as_millis()
852+
);
853+
}
854+
855+
// spawn thread to claim device lock
856+
let storage_clone = self.storage.clone();
857+
let logger_clone = logger.clone();
858+
let stop_clone = stop.clone();
859+
spawn(async move {
860+
loop {
861+
if stop_clone.load(Ordering::Relaxed) {
862+
break;
863+
}
864+
sleep((DEVICE_LOCK_INTERVAL_SECS * 1_000) as i32).await;
865+
if let Err(e) = storage_clone.set_device_lock().await {
866+
log_error!(logger_clone, "Error setting device lock: {e}");
867+
}
868+
}
869+
});
870+
839871
let start = Instant::now();
840872

841873
let mut nm_builder = NodeManagerBuilder::new(self.xprivkey, self.storage.clone())

mutiny-core/src/nodemanager.rs

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@ use std::{collections::HashMap, ops::Deref, sync::Arc};
6363
#[cfg(target_arch = "wasm32")]
6464
use web_time::Instant;
6565

66-
pub const DEVICE_LOCK_INTERVAL_SECS: u64 = 30;
67-
6866
// This is the NodeStorage object saved to the DB
6967
#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq)]
7068
pub struct NodeStorage {
@@ -329,36 +327,6 @@ impl<S: MutinyStorage> NodeManagerBuilder<S> {
329327
.websocket_proxy_addr
330328
.unwrap_or_else(|| String::from("wss://p.mutinywallet.com"));
331329

332-
// Need to prevent other devices from running at the same time
333-
if !c.skip_device_lock {
334-
let start = Instant::now();
335-
log_trace!(logger, "Checking device lock");
336-
if let Some(lock) = self.storage.get_device_lock()? {
337-
log_info!(logger, "Current device lock: {lock:?}");
338-
}
339-
self.storage.set_device_lock().await?;
340-
log_trace!(
341-
logger,
342-
"Device lock set: took {}ms",
343-
start.elapsed().as_millis()
344-
);
345-
}
346-
347-
let storage_clone = self.storage.clone();
348-
let logger_clone = logger.clone();
349-
let stop_clone = stop.clone();
350-
utils::spawn(async move {
351-
loop {
352-
if stop_clone.load(Ordering::Relaxed) {
353-
break;
354-
}
355-
sleep((DEVICE_LOCK_INTERVAL_SECS * 1_000) as i32).await;
356-
if let Err(e) = storage_clone.set_device_lock().await {
357-
log_error!(logger_clone, "Error setting device lock: {e}");
358-
}
359-
}
360-
});
361-
362330
let start = Instant::now();
363331
log_info!(logger, "Building node manager components");
364332

mutiny-core/src/storage.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use crate::event::HTLCStatus;
2-
use crate::nodemanager::{ChannelClosure, NodeStorage, DEVICE_LOCK_INTERVAL_SECS};
2+
use crate::nodemanager::{ChannelClosure, NodeStorage};
33
use crate::utils::{now, spawn};
44
use crate::vss::{MutinyVssClient, VssKeyValueItem};
55
use crate::{blindauth::TokenStorage, logging::MutinyLogger};
66
use crate::{
77
encrypt::{decrypt_with_password, encrypt, encryption_key_from_pass, Cipher},
88
federation::FederationStorage,
9+
DEVICE_LOCK_INTERVAL_SECS,
910
};
1011
use crate::{
1112
error::{MutinyError, MutinyStorageError},

0 commit comments

Comments
 (0)