Skip to content

Commit b473226

Browse files
authored
Merge pull request #100 from EthanYuan/fix-vss-key-not-found
fix: handle vss key not found
2 parents e7a7156 + 8fd9ca9 commit b473226

File tree

7 files changed

+42
-10
lines changed

7 files changed

+42
-10
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mutiny-core/src/error.rs

+2
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ pub enum MutinyError {
180180
JwtAuthFailure,
181181
#[error("Failed to parse VSS value from getObject response.")]
182182
FailedParsingVssValue,
183+
#[error("VSS key not found.")]
184+
VssKeyNotFound,
183185
#[error("Device lock changed when connecting.")]
184186
DeviceLockChangedWhenConnecting,
185187
#[error(transparent)]

mutiny-core/src/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -929,6 +929,9 @@ impl<S: MutinyStorage> MutinyWalletBuilder<S> {
929929
}
930930
}
931931
}
932+
Err(MutinyError::VssKeyNotFound) => {
933+
log_info!(logger, "VSS key not found, retrying... {retries}");
934+
}
932935
Err(MutinyError::FailedParsingVssValue) => {
933936
log_info!(logger, "Failed to parse VSS value, retrying... {retries}");
934937
}

mutiny-core/src/storage.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,19 @@ pub trait MutinyStorage: Clone + Sized + Send + Sync + 'static {
557557
) -> Result<(), MutinyError> {
558558
let device = self.get_device_id()?;
559559
let device_description = self.get_device_description();
560-
if let Some(lock) = self.fetch_device_lock().await? {
560+
561+
let lock = match self.fetch_device_lock().await {
562+
Ok(lock) => lock,
563+
Err(MutinyError::VssKeyNotFound) => {
564+
log_debug!(logger, "Vss device lock not yet created, proceeding...");
565+
None
566+
}
567+
Err(e) => {
568+
return Err(e);
569+
}
570+
};
571+
572+
if let Some(lock) = lock {
561573
if lock.is_locked(&device) {
562574
log_debug!(logger, "current device is {}", device);
563575
log_debug!(logger, "locked device is {}", lock.device);

mutiny-core/src/vss.rs

+19-7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use anyhow::anyhow;
77
use bitcoin::secp256k1::{Secp256k1, SecretKey};
88
use hex_conservative::DisplayHex;
99
use lightning::util::logger::*;
10-
use lightning::{log_error, log_info, log_warn};
10+
use lightning::{log_debug, log_error, log_info, log_warn};
1111
use reqwest::{Method, Url};
1212
use serde::{Deserialize, Serialize};
1313
use serde_json::{json, Value};
@@ -170,12 +170,24 @@ impl MutinyVssClient {
170170

171171
let body = json!({ "store_id": self.store_id, "key": key });
172172

173-
let result: EncryptedVssKeyValueItem = self
174-
.make_request(Method::POST, url, Some(body))
175-
.await?
176-
.json()
177-
.await
178-
.map_err(|e| {
173+
let response = self.make_request(Method::POST, url, Some(body)).await?;
174+
175+
let response_text = response.text().await.map_err(|e| {
176+
log_error!(self.logger, "Error reading response body: {e}");
177+
MutinyError::FailedParsingVssValue
178+
})?;
179+
180+
if response_text == "null" {
181+
log_debug!(
182+
self.logger,
183+
"Vss key not found, response is 'null' for key: {}",
184+
key
185+
);
186+
return Err(MutinyError::VssKeyNotFound);
187+
}
188+
189+
let result: EncryptedVssKeyValueItem =
190+
serde_json::from_str(&response_text).map_err(|e| {
179191
log_error!(self.logger, "Error parsing get objects response: {e}");
180192
MutinyError::FailedParsingVssValue
181193
})?;

mutiny-wasm/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cargo-features = ["per-package-target"]
22

33
[package]
44
name = "mutiny-wasm"
5-
version = "1.14.2"
5+
version = "1.14.3"
66
edition = "2021"
77
authors = ["utxostack"]
88
forced-target = "wasm32-unknown-unknown"

mutiny-wasm/src/error.rs

+3
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,8 @@ pub enum MutinyJsError {
190190
JwtAuthFailure,
191191
#[error("Failed to parse VSS value from getObject response.")]
192192
FailedParsingVssValue,
193+
#[error("VSS key not found.")]
194+
VssKeyNotFound,
193195
#[error("Device lock has changed when connecting.")]
194196
DeviceLockChangedWhenConnecting,
195197
#[error("Cannot have more than one node.")]
@@ -262,6 +264,7 @@ impl From<MutinyError> for MutinyJsError {
262264
MutinyError::InvalidHex => MutinyJsError::InvalidHex,
263265
MutinyError::JwtAuthFailure => MutinyJsError::JwtAuthFailure,
264266
MutinyError::FailedParsingVssValue => MutinyJsError::FailedParsingVssValue,
267+
MutinyError::VssKeyNotFound => MutinyJsError::VssKeyNotFound,
265268
MutinyError::DeviceLockChangedWhenConnecting => {
266269
MutinyJsError::DeviceLockChangedWhenConnecting
267270
}

0 commit comments

Comments
 (0)