|
@@ -12,10 +12,13 @@ use anyhow::{anyhow, Result};
|
|
use axum::Router;
|
|
use axum::Router;
|
|
use bip39::Mnemonic;
|
|
use bip39::Mnemonic;
|
|
use cdk::cdk_database::{self, MintDatabase};
|
|
use cdk::cdk_database::{self, MintDatabase};
|
|
-use cdk::cdk_lightning;
|
|
|
|
use cdk::cdk_lightning::MintLightning;
|
|
use cdk::cdk_lightning::MintLightning;
|
|
use cdk::mint::{FeeReserve, Mint};
|
|
use cdk::mint::{FeeReserve, Mint};
|
|
-use cdk::nuts::{ContactInfo, CurrencyUnit, MintInfo, MintVersion, Nuts, PaymentMethod};
|
|
|
|
|
|
+use cdk::nuts::{
|
|
|
|
+ nut04, nut05, ContactInfo, CurrencyUnit, MeltMethodSettings, MintInfo, MintMethodSettings,
|
|
|
|
+ MintVersion, MppMethodSettings, Nuts, PaymentMethod,
|
|
|
|
+};
|
|
|
|
+use cdk::{cdk_lightning, Amount};
|
|
use cdk_axum::LnKey;
|
|
use cdk_axum::LnKey;
|
|
use cdk_cln::Cln;
|
|
use cdk_cln::Cln;
|
|
use cdk_redb::MintRedbDatabase;
|
|
use cdk_redb::MintRedbDatabase;
|
|
@@ -100,38 +103,14 @@ async fn main() -> anyhow::Result<()> {
|
|
CARGO_PKG_VERSION.unwrap_or("Unknown").to_string(),
|
|
CARGO_PKG_VERSION.unwrap_or("Unknown").to_string(),
|
|
);
|
|
);
|
|
|
|
|
|
- let mint_info = MintInfo::new(
|
|
|
|
- settings.mint_info.name,
|
|
|
|
- settings.mint_info.pubkey,
|
|
|
|
- Some(mint_version),
|
|
|
|
- settings.mint_info.description,
|
|
|
|
- settings.mint_info.description_long,
|
|
|
|
- contact_info,
|
|
|
|
- Nuts::default(),
|
|
|
|
- settings.mint_info.motd,
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
let relative_ln_fee = settings.ln.fee_percent;
|
|
let relative_ln_fee = settings.ln.fee_percent;
|
|
|
|
|
|
let absolute_ln_fee_reserve = settings.ln.reserve_fee_min;
|
|
let absolute_ln_fee_reserve = settings.ln.reserve_fee_min;
|
|
|
|
|
|
- let mnemonic = Mnemonic::from_str(&settings.info.mnemonic)?;
|
|
|
|
-
|
|
|
|
let fee_reserve = FeeReserve {
|
|
let fee_reserve = FeeReserve {
|
|
min_fee_reserve: absolute_ln_fee_reserve,
|
|
min_fee_reserve: absolute_ln_fee_reserve,
|
|
percent_fee_reserve: relative_ln_fee,
|
|
percent_fee_reserve: relative_ln_fee,
|
|
};
|
|
};
|
|
-
|
|
|
|
- let mint = Mint::new(
|
|
|
|
- &settings.info.url,
|
|
|
|
- &mnemonic.to_seed_normalized(""),
|
|
|
|
- mint_info,
|
|
|
|
- localstore,
|
|
|
|
- absolute_ln_fee_reserve,
|
|
|
|
- relative_ln_fee,
|
|
|
|
- )
|
|
|
|
- .await?;
|
|
|
|
-
|
|
|
|
let ln: Arc<dyn MintLightning<Err = cdk_lightning::Error> + Send + Sync> =
|
|
let ln: Arc<dyn MintLightning<Err = cdk_lightning::Error> + Send + Sync> =
|
|
match settings.ln.ln_backend {
|
|
match settings.ln.ln_backend {
|
|
LnBackend::Cln => {
|
|
LnBackend::Cln => {
|
|
@@ -146,10 +125,97 @@ async fn main() -> anyhow::Result<()> {
|
|
)
|
|
)
|
|
.ok_or(anyhow!("cln socket not defined"))?;
|
|
.ok_or(anyhow!("cln socket not defined"))?;
|
|
|
|
|
|
- Arc::new(Cln::new(cln_socket, fee_reserve).await?)
|
|
|
|
|
|
+ Arc::new(Cln::new(cln_socket, fee_reserve, 1000, 1000000, 1000, 100000).await?)
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ let mut ln_backends = HashMap::new();
|
|
|
|
+
|
|
|
|
+ ln_backends.insert(
|
|
|
|
+ LnKey::new(CurrencyUnit::Sat, PaymentMethod::Bolt11),
|
|
|
|
+ Arc::clone(&ln),
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ let (nut04_settings, nut05_settings, mpp_settings): (
|
|
|
|
+ nut04::Settings,
|
|
|
|
+ nut05::Settings,
|
|
|
|
+ Vec<MppMethodSettings>,
|
|
|
|
+ ) = ln_backends.iter().fold(
|
|
|
|
+ (
|
|
|
|
+ nut04::Settings::default(),
|
|
|
|
+ nut05::Settings::default(),
|
|
|
|
+ Vec::new(),
|
|
|
|
+ ),
|
|
|
|
+ |(mut nut_04, mut nut_05, mut mpp), (key, ln)| {
|
|
|
|
+ let settings = ln.get_settings();
|
|
|
|
+
|
|
|
|
+ let m = MppMethodSettings {
|
|
|
|
+ method: key.method.clone(),
|
|
|
|
+ unit: key.unit,
|
|
|
|
+ mpp: settings.mpp,
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ let n4 = MintMethodSettings {
|
|
|
|
+ method: key.method.clone(),
|
|
|
|
+ unit: key.unit,
|
|
|
|
+ min_amount: Some(Amount::from(settings.min_mint_amount)),
|
|
|
|
+ max_amount: Some(Amount::from(settings.max_mint_amount)),
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ let n5 = MeltMethodSettings {
|
|
|
|
+ method: key.method.clone(),
|
|
|
|
+ unit: key.unit,
|
|
|
|
+ min_amount: Some(Amount::from(settings.min_melt_amount)),
|
|
|
|
+ max_amount: Some(Amount::from(settings.max_melt_amount)),
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ nut_04.methods.push(n4);
|
|
|
|
+ nut_05.methods.push(n5);
|
|
|
|
+ mpp.push(m);
|
|
|
|
+
|
|
|
|
+ (nut_04, nut_05, mpp)
|
|
|
|
+ },
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ let nuts = Nuts::new()
|
|
|
|
+ .nut04(nut04_settings)
|
|
|
|
+ .nut05(nut05_settings)
|
|
|
|
+ .nut15(mpp_settings);
|
|
|
|
+
|
|
|
|
+ let mut mint_info = MintInfo::new()
|
|
|
|
+ .name(settings.mint_info.name)
|
|
|
|
+ .version(mint_version)
|
|
|
|
+ .description(settings.mint_info.description)
|
|
|
|
+ .nuts(nuts);
|
|
|
|
+
|
|
|
|
+ if let Some(long_description) = &settings.mint_info.description_long {
|
|
|
|
+ mint_info = mint_info.long_description(long_description);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if let Some(contact_info) = contact_info {
|
|
|
|
+ mint_info = mint_info.contact_info(contact_info);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if let Some(pubkey) = settings.mint_info.pubkey {
|
|
|
|
+ mint_info = mint_info.pubkey(pubkey);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if let Some(motd) = settings.mint_info.motd {
|
|
|
|
+ mint_info = mint_info.motd(motd);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let mnemonic = Mnemonic::from_str(&settings.info.mnemonic)?;
|
|
|
|
+
|
|
|
|
+ let mint = Mint::new(
|
|
|
|
+ &settings.info.url,
|
|
|
|
+ &mnemonic.to_seed_normalized(""),
|
|
|
|
+ mint_info,
|
|
|
|
+ localstore,
|
|
|
|
+ absolute_ln_fee_reserve,
|
|
|
|
+ relative_ln_fee,
|
|
|
|
+ )
|
|
|
|
+ .await?;
|
|
|
|
+
|
|
let mint = Arc::new(mint);
|
|
let mint = Arc::new(mint);
|
|
|
|
|
|
// Check the status of any mint quotes that are pending
|
|
// Check the status of any mint quotes that are pending
|
|
@@ -166,13 +232,6 @@ async fn main() -> anyhow::Result<()> {
|
|
.seconds_quote_is_valid_for
|
|
.seconds_quote_is_valid_for
|
|
.unwrap_or(DEFAULT_QUOTE_TTL_SECS);
|
|
.unwrap_or(DEFAULT_QUOTE_TTL_SECS);
|
|
|
|
|
|
- let mut ln_backends = HashMap::new();
|
|
|
|
-
|
|
|
|
- ln_backends.insert(
|
|
|
|
- LnKey::new(CurrencyUnit::Sat, PaymentMethod::Bolt11),
|
|
|
|
- Arc::clone(&ln),
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
let v1_service =
|
|
let v1_service =
|
|
cdk_axum::create_mint_router(&mint_url, Arc::clone(&mint), ln_backends, quote_ttl).await?;
|
|
cdk_axum::create_mint_router(&mint_url, Arc::clone(&mint), ln_backends, quote_ttl).await?;
|
|
|
|
|