ergo_lib_wasm/
context_extension.rs

1//! ProverResult
2
3use crate::ast::Constant;
4use ergo_lib::ergotree_ir::serialization::SigmaSerializable;
5use wasm_bindgen::prelude::*;
6
7extern crate derive_more;
8use derive_more::{From, Into};
9
10/// User-defined variables to be put into context
11#[wasm_bindgen]
12#[derive(PartialEq, Eq, Debug, Clone, From, Into)]
13pub struct ContextExtension(
14    ergo_lib::ergotree_interpreter::sigma_protocol::prover::ContextExtension,
15);
16
17#[wasm_bindgen]
18impl ContextExtension {
19    /// Create new ContextExtension instance
20    #[wasm_bindgen(constructor)]
21    pub fn new() -> Self {
22        Self(ergo_lib::ergotree_interpreter::sigma_protocol::prover::ContextExtension::empty())
23    }
24
25    /// Set the supplied pair in the ContextExtension
26    pub fn set_pair(&mut self, id: u8, value: &Constant) {
27        self.0.values.insert(id, value.clone().into());
28    }
29
30    /// Returns the number of elements in the collection
31    pub fn len(&self) -> usize {
32        let wrapped: ergo_lib::ergotree_interpreter::sigma_protocol::prover::ContextExtension =
33            self.0.clone();
34        wrapped.values.len()
35    }
36    /// get from map or fail if key is missing
37    pub fn get(&self, key: u8) -> Result<Constant, JsValue> {
38        let wrapped: ergo_lib::ergotree_interpreter::sigma_protocol::prover::ContextExtension =
39            self.0.clone();
40        Ok(wrapped
41            .values
42            .get(&key)
43            .ok_or_else::<JsValue, _>(|| "err".into())?
44            .clone()
45            .into())
46    }
47
48    /// Returns all keys in the map
49    pub fn keys(&self) -> Vec<u8> {
50        let wrapped: ergo_lib::ergotree_interpreter::sigma_protocol::prover::ContextExtension =
51            self.0.clone();
52        wrapped.values.keys().cloned().collect()
53    }
54
55    /// Returns serialized bytes or fails with error if ContextExtension cannot be serialized
56    pub fn sigma_serialize_bytes(&self) -> Result<Vec<u8>, JsValue> {
57        self.0
58            .sigma_serialize_bytes()
59            .map_err(|e| JsValue::from_str(&format! {"{:?}", e}))
60    }
61}