From ca79f423b241e9326157ab8a87bdd9281bf0869a Mon Sep 17 00:00:00 2001 From: ricomiles Date: Thu, 12 Dec 2024 21:24:11 +0800 Subject: [PATCH 1/3] chore: update utxorpc-spec version and update redeemer mapper --- pallas-utxorpc/Cargo.toml | 2 +- pallas-utxorpc/src/lib.rs | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pallas-utxorpc/Cargo.toml b/pallas-utxorpc/Cargo.toml index 14761c57..0b871990 100644 --- a/pallas-utxorpc/Cargo.toml +++ b/pallas-utxorpc/Cargo.toml @@ -12,7 +12,7 @@ authors = ["Santiago Carmuega "] [dependencies] # utxorpc-spec = { path = "../../../utxorpc/spec/gen/rust" } -utxorpc-spec = { version = "0.11.0" } +utxorpc-spec = { version = "0.14.0" } pallas-traverse = { version = "=0.31.0", path = "../pallas-traverse" } pallas-primitives = { version = "=0.31.0", path = "../pallas-primitives" } diff --git a/pallas-utxorpc/src/lib.rs b/pallas-utxorpc/src/lib.rs index 27edb75b..c363792b 100644 --- a/pallas-utxorpc/src/lib.rs +++ b/pallas-utxorpc/src/lib.rs @@ -1,6 +1,6 @@ use std::{collections::HashMap, ops::Deref}; -use pallas_codec::utils::KeyValuePairs; +use pallas_codec::{minicbor, utils::KeyValuePairs}; use pallas_crypto::hash::Hash; use pallas_primitives::{alonzo, babbage, conway}; use pallas_traverse as trv; @@ -62,9 +62,24 @@ impl Mapper { } pub fn map_redeemer(&self, x: &trv::MultiEraRedeemer) -> u5c::Redeemer { + let cbor = match x { + trv::MultiEraRedeemer::AlonzoCompatible(_) => { + minicbor::to_vec(x.as_alonzo()).unwrap() + } + trv::MultiEraRedeemer::Conway(_,_) => { + minicbor::to_vec(x.as_conway()).unwrap() + } + _ => todo!(), + }; u5c::Redeemer { purpose: self.map_purpose(&x.tag()).into(), payload: self.map_plutus_datum(x.data()).into(), + index: x.index().into(), + ex_units: Some(u5c::ExUnits{ + steps: x.ex_units().steps as u64, + memory: x.ex_units().mem as u64 + }), + original_cbor: cbor.into() } } From 3fa5274ee8622dc2e12ab9f0760b7cf824f63f2e Mon Sep 17 00:00:00 2001 From: Santiago Carmuega Date: Sat, 14 Dec 2024 13:15:24 -0300 Subject: [PATCH 2/3] simplify encoding and fix tests --- pallas-traverse/src/redeemers.rs | 8 ++++++++ pallas-utxorpc/src/lib.rs | 17 ++++------------ test_data/u5c1.json | 34 ++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/pallas-traverse/src/redeemers.rs b/pallas-traverse/src/redeemers.rs index 9f96c9a9..5601e773 100644 --- a/pallas-traverse/src/redeemers.rs +++ b/pallas-traverse/src/redeemers.rs @@ -1,5 +1,6 @@ use std::borrow::Cow; +use pallas_codec::minicbor; use pallas_primitives::{alonzo, conway}; use crate::MultiEraRedeemer; @@ -78,4 +79,11 @@ impl<'b> MultiEraRedeemer<'b> { })), ) } + + pub fn encode(&self) -> Vec { + match self { + MultiEraRedeemer::AlonzoCompatible(x) => minicbor::to_vec(x).unwrap(), + MultiEraRedeemer::Conway(k, v) => minicbor::to_vec((k, v)).unwrap(), + } + } } diff --git a/pallas-utxorpc/src/lib.rs b/pallas-utxorpc/src/lib.rs index c363792b..78155c30 100644 --- a/pallas-utxorpc/src/lib.rs +++ b/pallas-utxorpc/src/lib.rs @@ -1,6 +1,6 @@ use std::{collections::HashMap, ops::Deref}; -use pallas_codec::{minicbor, utils::KeyValuePairs}; +use pallas_codec::utils::KeyValuePairs; use pallas_crypto::hash::Hash; use pallas_primitives::{alonzo, babbage, conway}; use pallas_traverse as trv; @@ -62,24 +62,15 @@ impl Mapper { } pub fn map_redeemer(&self, x: &trv::MultiEraRedeemer) -> u5c::Redeemer { - let cbor = match x { - trv::MultiEraRedeemer::AlonzoCompatible(_) => { - minicbor::to_vec(x.as_alonzo()).unwrap() - } - trv::MultiEraRedeemer::Conway(_,_) => { - minicbor::to_vec(x.as_conway()).unwrap() - } - _ => todo!(), - }; u5c::Redeemer { purpose: self.map_purpose(&x.tag()).into(), payload: self.map_plutus_datum(x.data()).into(), index: x.index().into(), - ex_units: Some(u5c::ExUnits{ + ex_units: Some(u5c::ExUnits { steps: x.ex_units().steps as u64, - memory: x.ex_units().mem as u64 + memory: x.ex_units().mem as u64, }), - original_cbor: cbor.into() + original_cbor: x.encode().into(), } } diff --git a/test_data/u5c1.json b/test_data/u5c1.json index 3badec88..b8e4880d 100644 --- a/test_data/u5c1.json +++ b/test_data/u5c1.json @@ -22,6 +22,11 @@ "inputs": [ { "redeemer": { + "exUnits": { + "memory": "2893153", + "steps": "1254988362" + }, + "originalCbor": "hAAAGgAtxsCCGgAsJWEaSs2aSg==", "payload": { "bigInt": { "int": "3000000" @@ -33,6 +38,12 @@ }, { "redeemer": { + "exUnits": { + "memory": "29039", + "steps": "9759373" + }, + "index": 1, + "originalCbor": "hAAB2HmAghlxbxoAlOqN", "payload": { "constr": { "tag": 121 @@ -45,6 +56,12 @@ { "outputIndex": 2, "redeemer": { + "exUnits": { + "memory": "23776", + "steps": "8949203" + }, + "index": 2, + "originalCbor": "hAAC2HmAghlc4BoAiI3T", "payload": { "constr": { "tag": 121 @@ -1384,6 +1401,12 @@ }, { "redeemer": { + "exUnits": { + "memory": "862260", + "steps": "283080173" + }, + "index": 1, + "originalCbor": "hAAB2HmAghoADSg0GhDfde0=", "payload": { "constr": { "tag": 121 @@ -2018,6 +2041,12 @@ }, { "redeemer": { + "exUnits": { + "memory": "312977", + "steps": "151500123" + }, + "index": 1, + "originalCbor": "hAAB2HqfUCgL7p8Ifi1y1Y0n3fHPaAb/ghoABMaRGgkHtVs=", "payload": { "constr": { "fields": [ @@ -2043,6 +2072,11 @@ ], "policyId": "J5+ELDPu2QVLnjxwzWo7MimCWcJLeLiVy0HZGg==", "redeemer": { + "exUnits": { + "memory": "56931", + "steps": "22622736" + }, + "originalCbor": "hAEA2HmAghneYxoBWTIQ", "payload": { "constr": { "tag": 121 From 34c48d56be4efd25c400839b0ad08d65636b6cfd Mon Sep 17 00:00:00 2001 From: Santiago Carmuega Date: Sat, 14 Dec 2024 13:18:10 -0300 Subject: [PATCH 3/3] fix clippy warnings --- pallas-utxorpc/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pallas-utxorpc/src/lib.rs b/pallas-utxorpc/src/lib.rs index 78155c30..faee6fe9 100644 --- a/pallas-utxorpc/src/lib.rs +++ b/pallas-utxorpc/src/lib.rs @@ -67,8 +67,8 @@ impl Mapper { payload: self.map_plutus_datum(x.data()).into(), index: x.index().into(), ex_units: Some(u5c::ExUnits { - steps: x.ex_units().steps as u64, - memory: x.ex_units().mem as u64, + steps: x.ex_units().steps, + memory: x.ex_units().mem, }), original_cbor: x.encode().into(), }