init_fake_wallet.rs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. use std::{
  2. collections::{HashMap, HashSet},
  3. sync::Arc,
  4. };
  5. use anyhow::Result;
  6. use axum::Router;
  7. use cdk::{
  8. cdk_database::{self, MintDatabase},
  9. cdk_lightning::MintLightning,
  10. mint::FeeReserve,
  11. nuts::{CurrencyUnit, MeltMethodSettings, MintMethodSettings},
  12. types::LnKey,
  13. };
  14. use cdk_fake_wallet::FakeWallet;
  15. use tokio::sync::Notify;
  16. use tower_http::cors::CorsLayer;
  17. use tracing_subscriber::EnvFilter;
  18. use crate::init_regtest::create_mint;
  19. pub async fn start_fake_mint<D>(addr: &str, port: u16, database: D) -> Result<()>
  20. where
  21. D: MintDatabase<Err = cdk_database::Error> + Send + Sync + 'static,
  22. {
  23. let default_filter = "debug";
  24. let sqlx_filter = "sqlx=warn";
  25. let hyper_filter = "hyper=warn";
  26. let env_filter = EnvFilter::new(format!(
  27. "{},{},{}",
  28. default_filter, sqlx_filter, hyper_filter
  29. ));
  30. // Parse input
  31. tracing_subscriber::fmt().with_env_filter(env_filter).init();
  32. let mut ln_backends: HashMap<
  33. LnKey,
  34. Arc<dyn MintLightning<Err = cdk::cdk_lightning::Error> + Sync + Send>,
  35. > = HashMap::new();
  36. let fee_reserve = FeeReserve {
  37. min_fee_reserve: 1.into(),
  38. percent_fee_reserve: 1.0,
  39. };
  40. let fake_wallet = FakeWallet::new(
  41. fee_reserve,
  42. MintMethodSettings::default(),
  43. MeltMethodSettings::default(),
  44. HashMap::default(),
  45. HashSet::default(),
  46. 0,
  47. );
  48. ln_backends.insert(
  49. LnKey::new(CurrencyUnit::Sat, cdk::nuts::PaymentMethod::Bolt11),
  50. Arc::new(fake_wallet),
  51. );
  52. let mint = create_mint(database, ln_backends.clone()).await?;
  53. let cache_ttl = 3600;
  54. let cache_tti = 3600;
  55. let mint_arc = Arc::new(mint);
  56. let v1_service = cdk_axum::create_mint_router(Arc::clone(&mint_arc), cache_ttl, cache_tti)
  57. .await
  58. .unwrap();
  59. let mint_service = Router::new()
  60. .merge(v1_service)
  61. .layer(CorsLayer::permissive());
  62. let mint = Arc::clone(&mint_arc);
  63. let shutdown = Arc::new(Notify::new());
  64. tokio::spawn({
  65. let shutdown = Arc::clone(&shutdown);
  66. async move { mint.wait_for_paid_invoices(shutdown).await }
  67. });
  68. println!("Staring Axum server");
  69. axum::Server::bind(&format!("{}:{}", addr, port).as_str().parse().unwrap())
  70. .serve(mint_service.into_make_service())
  71. .await?;
  72. Ok(())
  73. }