cml_chain_wasm/builders/
certificate_builder.rs

1use crate::builders::witness_builder::PartialPlutusWitness;
2use crate::*;
3use cml_core_wasm::impl_wasm_conversions;
4use wasm_bindgen::prelude::{wasm_bindgen, JsError};
5
6use super::witness_builder::NativeScriptWitnessInfo;
7
8use crate::{certs::Certificate, RequiredSigners};
9
10#[wasm_bindgen]
11#[derive(Clone)]
12pub struct CertificateBuilderResult(
13    cml_chain::builders::certificate_builder::CertificateBuilderResult,
14);
15
16impl_wasm_conversions!(
17    cml_chain::builders::certificate_builder::CertificateBuilderResult,
18    CertificateBuilderResult
19);
20
21#[wasm_bindgen]
22#[derive(Clone)]
23pub struct SingleCertificateBuilder(
24    cml_chain::builders::certificate_builder::SingleCertificateBuilder,
25);
26
27impl_wasm_conversions!(
28    cml_chain::builders::certificate_builder::SingleCertificateBuilder,
29    SingleCertificateBuilder
30);
31
32#[wasm_bindgen]
33impl SingleCertificateBuilder {
34    pub fn new(cert: &Certificate) -> Self {
35        cml_chain::builders::certificate_builder::SingleCertificateBuilder::new(cert.clone().into())
36            .into()
37    }
38
39    /// note: particularly useful for StakeRegistration which doesn't require witnessing
40    pub fn skip_witness(&self) -> CertificateBuilderResult {
41        self.0.clone().skip_witness().into()
42    }
43
44    pub fn payment_key(&self) -> Result<CertificateBuilderResult, JsError> {
45        self.0
46            .clone()
47            .payment_key()
48            .map(Into::into)
49            .map_err(Into::into)
50    }
51
52    /** Signer keys don't have to be set. You can leave it empty and then add the required witnesses later */
53    pub fn native_script(
54        &self,
55        native_script: &NativeScript,
56        witness_info: &NativeScriptWitnessInfo,
57    ) -> Result<CertificateBuilderResult, JsError> {
58        self.0
59            .clone()
60            .native_script(native_script.clone().into(), witness_info.clone().into())
61            .map(Into::into)
62            .map_err(Into::into)
63    }
64
65    pub fn plutus_script(
66        self,
67        partial_witness: &PartialPlutusWitness,
68        required_signers: &RequiredSigners,
69    ) -> Result<CertificateBuilderResult, JsError> {
70        self.0
71            .plutus_script(
72                partial_witness.clone().into(),
73                required_signers.clone().into(),
74            )
75            .map(Into::into)
76            .map_err(Into::into)
77    }
78}