iop_sdk_wasm/hydra/
sign.rs

1use super::*;
2
3use iop_hydra_sdk::vault::HydraSigner;
4use iop_keyvault::secp256k1::SecpPrivateKey;
5
6/// Thin adapter around {@link SecpPrivateKey} for signing Hydra transactions.
7#[wasm_bindgen(js_name = HydraSigner)]
8pub struct JsHydraSigner {
9    inner: SecpPrivateKey,
10}
11
12#[wasm_bindgen(js_class = HydraSigner)]
13impl JsHydraSigner {
14    /// Creates a {@link HydraSigner} from a {@link SecpPrivateKey}.
15    #[wasm_bindgen(constructor)]
16    pub fn new(inner: JsSecpPrivateKey) -> JsHydraSigner {
17        inner.inner().to_owned().into()
18    }
19
20    /// Signs the Hydra transaction.
21    ///
22    /// Fills in signature and id fields, so those can be missing in the unsigned input, but the public key needs to be already
23    /// properly set to the one matching the signer private key.
24    #[wasm_bindgen(js_name = signHydraTransaction)]
25    pub fn sign_hydra_transaction(&self, transaction: &JsValue) -> Result<JsValue, JsValue> {
26        let mut tx = transaction.into_serde().map_err_to_js()?;
27        self.inner.sign_hydra_transaction(&mut tx).map_err_to_js()?;
28        JsValue::from_serde(&tx).map_err_to_js()
29    }
30}
31
32impl From<SecpPrivateKey> for JsHydraSigner {
33    fn from(inner: SecpPrivateKey) -> Self {
34        Self { inner }
35    }
36}
37
38impl Wraps<SecpPrivateKey> for JsHydraSigner {
39    fn inner(&self) -> &SecpPrivateKey {
40        &self.inner
41    }
42}