fear: add per-wallet directory structure for persister and lwk (#413)

This commit is contained in:
yse
2024-07-25 13:59:14 +02:00
committed by GitHub
parent baa8096852
commit 14da84bd64
3 changed files with 40 additions and 9 deletions

View File

@@ -1,9 +1,16 @@
use std::path::PathBuf;
use anyhow::{anyhow, Result};
use boltz_client::network::Chain;
use boltz_client::swaps::boltz::{
CreateChainResponse, CreateReverseResponse, CreateSubmarineResponse, Leaf, Side, SwapTree,
use boltz_client::{
network::Chain,
swaps::boltz::{
CreateChainResponse, CreateReverseResponse, CreateSubmarineResponse, Leaf, Side, SwapTree,
},
ToHex,
};
use boltz_client::{BtcSwapScript, BtcSwapTx, Keypair, LBtcSwapScript, LBtcSwapTx};
use lwk_signer::SwSigner;
use lwk_wollet::ElementsNetwork;
use rusqlite::types::{FromSql, FromSqlError, FromSqlResult, ToSqlOutput, ValueRef};
use rusqlite::ToSql;
@@ -69,6 +76,16 @@ impl Config {
}
}
pub(crate) fn get_wallet_working_dir(&self, signer: &SwSigner) -> anyhow::Result<String> {
Ok(PathBuf::from(self.working_dir.clone())
.join(signer.fingerprint().to_hex())
.to_str()
.ok_or(anyhow::anyhow!(
"Could not get retrieve current wallet directory"
))?
.to_string())
}
pub fn zero_conf_max_amount_sat(&self) -> u64 {
self.zero_conf_max_amount_sat
.unwrap_or(DEFAULT_ZERO_CONF_MAX_SAT)

View File

@@ -19,6 +19,7 @@ use lwk_wollet::secp256k1::ThirtyTwoByteHash;
use lwk_wollet::{elements, ElementsNetwork};
use sdk_common::bitcoin::secp256k1::Secp256k1;
use sdk_common::bitcoin::util::bip32::ChildNumber;
use sdk_common::ensure_sdk;
use sdk_common::prelude::{FiatAPI, FiatCurrency, LnUrlPayError, LnUrlWithdrawError, Rate};
use tokio::sync::{watch, Mutex, RwLock};
use tokio::time::MissedTickBehavior;
@@ -98,7 +99,12 @@ impl LiquidSdk {
) -> Result<Arc<Self>> {
fs::create_dir_all(&config.working_dir)?;
let persister = Arc::new(Persister::new(&config.working_dir, config.network)?);
let onchain_wallet = Arc::new(LiquidOnchainWallet::new(mnemonic, config.clone())?);
let persister = Arc::new(Persister::new(
&config.get_wallet_working_dir(&onchain_wallet.lwk_signer)?,
config.network,
)?);
persister.init()?;
let event_manager = Arc::new(EventManager::new());
@@ -116,8 +122,6 @@ impl LiquidSdk {
let bitcoin_chain_service =
Arc::new(Mutex::new(HybridBitcoinChainService::new(config.clone())?));
let onchain_wallet = Arc::new(LiquidOnchainWallet::new(mnemonic, config.clone())?);
let send_swap_state_handler = SendSwapStateHandler::new(
config.clone(),
onchain_wallet.clone(),
@@ -1679,6 +1683,13 @@ impl LiquidSdk {
.backup_path
.map(PathBuf::from)
.unwrap_or(self.persister.get_default_backup_path());
ensure_sdk!(
backup_path.exists(),
SdkError::Generic {
err: "Backup file does not exist".to_string()
}
.into()
);
self.persister.restore_from_backup(backup_path)
}

View File

@@ -50,8 +50,8 @@ pub trait OnchainWallet: Send + Sync {
pub(crate) struct LiquidOnchainWallet {
wallet: Arc<Mutex<Wollet>>,
lwk_signer: SwSigner,
config: Config,
pub(crate) lwk_signer: SwSigner,
}
impl LiquidOnchainWallet {
@@ -61,8 +61,11 @@ impl LiquidOnchainWallet {
let descriptor = LiquidOnchainWallet::get_descriptor(&lwk_signer, config.network)?;
let elements_network: ElementsNetwork = config.network.into();
let lwk_persister =
FsPersister::new(config.working_dir.clone(), elements_network, &descriptor)?;
let lwk_persister = FsPersister::new(
config.get_wallet_working_dir(&lwk_signer)?,
elements_network,
&descriptor,
)?;
let wollet = Wollet::new(elements_network, lwk_persister, descriptor)?;
Ok(Self {
wallet: Arc::new(Mutex::new(wollet)),