sphinx-key: save previous msgs to sd card

This commit is contained in:
irriden
2023-09-05 20:08:22 +00:00
parent 26c5f2a9e8
commit b39e321f39

View File

@@ -11,7 +11,7 @@ use lss_connector::secp256k1::PublicKey;
use sphinx_signer::approver::SphinxApprover;
use sphinx_signer::lightning_signer::bitcoin::Network;
//use sphinx_signer::lightning_signer::persist::DummyPersister;
use sphinx_signer::kvv::{CloudKVVStore, FsKVVStore};
use sphinx_signer::kvv::{CloudKVVStore, FsKVVStore, KVVStore};
use sphinx_signer::lightning_signer::persist::Persist;
use sphinx_signer::root::VlsHandlerError;
use sphinx_signer::sphinx_glyph as glyph;
@@ -100,6 +100,7 @@ pub fn make_event_loop(
}
let kvv_store = FsKVVStore::new(&ROOT_STORE, None).0;
let msg_store = FsKVVStore::new(&ROOT_STORE, None).0;
let fs_persister = CloudKVVStore::new(kvv_store);
let _ = fs_persister.enter();
@@ -187,6 +188,12 @@ pub fn make_event_loop(
} else {
// muts! send LSS first!
mqtt_pub(&mut mqtt, client_id, topics::LSS_RES, &lss_b);
msg_store
.put("vls_b", &vls_b)
.map_err(|_e| anyhow::anyhow!("failed to put vls_b"))?;
msg_store
.put("lss_b", &lss_b)
.map_err(|_e| anyhow::anyhow!("failed to put lss_b"))?;
msgs = Some((vls_b, lss_b));
}
expected_sequence = Some(sequence + 1);
@@ -220,6 +227,20 @@ pub fn make_event_loop(
}
}
Event::LssMessage(msg_bytes) => {
if msgs.is_none() {
log::warn!("Restoring previous message from sd card");
let vls_b = msg_store
.get("vls_b")
.map_err(|e| anyhow::anyhow!("failed to get vls_b: {:?}", e))?
.ok_or(anyhow::anyhow!("vls_b is none"))?
.1;
let lss_b = msg_store
.get("lss_b")
.map_err(|e| anyhow::anyhow!("failed to get lss_b: {:?}", e))?
.ok_or(anyhow::anyhow!("lss_b is none"))?
.1;
msgs = Some((vls_b, lss_b));
}
match lss::handle_lss_msg(&msg_bytes, msgs, &lss_signer) {
Ok((ret_topic, bytes)) => {
// set msgs back to None
@@ -230,6 +251,8 @@ pub fn make_event_loop(
}
}
Err(e) => {
log::error!("LSS MESSAGE FAILED!");
log::error!("{}", &e.to_string());
msgs = None;
let err_msg = GlyphError::new(1, &e.to_string());
mqtt_pub(&mut mqtt, client_id, topics::ERROR, &err_msg.to_vec()[..]);