feat: add wallet expple to cdk README

This commit is contained in:
thesimplekid
2024-06-30 18:00:43 +01:00
parent fa093be87c
commit bd7656581d
4 changed files with 123 additions and 1 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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()