mint-token.rs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. use std::sync::Arc;
  2. use std::time::Duration;
  3. use cdk::amount::SplitTarget;
  4. use cdk::cdk_database::WalletMemoryDatabase;
  5. use cdk::error::Error;
  6. use cdk::nuts::{CurrencyUnit, MintQuoteState};
  7. use cdk::wallet::types::SendKind;
  8. use cdk::wallet::Wallet;
  9. use cdk::Amount;
  10. use rand::Rng;
  11. use tokio::time::sleep;
  12. #[tokio::main]
  13. async fn main() -> Result<(), Error> {
  14. let localstore = WalletMemoryDatabase::default();
  15. let seed = rand::thread_rng().gen::<[u8; 32]>();
  16. let mint_url = "https://testnut.cashu.space";
  17. let unit = CurrencyUnit::Sat;
  18. let amount = Amount::from(10);
  19. let wallet = Wallet::new(mint_url, unit, Arc::new(localstore), &seed, None).unwrap();
  20. let quote = wallet.mint_quote(amount, None).await.unwrap();
  21. println!("Quote: {:#?}", quote);
  22. loop {
  23. let status = wallet.mint_quote_state(&quote.id).await.unwrap();
  24. println!("Quote status: {}", status.state);
  25. if status.state == MintQuoteState::Paid {
  26. break;
  27. }
  28. sleep(Duration::from_secs(5)).await;
  29. }
  30. let receive_amount = wallet
  31. .mint(&quote.id, SplitTarget::default(), None)
  32. .await
  33. .unwrap();
  34. println!("Received {receive_amount} from mint {mint_url}");
  35. let token = wallet
  36. .send(
  37. amount,
  38. None,
  39. None,
  40. &SplitTarget::default(),
  41. &SendKind::OnlineExact,
  42. false,
  43. )
  44. .await
  45. .unwrap();
  46. println!("Token:");
  47. println!("{}", token);
  48. Ok(())
  49. }