diff --git a/Cargo.toml b/Cargo.toml index 8e0cff6d..b42e09f0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,8 @@ members = ["integration_test"] [dependencies] +bitcoin = { version = "0.30.0", features=["serde"] } +lightning-invoice = { version = "0.22.0", features=["serde"] } minreq = { version = "2.7.0", features = ["json-using-serde", "https"] } serde = { version = "1.0.160", features = ["derive"]} thiserror = "1.0.40" diff --git a/src/cashu_mint.rs b/src/cashu_mint.rs index 1cbc1008..abb584f8 100644 --- a/src/cashu_mint.rs +++ b/src/cashu_mint.rs @@ -1,3 +1,4 @@ +use lightning_invoice::Invoice; use url::Url; use crate::{ @@ -60,12 +61,10 @@ impl CashuMint { } /// Check Max expected fee [NUT-05] - pub async fn check_fees(&self, invoice: &str) -> Result { + pub async fn check_fees(&self, invoice: Invoice) -> Result { let url = self.url.join("checkfees")?; - let request = CheckFeesRequest { - pr: invoice.to_string(), - }; + let request = CheckFeesRequest { pr: invoice }; Ok(minreq::post(url) .with_json(&request)? @@ -78,14 +77,14 @@ impl CashuMint { pub async fn melt( &self, proofs: Vec, - invoice: &str, + invoice: Invoice, outputs: Option>, ) -> Result { let url = self.url.join("melt")?; let request = MeltRequest { proofs, - pr: invoice.to_string(), + pr: invoice, outputs, }; diff --git a/src/types.rs b/src/types.rs index bc5d37d0..346168fa 100644 --- a/src/types.rs +++ b/src/types.rs @@ -2,6 +2,8 @@ use std::collections::HashMap; +use bitcoin::Amount; +use lightning_invoice::Invoice; use serde::{Deserialize, Deserializer, Serialize, Serializer}; /// Blinded Message [NUT-00] @@ -18,8 +20,8 @@ pub struct BlindedMessage { #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct Promise { pub id: String, - /// Amount in satoshi - pub amount: u64, + #[serde(with = "bitcoin::amount::serde::as_sat")] + pub amount: Amount, /// blinded signature (C_) on the secret message `B_` of [BlindedMessage] #[serde(rename = "C_")] pub c: String, @@ -56,7 +58,7 @@ pub struct MintKeySets { #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct RequestMintResponse { /// Bolt11 payment request - pub pr: String, + pub pr: Invoice, /// Hash of Invoice pub hash: String, } @@ -84,7 +86,7 @@ pub struct CheckFeesResponse { #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct CheckFeesRequest { /// Lighting Invoice - pub pr: String, + pub pr: Invoice, } /// Melt Request [NUT-05] @@ -92,7 +94,7 @@ pub struct CheckFeesRequest { pub struct MeltRequest { pub proofs: Vec, /// bollt11 - pub pr: String, + pub pr: Invoice, /// Blinded Message that can be used to return change [NUT-08] /// Amount feild of blindedMessages `SHOULD` be set to zero pub outputs: Option>,