Browse Source

feat: add wallet expple to cdk README

thesimplekid 8 months ago
parent
commit
bd7656581d
4 changed files with 123 additions and 1 deletions
  1. 4 0
      crates/cdk/Cargo.toml
  2. 64 0
      crates/cdk/README.md
  3. 55 0
      crates/cdk/examples/wallet.rs
  4. 0 1
      crates/cdk/src/nuts/nut06.rs

+ 4 - 0
crates/cdk/Cargo.toml

@@ -61,6 +61,10 @@ required-features = ["wallet"]
 name = "p2pk"
 required-features = ["wallet"]
 
+[[example]]
+name = "wallet"
+required-features = ["wallet"]
+
 [dev-dependencies]
 rand = "0.8.5"
 bip39.workspace = true

+ 64 - 0
crates/cdk/README.md

@@ -18,6 +18,70 @@ The following crate feature flags are available:
 
 See <https://github.com/cashubtc/cdk/blob/main/README.md>
 
+## Examples
+
+```rust
+//! Wallet example with memory store
+
+use std::sync::Arc;
+use std::time::Duration;
+
+use cdk::amount::SplitTarget;
+use cdk::cdk_database::WalletMemoryDatabase;
+use cdk::nuts::{CurrencyUnit, MintQuoteState};
+use cdk::wallet::Wallet;
+use cdk::Amount;
+use rand::Rng;
+use tokio::time::sleep;
+
+#[tokio::main]
+async fn main() {
+    let seed = rand::thread_rng().gen::<[u8; 32]>();
+
+    let mint_url = "https://testnut.cashu.space";
+    let unit = CurrencyUnit::Sat;
+    let amount = Amount::from(10);
+
+    let localstore = WalletMemoryDatabase::default();
+
+    let wallet = Wallet::new(mint_url, unit.clone(), Arc::new(localstore), &seed);
+
+    let quote = wallet.mint_quote(amount).await.unwrap();
+
+    println!("Pay request: {}", quote.request);
+
+    loop {
+        let status = wallet.mint_quote_state(&quote.id).await.unwrap();
+
+        if status.state == MintQuoteState::Paid {
+            break;
+        }
+
+        println!("Quote state: {}", status.state);
+
+        sleep(Duration::from_secs(5)).await;
+    }
+
+    let receive_amount = wallet
+        .mint(&quote.id, SplitTarget::default(), None)
+        .await
+        .unwrap();
+
+    println!("Minted {}", receive_amount);
+
+    let token = wallet
+        .send(amount, None, None, &SplitTarget::None)
+        .await
+        .unwrap();
+
+    println!("{}", token);
+}
+
+```
+
+See more examples in the [examples](./examples) folder.
+
+
 ## License
 
 This project is distributed under the MIT software license - see the [LICENSE](../../LICENSE) file for details

+ 55 - 0
crates/cdk/examples/wallet.rs

@@ -0,0 +1,55 @@
+//! Wallet example with memory store
+
+use std::sync::Arc;
+use std::time::Duration;
+
+use cdk::amount::SplitTarget;
+use cdk::cdk_database::WalletMemoryDatabase;
+use cdk::nuts::{CurrencyUnit, MintQuoteState};
+use cdk::wallet::Wallet;
+use cdk::Amount;
+use rand::Rng;
+use tokio::time::sleep;
+
+#[tokio::main]
+async fn main() {
+    let seed = rand::thread_rng().gen::<[u8; 32]>();
+
+    let mint_url = "https://testnut.cashu.space";
+    let unit = CurrencyUnit::Sat;
+    let amount = Amount::from(10);
+
+    let localstore = WalletMemoryDatabase::default();
+
+    let wallet = Wallet::new(mint_url, unit.clone(), Arc::new(localstore), &seed);
+
+    let quote = wallet.mint_quote(amount).await.unwrap();
+
+    println!("Pay request: {}", quote.request);
+
+    loop {
+        let status = wallet.mint_quote_state(&quote.id).await.unwrap();
+
+        if status.state == MintQuoteState::Paid {
+            break;
+        }
+
+        println!("Quote state: {}", status.state);
+
+        sleep(Duration::from_secs(5)).await;
+    }
+
+    let receive_amount = wallet
+        .mint(&quote.id, SplitTarget::default(), None)
+        .await
+        .unwrap();
+
+    println!("Minted {}", receive_amount);
+
+    let token = wallet
+        .send(amount, None, None, &SplitTarget::None)
+        .await
+        .unwrap();
+
+    println!("{}", token);
+}

+ 0 - 1
crates/cdk/src/nuts/nut06.rs

@@ -175,7 +175,6 @@ where
                     let vec = value
                         .as_array()
                         .ok_or_else(|| de::Error::custom("expected a list of strings"))?;
-                    println!("{:?}", vec[0]);
                     for val in vec {
                         let vec = val
                             .as_array()