Skip to content

Commit

Permalink
Missing PlutusScript / PlutusScriptWitness API (#305)
Browse files Browse the repository at this point in the history
Fixes #297

Adds missing conversions WASM API from PlutusScript to PlutusScriptWitness

Updates PlutusScript to include Plutus V3

Adds WASM PlutusV1/V2/V3Script to PlutusScript constructors

Missing wasm conversions for PlutusScript wasm<->rust
  • Loading branch information
rooooooooob committed Feb 1, 2024
1 parent 8c627c0 commit 65a150b
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 4 deletions.
25 changes: 23 additions & 2 deletions chain/rust/src/plutus/utils.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
use super::{CostModels, Language, Redeemer};
use super::{ExUnits, PlutusData, PlutusV1Script, PlutusV2Script, PlutusV3Script};
use crate::crypto::hash::{hash_script, ScriptHashNamespace};
use cbor_event::de::Deserializer;
use cbor_event::se::Serializer;
use cml_core::serialization::*;
use cml_core::{error::*, Int};
use cml_crypto::ScriptHash;
use std::collections::BTreeMap;
use std::io::{BufRead, Seek, Write};

Expand Down Expand Up @@ -348,25 +350,44 @@ impl CostModels {
pub enum PlutusScript {
PlutusV1(PlutusV1Script),
PlutusV2(PlutusV2Script),
PlutusV3(PlutusV3Script),
}

impl PlutusScript {
pub fn hash(&self) -> ScriptHash {
match &self {
Self::PlutusV1(script) => script.hash(),
Self::PlutusV2(script) => script.hash(),
Self::PlutusV3(script) => script.hash(),
}
}

pub fn version(&self) -> Language {
match self {
Self::PlutusV1(_) => Language::PlutusV1,
Self::PlutusV2(_) => Language::PlutusV2,
Self::PlutusV3(_) => Language::PlutusV3,
}
}
}
use crate::crypto::hash::{hash_script, ScriptHashNamespace};
use cml_crypto::ScriptHash;

impl From<PlutusV1Script> for PlutusScript {
fn from(script: PlutusV1Script) -> Self {
Self::PlutusV1(script)
}
}

impl From<PlutusV2Script> for PlutusScript {
fn from(script: PlutusV2Script) -> Self {
Self::PlutusV2(script)
}
}

impl From<PlutusV3Script> for PlutusScript {
fn from(script: PlutusV3Script) -> Self {
Self::PlutusV3(script)
}
}

impl PlutusV1Script {
pub fn hash(&self) -> ScriptHash {
Expand Down
1 change: 1 addition & 0 deletions chain/rust/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ impl From<PlutusScript> for Script {
match script {
PlutusScript::PlutusV1(v1) => Self::new_plutus_v1(v1),
PlutusScript::PlutusV2(v2) => Self::new_plutus_v2(v2),
PlutusScript::PlutusV3(v3) => Self::new_plutus_v3(v3),
}
}
}
Expand Down
11 changes: 10 additions & 1 deletion chain/wasm/src/builders/witness_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use crate::{
address::RewardAddress,
byron::ByronAddress,
crypto::{BootstrapWitness, Vkeywitness},
plutus::{PlutusData, Redeemer},
plutus::{utils::PlutusScript, PlutusData, Redeemer},
transaction::TransactionWitnessSet,
Ed25519KeyHashList, NativeScriptList, PlutusDataList, PlutusV1ScriptList, PlutusV2ScriptList,
RedeemerList, Script,
Expand All @@ -24,6 +24,15 @@ impl_wasm_conversions!(

#[wasm_bindgen]
impl PlutusScriptWitness {
pub fn new_script(script: &PlutusScript) -> Self {
cml_chain::builders::witness_builder::PlutusScriptWitness::from(script.as_ref().clone())
.into()
}

pub fn new_ref(hash: &ScriptHash) -> Self {
cml_chain::builders::witness_builder::PlutusScriptWitness::from(*hash.as_ref()).into()
}

// pub fn script(&self) -> Option<PlutusScript> {
// match self {
// Self::Ref(_) => None,
Expand Down
23 changes: 22 additions & 1 deletion chain/wasm/src/plutus/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use cml_core_wasm::{impl_wasm_cbor_json_api, impl_wasm_conversions};
use cml_crypto_wasm::ScriptHash;
use wasm_bindgen::prelude::{wasm_bindgen, JsError, JsValue};

use super::{ExUnits, PlutusV1Script, PlutusV2Script};
use super::{ExUnits, PlutusV1Script, PlutusV2Script, PlutusV3Script};

#[derive(Clone, Debug)]
#[wasm_bindgen]
Expand Down Expand Up @@ -89,8 +89,22 @@ impl PlutusMap {
#[derive(Clone, Debug)]
pub struct PlutusScript(cml_chain::plutus::utils::PlutusScript);

impl_wasm_conversions!(cml_chain::plutus::utils::PlutusScript, PlutusScript);

#[wasm_bindgen]
impl PlutusScript {
pub fn from_v1(script: &PlutusV1Script) -> Self {
cml_chain::plutus::utils::PlutusScript::PlutusV1(script.as_ref().clone()).into()
}

pub fn from_v2(script: &PlutusV2Script) -> Self {
cml_chain::plutus::utils::PlutusScript::PlutusV2(script.as_ref().clone()).into()
}

pub fn from_v3(script: &PlutusV3Script) -> Self {
cml_chain::plutus::utils::PlutusScript::PlutusV3(script.as_ref().clone()).into()
}

pub fn hash(&self) -> ScriptHash {
self.0.hash().into()
}
Expand All @@ -109,6 +123,13 @@ impl PlutusScript {
}
}

pub fn as_v3(&self) -> Option<PlutusV3Script> {
match &self.0 {
cml_chain::plutus::utils::PlutusScript::PlutusV3(v3) => Some(v3.clone().into()),
_ => None,
}
}

pub fn version(&self) -> Language {
self.0.version()
}
Expand Down

0 comments on commit 65a150b

Please sign in to comment.