|
|
@@ -14,7 +14,7 @@ use anyhow::{anyhow, bail, Result};
|
|
|
use axum::Router;
|
|
|
use bip39::Mnemonic;
|
|
|
// internal crate modules
|
|
|
-use cdk::cdk_database::{self, MintDatabase, MintKeysDatabase};
|
|
|
+use cdk::cdk_database::{self, MintDatabase, MintKVStore, MintKeysDatabase};
|
|
|
use cdk::cdk_payment;
|
|
|
use cdk::cdk_payment::MintPayment;
|
|
|
use cdk::mint::{Mint, MintBuilder, MintMeltLimits};
|
|
|
@@ -94,9 +94,10 @@ async fn initial_setup(
|
|
|
) -> Result<(
|
|
|
Arc<dyn MintDatabase<cdk_database::Error> + Send + Sync>,
|
|
|
Arc<dyn MintKeysDatabase<Err = cdk_database::Error> + Send + Sync>,
|
|
|
+ Arc<dyn MintKVStore<Err = cdk_database::Error> + Send + Sync>,
|
|
|
)> {
|
|
|
- let (localstore, keystore) = setup_database(settings, work_dir, db_password).await?;
|
|
|
- Ok((localstore, keystore))
|
|
|
+ let (localstore, keystore, kv) = setup_database(settings, work_dir, db_password).await?;
|
|
|
+ Ok((localstore, keystore, kv))
|
|
|
}
|
|
|
|
|
|
/// Sets up and initializes a tracing subscriber with custom log filtering.
|
|
|
@@ -253,14 +254,16 @@ async fn setup_database(
|
|
|
) -> Result<(
|
|
|
Arc<dyn MintDatabase<cdk_database::Error> + Send + Sync>,
|
|
|
Arc<dyn MintKeysDatabase<Err = cdk_database::Error> + Send + Sync>,
|
|
|
+ Arc<dyn MintKVStore<Err = cdk_database::Error> + Send + Sync>,
|
|
|
)> {
|
|
|
match settings.database.engine {
|
|
|
#[cfg(feature = "sqlite")]
|
|
|
DatabaseEngine::Sqlite => {
|
|
|
let db = setup_sqlite_database(_work_dir, _db_password).await?;
|
|
|
let localstore: Arc<dyn MintDatabase<cdk_database::Error> + Send + Sync> = db.clone();
|
|
|
+ let kv: Arc<dyn MintKVStore<Err = cdk_database::Error> + Send + Sync> = db.clone();
|
|
|
let keystore: Arc<dyn MintKeysDatabase<Err = cdk_database::Error> + Send + Sync> = db;
|
|
|
- Ok((localstore, keystore))
|
|
|
+ Ok((localstore, keystore, kv))
|
|
|
}
|
|
|
#[cfg(feature = "postgres")]
|
|
|
DatabaseEngine::Postgres => {
|
|
|
@@ -279,11 +282,13 @@ async fn setup_database(
|
|
|
let localstore: Arc<dyn MintDatabase<cdk_database::Error> + Send + Sync> =
|
|
|
pg_db.clone();
|
|
|
#[cfg(feature = "postgres")]
|
|
|
+ let kv: Arc<dyn MintKVStore<Err = cdk_database::Error> + Send + Sync> = pg_db.clone();
|
|
|
+ #[cfg(feature = "postgres")]
|
|
|
let keystore: Arc<
|
|
|
dyn MintKeysDatabase<Err = cdk_database::Error> + Send + Sync,
|
|
|
> = pg_db;
|
|
|
#[cfg(feature = "postgres")]
|
|
|
- return Ok((localstore, keystore));
|
|
|
+ return Ok((localstore, keystore, kv));
|
|
|
|
|
|
#[cfg(not(feature = "postgres"))]
|
|
|
bail!("PostgreSQL support not compiled in. Enable the 'postgres' feature to use PostgreSQL database.")
|
|
|
@@ -326,6 +331,7 @@ async fn configure_mint_builder(
|
|
|
mint_builder: MintBuilder,
|
|
|
runtime: Option<std::sync::Arc<tokio::runtime::Runtime>>,
|
|
|
work_dir: &Path,
|
|
|
+ kv_store: Option<Arc<dyn MintKVStore<Err = cdk::cdk_database::Error> + Send + Sync>>,
|
|
|
) -> Result<(MintBuilder, Vec<Router>)> {
|
|
|
let mut ln_routers = vec![];
|
|
|
|
|
|
@@ -333,9 +339,15 @@ async fn configure_mint_builder(
|
|
|
let mint_builder = configure_basic_info(settings, mint_builder);
|
|
|
|
|
|
// Configure lightning backend
|
|
|
- let mint_builder =
|
|
|
- configure_lightning_backend(settings, mint_builder, &mut ln_routers, runtime, work_dir)
|
|
|
- .await?;
|
|
|
+ let mint_builder = configure_lightning_backend(
|
|
|
+ settings,
|
|
|
+ mint_builder,
|
|
|
+ &mut ln_routers,
|
|
|
+ runtime,
|
|
|
+ work_dir,
|
|
|
+ kv_store,
|
|
|
+ )
|
|
|
+ .await?;
|
|
|
|
|
|
// Configure caching
|
|
|
let mint_builder = configure_cache(settings, mint_builder);
|
|
|
@@ -400,6 +412,7 @@ async fn configure_lightning_backend(
|
|
|
ln_routers: &mut Vec<Router>,
|
|
|
_runtime: Option<std::sync::Arc<tokio::runtime::Runtime>>,
|
|
|
work_dir: &Path,
|
|
|
+ _kv_store: Option<Arc<dyn MintKVStore<Err = cdk::cdk_database::Error> + Send + Sync>>,
|
|
|
) -> Result<MintBuilder> {
|
|
|
let mint_melt_limits = MintMeltLimits {
|
|
|
mint_min: settings.ln.min_mint,
|
|
|
@@ -418,7 +431,14 @@ async fn configure_lightning_backend(
|
|
|
.clone()
|
|
|
.expect("Config checked at load that cln is some");
|
|
|
let cln = cln_settings
|
|
|
- .setup(ln_routers, settings, CurrencyUnit::Msat, None, work_dir)
|
|
|
+ .setup(
|
|
|
+ ln_routers,
|
|
|
+ settings,
|
|
|
+ CurrencyUnit::Msat,
|
|
|
+ None,
|
|
|
+ work_dir,
|
|
|
+ None,
|
|
|
+ )
|
|
|
.await?;
|
|
|
|
|
|
mint_builder = configure_backend_for_unit(
|
|
|
@@ -434,7 +454,14 @@ async fn configure_lightning_backend(
|
|
|
LnBackend::LNbits => {
|
|
|
let lnbits_settings = settings.clone().lnbits.expect("Checked on config load");
|
|
|
let lnbits = lnbits_settings
|
|
|
- .setup(ln_routers, settings, CurrencyUnit::Sat, None, work_dir)
|
|
|
+ .setup(
|
|
|
+ ln_routers,
|
|
|
+ settings,
|
|
|
+ CurrencyUnit::Sat,
|
|
|
+ None,
|
|
|
+ work_dir,
|
|
|
+ None,
|
|
|
+ )
|
|
|
.await?;
|
|
|
|
|
|
mint_builder = configure_backend_for_unit(
|
|
|
@@ -450,7 +477,14 @@ async fn configure_lightning_backend(
|
|
|
LnBackend::Lnd => {
|
|
|
let lnd_settings = settings.clone().lnd.expect("Checked at config load");
|
|
|
let lnd = lnd_settings
|
|
|
- .setup(ln_routers, settings, CurrencyUnit::Msat, None, work_dir)
|
|
|
+ .setup(
|
|
|
+ ln_routers,
|
|
|
+ settings,
|
|
|
+ CurrencyUnit::Msat,
|
|
|
+ None,
|
|
|
+ work_dir,
|
|
|
+ None,
|
|
|
+ )
|
|
|
.await?;
|
|
|
|
|
|
mint_builder = configure_backend_for_unit(
|
|
|
@@ -469,7 +503,14 @@ async fn configure_lightning_backend(
|
|
|
|
|
|
for unit in fake_wallet.clone().supported_units {
|
|
|
let fake = fake_wallet
|
|
|
- .setup(ln_routers, settings, unit.clone(), None, work_dir)
|
|
|
+ .setup(
|
|
|
+ ln_routers,
|
|
|
+ settings,
|
|
|
+ unit.clone(),
|
|
|
+ None,
|
|
|
+ work_dir,
|
|
|
+ _kv_store.clone(),
|
|
|
+ )
|
|
|
.await?;
|
|
|
|
|
|
mint_builder = configure_backend_for_unit(
|
|
|
@@ -498,7 +539,7 @@ async fn configure_lightning_backend(
|
|
|
for unit in grpc_processor.clone().supported_units {
|
|
|
tracing::debug!("Adding unit: {:?}", unit);
|
|
|
let processor = grpc_processor
|
|
|
- .setup(ln_routers, settings, unit.clone(), None, work_dir)
|
|
|
+ .setup(ln_routers, settings, unit.clone(), None, work_dir, None)
|
|
|
.await?;
|
|
|
|
|
|
mint_builder = configure_backend_for_unit(
|
|
|
@@ -517,7 +558,14 @@ async fn configure_lightning_backend(
|
|
|
tracing::info!("Using LDK Node backend: {:?}", ldk_node_settings);
|
|
|
|
|
|
let ldk_node = ldk_node_settings
|
|
|
- .setup(ln_routers, settings, CurrencyUnit::Sat, _runtime, work_dir)
|
|
|
+ .setup(
|
|
|
+ ln_routers,
|
|
|
+ settings,
|
|
|
+ CurrencyUnit::Sat,
|
|
|
+ _runtime,
|
|
|
+ work_dir,
|
|
|
+ None,
|
|
|
+ )
|
|
|
.await?;
|
|
|
|
|
|
mint_builder = configure_backend_for_unit(
|
|
|
@@ -1015,12 +1063,12 @@ pub async fn run_mintd_with_shutdown(
|
|
|
db_password: Option<String>,
|
|
|
runtime: Option<std::sync::Arc<tokio::runtime::Runtime>>,
|
|
|
) -> Result<()> {
|
|
|
- let (localstore, keystore) = initial_setup(work_dir, settings, db_password.clone()).await?;
|
|
|
+ let (localstore, keystore, kv) = initial_setup(work_dir, settings, db_password.clone()).await?;
|
|
|
|
|
|
let mint_builder = MintBuilder::new(localstore);
|
|
|
|
|
|
let (mint_builder, ln_routers) =
|
|
|
- configure_mint_builder(settings, mint_builder, runtime, work_dir).await?;
|
|
|
+ configure_mint_builder(settings, mint_builder, runtime, work_dir, Some(kv)).await?;
|
|
|
#[cfg(feature = "auth")]
|
|
|
let mint_builder = setup_authentication(settings, work_dir, mint_builder, db_password).await?;
|
|
|
|