mint.rs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. //! Mint integration tests
  2. use std::sync::Arc;
  3. use std::time::Duration;
  4. use anyhow::{bail, Result};
  5. use bip39::Mnemonic;
  6. use cdk::amount::SplitTarget;
  7. use cdk::cdk_database::WalletMemoryDatabase;
  8. use cdk::nuts::CurrencyUnit;
  9. use cdk::wallet::SendKind;
  10. use cdk::Error;
  11. use cdk::Wallet;
  12. use cdk_integration_tests::{create_backends_fake_wallet, start_mint, wallet_mint, MINT_URL};
  13. #[tokio::test(flavor = "multi_thread", worker_threads = 1)]
  14. pub async fn test_mint_double_receive() -> Result<()> {
  15. tokio::spawn(async move {
  16. let ln_backends = create_backends_fake_wallet();
  17. start_mint(ln_backends).await.expect("Could not start mint")
  18. });
  19. tokio::time::sleep(Duration::from_millis(500)).await;
  20. let mnemonic = Mnemonic::generate(12)?;
  21. let wallet = Wallet::new(
  22. MINT_URL,
  23. CurrencyUnit::Sat,
  24. Arc::new(WalletMemoryDatabase::default()),
  25. &mnemonic.to_seed_normalized(""),
  26. None,
  27. )?;
  28. let wallet = Arc::new(wallet);
  29. wallet_mint(Arc::clone(&wallet), 100.into()).await.unwrap();
  30. println!("Minted");
  31. let token = wallet
  32. .send(
  33. 10.into(),
  34. None,
  35. None,
  36. &SplitTarget::default(),
  37. &SendKind::default(),
  38. false,
  39. )
  40. .await
  41. .unwrap();
  42. let mnemonic = Mnemonic::generate(12)?;
  43. let wallet_two = Wallet::new(
  44. MINT_URL,
  45. CurrencyUnit::Sat,
  46. Arc::new(WalletMemoryDatabase::default()),
  47. &mnemonic.to_seed_normalized(""),
  48. None,
  49. )?;
  50. let rec = wallet_two
  51. .receive(&token.to_string(), SplitTarget::default(), &[], &[])
  52. .await?;
  53. println!("Received: {}", rec);
  54. // Attempt to receive again
  55. if let Err(err) = wallet
  56. .receive(&token.to_string(), SplitTarget::default(), &[], &[])
  57. .await
  58. {
  59. match err {
  60. Error::TokenAlreadySpent => (),
  61. _ => {
  62. println!("{}", err);
  63. bail!("Expected an already spent error");
  64. }
  65. }
  66. }
  67. Ok(())
  68. }