From d426f4922f1d9bdd8c0e24e34321af619f9a4a60 Mon Sep 17 00:00:00 2001 From: alessandrokonrad Date: Fri, 16 Sep 2022 17:13:42 +0200 Subject: [PATCH] added eval_tx_raw --- crates/uplc/src/transaction_eval.rs | 51 ++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/crates/uplc/src/transaction_eval.rs b/crates/uplc/src/transaction_eval.rs index 87cb3056..6ea0d6b2 100644 --- a/crates/uplc/src/transaction_eval.rs +++ b/crates/uplc/src/transaction_eval.rs @@ -1,4 +1,8 @@ -use pallas_primitives::babbage::{MintedTx, Redeemer}; +use pallas_primitives::{ + babbage::{CostMdls, MintedTx, Redeemer, TransactionInput, TransactionOutput}, + Fragment, +}; +use pallas_traverse::{Era, MultiEraTx}; use self::script_context::{ResolvedInput, SlotConfig}; @@ -34,6 +38,51 @@ pub fn eval_tx( } } +pub fn eval_tx_raw( + tx_bytes: &Vec, + utxos_bytes: &Vec<(Vec, Vec)>, + cost_mdls_bytes: &Vec, + slot_config: (u64, u64), +) -> Result>, ()> { + let multi_era_tx = MultiEraTx::decode(Era::Babbage, &tx_bytes) + .or_else(|_| MultiEraTx::decode(Era::Alonzo, &tx_bytes)) + .or_else(|_| Err(()))?; // TODO: proper error message + + let cost_mdls = CostMdls::decode_fragment(&cost_mdls_bytes).or_else(|_| Err(()))?; // TODO: proper error message + + let utxos: Vec = utxos_bytes + .iter() + .map(|(input, output)| ResolvedInput { + input: TransactionInput::decode_fragment(input).unwrap(), + output: TransactionOutput::decode_fragment(input).unwrap(), + }) + .collect(); + + let sc = SlotConfig { + zero_time: slot_config.0, + slot_length: slot_config.1, + }; + + match multi_era_tx { + MultiEraTx::Babbage(tx) => match eval_tx(&tx, &utxos, &sc) { + Ok(redeemers) => Ok(redeemers + .iter() + .map(|r| r.encode_fragment().unwrap()) + .collect()), + Err(_) => Err(()), + }, + // MultiEraTx::AlonzoCompatible(tx, _) => match eval_tx(&tx, &utxos, &sc) { + // Ok(redeemers) => Ok(redeemers + // .iter() + // .map(|r| r.encode_fragment().unwrap()) + // .collect()), + // Err(_) => Err(()), + // }, + // TODO: I probably did a mistake here with using MintedTx which is only compatible with Babbage tx. + _ => Err(()), + } +} + #[cfg(test)] mod tests { use pallas_codec::utils::MaybeIndefArray;