diff --git a/crates/cashu/src/nuts/nut00/mod.rs b/crates/cashu/src/nuts/nut00/mod.rs index bc30a8ec..a3b3a424 100644 --- a/crates/cashu/src/nuts/nut00/mod.rs +++ b/crates/cashu/src/nuts/nut00/mod.rs @@ -281,12 +281,12 @@ impl PartialOrd for BlindSignature { #[serde(untagged)] #[cfg_attr(feature = "swagger", derive(utoipa::ToSchema))] pub enum Witness { - /// P2PK Witness - #[serde(with = "serde_p2pk_witness")] - P2PKWitness(P2PKWitness), /// HTLC Witness #[serde(with = "serde_htlc_witness")] HTLCWitness(HTLCWitness), + /// P2PK Witness + #[serde(with = "serde_p2pk_witness")] + P2PKWitness(P2PKWitness), } impl From for Witness { @@ -1042,4 +1042,28 @@ mod tests { assert_eq!(method, deserialized); } } + + #[test] + fn test_witness_serialization() { + let htlc_witness = HTLCWitness { + preimage: "preimage".to_string(), + signatures: Some(vec!["sig1".to_string()]), + }; + let witness = Witness::HTLCWitness(htlc_witness); + + let serialized = serde_json::to_string(&witness).unwrap(); + let deserialized: Witness = serde_json::from_str(&serialized).unwrap(); + + assert!(matches!(deserialized, Witness::HTLCWitness(_))); + + let p2pk_witness = P2PKWitness { + signatures: vec!["sig1".to_string(), "sig2".to_string()], + }; + let witness = Witness::P2PKWitness(p2pk_witness); + + let serialized = serde_json::to_string(&witness).unwrap(); + let deserialized: Witness = serde_json::from_str(&serialized).unwrap(); + + assert!(matches!(deserialized, Witness::P2PKWitness(_))); + } } diff --git a/crates/cashu/src/nuts/nut14/mod.rs b/crates/cashu/src/nuts/nut14/mod.rs index fd52d902..e647e7e0 100644 --- a/crates/cashu/src/nuts/nut14/mod.rs +++ b/crates/cashu/src/nuts/nut14/mod.rs @@ -55,7 +55,7 @@ pub enum Error { #[derive(Default, Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] #[cfg_attr(feature = "swagger", derive(utoipa::ToSchema))] pub struct HTLCWitness { - /// Primage + /// Preimage pub preimage: String, /// Signatures #[serde(skip_serializing_if = "Option::is_none")] @@ -139,9 +139,15 @@ impl Proof { /// Add Preimage #[inline] pub fn add_preimage(&mut self, preimage: String) { + let signatures = self + .witness + .as_ref() + .map(|w| w.signatures()) + .unwrap_or_default(); + self.witness = Some(Witness::HTLCWitness(HTLCWitness { preimage, - signatures: None, + signatures, })) } }