diff --git a/Cargo.toml b/Cargo.toml index dd836ea1..9f770a43 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,4 +29,5 @@ url = "2.3.1" tokio = { version = "1", default-features = false } tracing = "0.1" tracing-subscriber = "0.3" -uniffi = "0.24" \ No newline at end of file +uniffi = "0.24" + diff --git a/bindings/cashu-ffi/src/error.rs b/bindings/cashu-ffi/src/error.rs index 151a3c5d..a28441c6 100644 --- a/bindings/cashu-ffi/src/error.rs +++ b/bindings/cashu-ffi/src/error.rs @@ -52,7 +52,7 @@ impl From for CashuError { impl From for CashuError { fn from(err: cashu::nuts::nut02::Error) -> Self { Self::Generic { - err: "Nut 2 error".to_string(), + err: err.to_string(), } } } diff --git a/bindings/cashu-ffi/src/nuts/nut00/blinded_signature.rs b/bindings/cashu-ffi/src/nuts/nut00/blinded_signature.rs index ea195a3b..3775d0eb 100644 --- a/bindings/cashu-ffi/src/nuts/nut00/blinded_signature.rs +++ b/bindings/cashu-ffi/src/nuts/nut00/blinded_signature.rs @@ -23,7 +23,7 @@ impl BlindedSignature { } pub fn id(&self) -> Arc { - Arc::new(self.inner.id.clone().into()) + Arc::new(self.inner.id.into()) } pub fn amount(&self) -> Arc { diff --git a/bindings/cashu-ffi/src/nuts/nut00/proof.rs b/bindings/cashu-ffi/src/nuts/nut00/proof.rs index da10eb45..cee5a028 100644 --- a/bindings/cashu-ffi/src/nuts/nut00/proof.rs +++ b/bindings/cashu-ffi/src/nuts/nut00/proof.rs @@ -27,7 +27,7 @@ impl Proof { amount: *amount.as_ref().deref(), secret: secret.as_ref().deref().clone(), c: c.as_ref().deref().clone(), - id: id.map(|id| id.as_ref().deref().clone()), + id: id.map(|id| *id.as_ref().deref()), }, } } @@ -45,7 +45,7 @@ impl Proof { } pub fn id(&self) -> Option> { - self.inner.id.clone().map(|id| Arc::new(id.into())) + self.inner.id.map(|id| Arc::new(id.into())) } } @@ -55,7 +55,7 @@ impl From<&Proof> for ProofSdk { amount: *proof.amount().as_ref().deref(), secret: proof.secret().as_ref().deref().clone(), c: proof.c().deref().into(), - id: proof.id().map(|id| id.as_ref().deref().clone()), + id: proof.id().map(|id| *id.as_ref().deref()), } } } @@ -100,7 +100,7 @@ pub mod mint { amount: amount.map(|a| *a.as_ref().deref()), secret: secret.as_ref().deref().clone(), c: c.map(|c| c.as_ref().into()), - id: id.map(|id| id.as_ref().deref().clone()), + id: id.map(|id| *id.as_ref().deref()), }, } } @@ -118,7 +118,7 @@ pub mod mint { } pub fn id(&self) -> Option> { - self.inner.id.clone().map(|id| Arc::new(id.into())) + self.inner.id.map(|id| Arc::new(id.into())) } } diff --git a/bindings/cashu-ffi/src/nuts/nut02/key_set.rs b/bindings/cashu-ffi/src/nuts/nut02/key_set.rs index 1b96a947..b6ad5760 100644 --- a/bindings/cashu-ffi/src/nuts/nut02/key_set.rs +++ b/bindings/cashu-ffi/src/nuts/nut02/key_set.rs @@ -53,14 +53,14 @@ impl KeySet { pub fn new(id: Arc, keys: Arc) -> Self { Self { inner: KeySetSdk { - id: id.as_ref().deref().clone(), + id: *id.as_ref().deref(), keys: keys.as_ref().deref().clone(), }, } } pub fn id(&self) -> Arc { - Arc::new(self.inner.id.clone().into()) + Arc::new(self.inner.id.into()) } pub fn keys(&self) -> Arc { diff --git a/bindings/cashu-ffi/src/types/secret.rs b/bindings/cashu-ffi/src/types/secret.rs index 788028db..e7e9e0f7 100644 --- a/bindings/cashu-ffi/src/types/secret.rs +++ b/bindings/cashu-ffi/src/types/secret.rs @@ -13,6 +13,12 @@ impl Deref for Secret { } } +impl Default for Secret { + fn default() -> Self { + Self::new() + } +} + impl Secret { pub fn new() -> Self { Self { diff --git a/bindings/cashu-sdk-ffi/src/lib.rs b/bindings/cashu-sdk-ffi/src/lib.rs index 7cca8e35..792cac22 100644 --- a/bindings/cashu-sdk-ffi/src/lib.rs +++ b/bindings/cashu-sdk-ffi/src/lib.rs @@ -17,7 +17,7 @@ mod ffi { pub use crate::client::Client; pub use crate::error::CashuSdkError; pub use crate::mint::Mint; - pub use crate::types::{FeeReserve, Melted, ProofsStatus, SendProofs}; + pub use crate::types::{Melted, ProofsStatus, SendProofs}; pub use crate::wallet::Wallet; // UDL diff --git a/bindings/cashu-sdk-ffi/src/mint.rs b/bindings/cashu-sdk-ffi/src/mint.rs index c9468f43..98ec83b8 100644 --- a/bindings/cashu-sdk-ffi/src/mint.rs +++ b/bindings/cashu-sdk-ffi/src/mint.rs @@ -4,17 +4,14 @@ use std::{ sync::{Arc, RwLock}, }; -use cashu_sdk::mint::Mint as MintSdk; - -use cashu_sdk::nuts::nut02::Id as IdSdk; -use fee_reserve::FeeReserve; - -use crate::{error::Result, types::fee_reserve}; use cashu_ffi::{ Amount, CheckSpendableRequest, CheckSpendableResponse, Id, KeySet, KeySetResponse, MeltRequest, - MeltResponse, MintKeySet, MintRequest, PostMintResponse, Proof, Secret, SplitRequest, - SplitResponse, + MeltResponse, MintKeySet, MintRequest, PostMintResponse, Secret, SplitRequest, SplitResponse, }; +use cashu_sdk::mint::Mint as MintSdk; +use cashu_sdk::nuts::nut02::Id as IdSdk; + +use crate::error::Result; pub struct Mint { inner: RwLock, diff --git a/bindings/cashu-sdk-ffi/src/types/fee_reserve.rs b/bindings/cashu-sdk-ffi/src/types/fee_reserve.rs deleted file mode 100644 index e2916cad..00000000 --- a/bindings/cashu-sdk-ffi/src/types/fee_reserve.rs +++ /dev/null @@ -1,19 +0,0 @@ -use std::{ops::Deref, sync::Arc}; - -use cashu_ffi::Amount; -use cashu_sdk::mint::FeeReserve as FeeReserveSdk; - -pub struct FeeReserve { - inner: FeeReserveSdk, -} - -impl FeeReserve { - pub fn new(min_fee_reserve: Arc, percent_fee_reserve: f32) -> Self { - Self { - inner: FeeReserveSdk { - min_fee_reserve: *min_fee_reserve.as_ref().deref(), - percent_fee_reserve, - }, - } - } -} diff --git a/bindings/cashu-sdk-ffi/src/types/mod.rs b/bindings/cashu-sdk-ffi/src/types/mod.rs index cac1f822..88836ac7 100644 --- a/bindings/cashu-sdk-ffi/src/types/mod.rs +++ b/bindings/cashu-sdk-ffi/src/types/mod.rs @@ -1,9 +1,7 @@ -pub mod fee_reserve; pub mod melted; pub mod proofs_status; pub mod send_proofs; -pub use fee_reserve::FeeReserve; pub use melted::Melted; pub use proofs_status::ProofsStatus; pub use send_proofs::SendProofs; diff --git a/crates/cashu/src/nuts/nut02.rs b/crates/cashu/src/nuts/nut02.rs index 92d2739b..bb67b3a4 100644 --- a/crates/cashu/src/nuts/nut02.rs +++ b/crates/cashu/src/nuts/nut02.rs @@ -2,6 +2,7 @@ // https://github.com/cashubtc/nuts/blob/main/02.md use std::collections::HashSet; +use std::fmt; use base64::{engine::general_purpose, Engine as _}; use bitcoin::hashes::sha256; @@ -17,6 +18,15 @@ pub enum Error { Length, } +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Length => write!(f, "NUT02: Id invalid length"), + Self::Base64(err) => write!(f, "NUT02: {:?}", err), + } + } +} + /// A keyset ID is an identifier for a specific keyset. It can be derived by /// anyone who knows the set of public keys of a mint. The keyset ID **CAN** /// be stored in a Cashu token such that the token can be used to identify