mirror of
https://github.com/aljazceru/cdk.git
synced 2025-12-24 08:05:02 +01:00
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:
@@ -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 = [
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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("e.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()?,
|
||||
"e.id,
|
||||
premint_secrets.clone(),
|
||||
)
|
||||
.await?;
|
||||
let response1 = http_client
|
||||
.post_mint(get_mint_url().as_str().parse()?, "e.id, premint_secrets)
|
||||
.await?;
|
||||
|
||||
assert!(response == response1);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user