diff --git a/crates/uplc/src/machine/runtime.rs b/crates/uplc/src/machine/runtime.rs index 7092deb8..c654de3a 100644 --- a/crates/uplc/src/machine/runtime.rs +++ b/crates/uplc/src/machine/runtime.rs @@ -32,8 +32,6 @@ const BLST_P1_COMPRESSED_SIZE: usize = 48; const BLST_P2_COMPRESSED_SIZE: usize = 96; -// 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001; - //#[derive(std::cmp::PartialEq)] //pub enum EvalMode { // Immediate, @@ -1231,7 +1229,6 @@ impl DefaultFunction { blst::blst_p1_mult( &mut out as *mut _, - // This was true in the Cardano code arg2 as *const _, scalar.b.as_ptr() as *const _, size_scalar * 8, @@ -1255,11 +1252,7 @@ impl DefaultFunction { DefaultFunction::Bls12_381_G1_Compress => { let arg1 = args[0].unwrap_bls12_381_g1_element(); - let mut out = [0; BLST_P1_COMPRESSED_SIZE]; - - unsafe { - blst::blst_p1_compress(&mut out as *mut _, arg1); - }; + let out = arg1.compress(); let constant = Constant::ByteString(out.to_vec()); @@ -1389,7 +1382,6 @@ impl DefaultFunction { blst::blst_p2_mult( &mut out as *mut _, - // This was true in the Cardano code arg2 as *const _, scalar.b.as_ptr() as *const _, size_scalar * 8, @@ -1413,11 +1405,7 @@ impl DefaultFunction { DefaultFunction::Bls12_381_G2_Compress => { let arg1 = args[0].unwrap_bls12_381_g2_element(); - let mut out = [0; BLST_P2_COMPRESSED_SIZE]; - - unsafe { - blst::blst_p2_compress(&mut out as *mut _, arg1); - }; + let out = arg1.compress(); let constant = Constant::ByteString(out.to_vec()); @@ -1529,6 +1517,34 @@ impl DefaultFunction { } } +pub trait Compressable { + fn compress(&self) -> Vec; +} + +impl Compressable for blst::blst_p1 { + fn compress(&self) -> Vec { + let mut out = [0; BLST_P1_COMPRESSED_SIZE]; + + unsafe { + blst::blst_p1_compress(&mut out as *mut _, self); + }; + + out.to_vec() + } +} + +impl Compressable for blst::blst_p2 { + fn compress(&self) -> Vec { + let mut out = [0; BLST_P2_COMPRESSED_SIZE]; + + unsafe { + blst::blst_p2_compress(&mut out as *mut _, self); + }; + + out.to_vec() + } +} + pub fn convert_tag_to_constr(tag: u64) -> Option { if (121..=127).contains(&tag) { Some(tag - 121) diff --git a/crates/uplc/src/pretty.rs b/crates/uplc/src/pretty.rs index 0848cf58..5053a29d 100644 --- a/crates/uplc/src/pretty.rs +++ b/crates/uplc/src/pretty.rs @@ -1,6 +1,7 @@ use crate::{ ast::{Constant, Program, Term, Type}, flat::Binder, + machine::runtime::Compressable, }; use pallas_primitives::babbage::{Constr, PlutusData}; use pretty::RcDoc; @@ -256,9 +257,15 @@ impl Constant { .append(RcDoc::text("(")) .append(Self::to_doc_list_plutus_data(d)) .append(RcDoc::text(")")), - Constant::Bls12_381G1Element(_) => todo!(), - Constant::Bls12_381G2Element(_) => todo!(), - Constant::Bls12_381MlResult(_) => todo!(), + Constant::Bls12_381G1Element(p1) => RcDoc::text("bls12_381_G1_element ") + .append(RcDoc::line()) + .append(RcDoc::text("0x")) + .append(RcDoc::text(hex::encode(p1.compress()))), + Constant::Bls12_381G2Element(p2) => RcDoc::text("bls12_381_G2_element ") + .append(RcDoc::line()) + .append(RcDoc::text("0x")) + .append(RcDoc::text(hex::encode(p2.compress()))), + Constant::Bls12_381MlResult(_) => panic!("cannot represent Bls12_381MlResult as text"), } } @@ -284,9 +291,13 @@ impl Constant { .append(RcDoc::text(")")), Constant::Data(data) => Self::to_doc_list_plutus_data(data), - Constant::Bls12_381G1Element(_) => todo!(), - Constant::Bls12_381G2Element(_) => todo!(), - Constant::Bls12_381MlResult(_) => todo!(), + Constant::Bls12_381G1Element(p1) => { + RcDoc::text("0x").append(RcDoc::text(hex::encode(p1.compress()))) + } + Constant::Bls12_381G2Element(p2) => { + RcDoc::text("0x").append(RcDoc::text(hex::encode(p2.compress()))) + } + Constant::Bls12_381MlResult(_) => panic!("cannot represent Bls12_381MlResult as text"), } } @@ -358,8 +369,8 @@ impl Type { .append(r.to_doc()) .append(")"), Type::Data => RcDoc::text("data"), - Type::Bls12_381G1Element => todo!(), - Type::Bls12_381G2Element => todo!(), + Type::Bls12_381G1Element => RcDoc::text("bls12_381_G1_element"), + Type::Bls12_381G2Element => RcDoc::text("bls12_381_G1_element"), Type::Bls12_381MlResult => todo!(), } }