From 037319ce55c5975ae2f34fa7d08b0068bc6a4f0b Mon Sep 17 00:00:00 2001 From: thesimplekid Date: Wed, 8 May 2024 16:44:03 +0100 Subject: [PATCH] feat: htlc and p2pk witness --- bindings/cdk-js/src/nuts/nut00/witness.rs | 39 +++++++++++++++++------ 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/bindings/cdk-js/src/nuts/nut00/witness.rs b/bindings/cdk-js/src/nuts/nut00/witness.rs index 1aa26546..867846b7 100644 --- a/bindings/cdk-js/src/nuts/nut00/witness.rs +++ b/bindings/cdk-js/src/nuts/nut00/witness.rs @@ -1,28 +1,47 @@ use std::ops::Deref; -use cdk::nuts::Witness; +use cdk::nuts::{HTLCWitness, P2PKWitness, Witness}; use wasm_bindgen::prelude::*; -// use crate::nuts::{JsHTLCWitness, JsP2PKWitness}; +use crate::error::Result; #[wasm_bindgen(js_name = Witness)] -pub enum JsWitness { - JsHTLCWitness, - JsP2PKWitness, +pub struct JsWitness { + inner: Witness, } impl Deref for JsWitness { type Target = Witness; fn deref(&self) -> &Self::Target { - todo!() + &self.inner } } impl From for JsWitness { fn from(inner: Witness) -> JsWitness { - match inner { - Witness::P2PKWitness(_) => JsWitness::JsP2PKWitness, - Witness::HTLCWitness(_) => JsWitness::JsHTLCWitness, - } + JsWitness { inner } + } +} + +#[wasm_bindgen(js_class = Witness)] +impl JsWitness { + #[wasm_bindgen(constructor)] + pub fn new(preimage: Option, signatures: Option>) -> Result { + match preimage { + Some(preimage) => Ok(Witness::HTLCWitness(HTLCWitness { + preimage, + signatures, + }) + .into()), + None => Ok(Witness::P2PKWitness(P2PKWitness { + signatures: signatures.unwrap(), + }) + .into()), + } + } + + #[wasm_bindgen(getter)] + pub fn signatures(&self) -> Option> { + self.inner.signatures() } }