mirror of
https://github.com/aljazceru/breez-sdk-liquid.git
synced 2026-01-10 17:44:22 +01:00
fear: add per-wallet directory structure for persister and lwk (#413)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)),
|
||||
|
||||
Reference in New Issue
Block a user