Cache SwapResponse, MeltBolt11Response and MintBolt11Response (#361)

* added cache to mint state and post request wrapper macro.
---------

Co-authored-by: thesimplekid <tsk@thesimplekid.com>
This commit is contained in:
lollerfirst
2024-10-05 11:18:23 +02:00
committed by GitHub
parent c0967d8079
commit c25bf79e8c
12 changed files with 149 additions and 24 deletions

View File

@@ -35,6 +35,7 @@ ln-regtest-rs = { git = "https://github.com/thesimplekid/ln-regtest-rs", rev = "
lightning-invoice = { version = "0.32.0", features = ["serde", "std"] }
tracing = { version = "0.1", default-features = false, features = ["attributes", "log"] }
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
tower-service = "0.3.3"
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
tokio = { version = "1", features = [

View File

@@ -61,10 +61,11 @@ where
);
let mint = create_mint(database, ln_backends.clone()).await?;
let cache_ttl = 3600;
let cache_tti = 3600;
let mint_arc = Arc::new(mint);
let v1_service = cdk_axum::create_mint_router(Arc::clone(&mint_arc))
let v1_service = cdk_axum::create_mint_router(Arc::clone(&mint_arc), cache_ttl, cache_tti)
.await
.unwrap();

View File

@@ -214,12 +214,17 @@ where
);
let mint = create_mint(database, ln_backends.clone()).await?;
let cache_time_to_live = 3600;
let cache_time_to_idle = 3600;
let mint_arc = Arc::new(mint);
let v1_service = cdk_axum::create_mint_router(Arc::clone(&mint_arc))
.await
.unwrap();
let v1_service = cdk_axum::create_mint_router(
Arc::clone(&mint_arc),
cache_time_to_live,
cache_time_to_idle,
)
.await
.unwrap();
let mint_service = Router::new()
.merge(v1_service)

View File

@@ -84,10 +84,17 @@ pub async fn start_mint(
supported_units,
)
.await?;
let cache_time_to_live = 3600;
let cache_time_to_idle = 3600;
let mint_arc = Arc::new(mint);
let v1_service = cdk_axum::create_mint_router(Arc::clone(&mint_arc)).await?;
let v1_service = cdk_axum::create_mint_router(
Arc::clone(&mint_arc),
cache_time_to_live,
cache_time_to_idle,
)
.await?;
let mint_service = Router::new()
.merge(v1_service)

View File

@@ -1,16 +1,17 @@
use std::{str::FromStr, sync::Arc};
use std::{str::FromStr, sync::Arc, time::Duration};
use anyhow::{bail, Result};
use bip39::Mnemonic;
use cdk::{
amount::{Amount, SplitTarget},
cdk_database::WalletMemoryDatabase,
nuts::{CurrencyUnit, MeltQuoteState, State},
wallet::Wallet,
nuts::{CurrencyUnit, MeltQuoteState, MintQuoteState, PreMintSecrets, State},
wallet::{client::HttpClient, Wallet},
};
use cdk_integration_tests::init_regtest::{get_mint_url, init_cln_client, init_lnd_client};
use lightning_invoice::Bolt11Invoice;
use ln_regtest_rs::InvoiceStatus;
use tokio::time::sleep;
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
async fn test_regtest_mint_melt_round_trip() -> Result<()> {
@@ -253,3 +254,52 @@ async fn test_internal_payment() -> Result<()> {
Ok(())
}
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
async fn test_cached_mint() -> Result<()> {
let lnd_client = init_lnd_client().await.unwrap();
let wallet = Wallet::new(
&get_mint_url(),
CurrencyUnit::Sat,
Arc::new(WalletMemoryDatabase::default()),
&Mnemonic::generate(12)?.to_seed_normalized(""),
None,
)?;
let mint_amount = Amount::from(100);
let quote = wallet.mint_quote(mint_amount, None).await?;
lnd_client.pay_invoice(quote.request).await?;
loop {
let status = wallet.mint_quote_state(&quote.id).await.unwrap();
println!("Quote status: {}", status.state);
if status.state == MintQuoteState::Paid {
break;
}
sleep(Duration::from_secs(5)).await;
}
let active_keyset_id = wallet.get_active_mint_keyset().await?.id;
let http_client = HttpClient::new();
let premint_secrets =
PreMintSecrets::random(active_keyset_id, 31.into(), &SplitTarget::default()).unwrap();
let response = http_client
.post_mint(
get_mint_url().as_str().parse()?,
&quote.id,
premint_secrets.clone(),
)
.await?;
let response1 = http_client
.post_mint(get_mint_url().as_str().parse()?, &quote.id, premint_secrets)
.await?;
assert!(response == response1);
Ok(())
}