From 9e280f9cb547c677554f2cbad1869f286cb66118 Mon Sep 17 00:00:00 2001 From: rvcas Date: Sun, 18 Sep 2022 15:35:10 -0400 Subject: [PATCH] feat: rename transaction eval and add error enum --- crates/cli/src/main.rs | 8 ++++--- crates/uplc/src/lib.rs | 6 ++--- crates/uplc/src/machine/error.rs | 4 +--- .../uplc/src/{transaction_eval.rs => tx.rs} | 22 +++++++++---------- crates/uplc/src/tx/error.rs | 7 ++++++ .../uplc/src/{transaction_eval => tx}/eval.rs | 13 ++++++----- .../script_context.rs | 0 .../to_plutus_data.rs | 0 8 files changed, 34 insertions(+), 26 deletions(-) rename crates/uplc/src/{transaction_eval.rs => tx.rs} (98%) create mode 100644 crates/uplc/src/tx/error.rs rename crates/uplc/src/{transaction_eval => tx}/eval.rs (99%) rename crates/uplc/src/{transaction_eval => tx}/script_context.rs (100%) rename crates/uplc/src/{transaction_eval => tx}/to_plutus_data.rs (100%) diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs index eac3e103..58189423 100644 --- a/crates/cli/src/main.rs +++ b/crates/cli/src/main.rs @@ -9,8 +9,10 @@ use uplc::{ ast::{DeBruijn, FakeNamedDeBruijn, Name, NamedDeBruijn, Program, Term}, machine::cost_model::ExBudget, parser, - transaction_eval::eval_tx, - transaction_eval::script_context::{ResolvedInput, SlotConfig}, + tx::{ + self, + script_context::{ResolvedInput, SlotConfig}, + }, }; mod args; @@ -52,7 +54,7 @@ fn main() -> anyhow::Result<()> { slot_length, }; - eval_tx(tx_babbage, &resolved_inputs, None, &slot_config)?; + tx::eval(tx_babbage, &resolved_inputs, None, &slot_config)?; } } }, diff --git a/crates/uplc/src/lib.rs b/crates/uplc/src/lib.rs index 5c14dd07..55b107e7 100644 --- a/crates/uplc/src/lib.rs +++ b/crates/uplc/src/lib.rs @@ -6,11 +6,11 @@ pub mod machine; pub mod parser; mod pretty; pub mod program_builder; -pub mod transaction_eval; +pub mod tx; pub use pallas_primitives::alonzo::PlutusData; -pub type Error = Box; -use pallas_primitives::Fragment; + +use pallas_primitives::{Error, Fragment}; pub fn plutus_data(bytes: &[u8]) -> Result { PlutusData::decode_fragment(bytes) diff --git a/crates/uplc/src/machine/error.rs b/crates/uplc/src/machine/error.rs index 93bc1b57..9be3823a 100644 --- a/crates/uplc/src/machine/error.rs +++ b/crates/uplc/src/machine/error.rs @@ -1,12 +1,10 @@ use std::string::FromUtf8Error; -use thiserror::Error; - use crate::ast::{NamedDeBruijn, Term, Type}; use super::{ExBudget, Value}; -#[derive(Error, Debug)] +#[derive(thiserror::Error, Debug)] pub enum Error { #[error("Over budget mem: {} & cpu: {}", .0.mem, .0.cpu)] OutOfExError(ExBudget), diff --git a/crates/uplc/src/transaction_eval.rs b/crates/uplc/src/tx.rs similarity index 98% rename from crates/uplc/src/transaction_eval.rs rename to crates/uplc/src/tx.rs index 2c723eb9..9e4b6126 100644 --- a/crates/uplc/src/transaction_eval.rs +++ b/crates/uplc/src/tx.rs @@ -4,20 +4,20 @@ use pallas_primitives::{ }; use pallas_traverse::{Era, MultiEraTx}; -use crate::Error; - -use self::script_context::{ResolvedInput, SlotConfig}; +use error::Error; +use script_context::{ResolvedInput, SlotConfig}; +mod error; mod eval; pub mod script_context; mod to_plutus_data; -pub fn eval_tx( +pub fn eval( tx: &MintedTx, utxos: &[ResolvedInput], cost_mdls: Option<&CostMdls>, slot_config: &SlotConfig, -) -> anyhow::Result> { +) -> Result, Error> { let redeemers = tx.transaction_witness_set.redeemer.as_ref(); let lookup_table = eval::get_script_and_datum_lookup_table(tx, utxos); @@ -41,7 +41,7 @@ pub fn eval_tx( } } -pub fn eval_tx_raw( +pub fn eval_raw( tx_bytes: &[u8], utxos_bytes: &[(Vec, Vec)], cost_mdls_bytes: &[u8], @@ -68,7 +68,7 @@ pub fn eval_tx_raw( }; match multi_era_tx { - MultiEraTx::Babbage(tx) => match eval_tx(&tx, &utxos, Some(&cost_mdls), &sc) { + MultiEraTx::Babbage(tx) => match eval(&tx, &utxos, Some(&cost_mdls), &sc) { Ok(redeemers) => Ok(redeemers .iter() .map(|r| r.encode_fragment().unwrap()) @@ -96,7 +96,7 @@ mod tests { }; use pallas_traverse::{Era, MultiEraTx}; - use super::{eval_tx, ResolvedInput, SlotConfig}; + use super::{eval, ResolvedInput, SlotConfig}; #[test] fn test_eval() { @@ -322,7 +322,7 @@ mod tests { .unwrap(); match multi_era_tx { MultiEraTx::Babbage(tx) => { - let redeemers = eval_tx(&tx, &utxos, Some(&cost_mdl), &slot_config).unwrap(); + let redeemers = eval(&tx, &utxos, Some(&cost_mdl), &slot_config).unwrap(); assert_eq!(redeemers.len(), 1) } @@ -556,7 +556,7 @@ mod tests { .unwrap(); match multi_era_tx { MultiEraTx::Babbage(tx) => { - let redeemers = eval_tx(&tx, &utxos, Some(&cost_mdl), &slot_config).unwrap(); + let redeemers = eval(&tx, &utxos, Some(&cost_mdl), &slot_config).unwrap(); println!("{:?}", redeemers.len()); } @@ -626,7 +626,7 @@ mod tests { .unwrap(); match multi_era_tx { MultiEraTx::Babbage(tx) => { - let redeemers = eval_tx(&tx, &utxos, Some(&cost_mdl), &slot_config).unwrap(); + let redeemers = eval(&tx, &utxos, Some(&cost_mdl), &slot_config).unwrap(); println!("{:?}", redeemers.len()); } diff --git a/crates/uplc/src/tx/error.rs b/crates/uplc/src/tx/error.rs new file mode 100644 index 00000000..2e7b003e --- /dev/null +++ b/crates/uplc/src/tx/error.rs @@ -0,0 +1,7 @@ +use crate::machine; + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("Runtime error")] + Machine(#[from] machine::Error), +} diff --git a/crates/uplc/src/transaction_eval/eval.rs b/crates/uplc/src/tx/eval.rs similarity index 99% rename from crates/uplc/src/transaction_eval/eval.rs rename to crates/uplc/src/tx/eval.rs index 3ae1c88e..ab3f8595 100644 --- a/crates/uplc/src/transaction_eval/eval.rs +++ b/crates/uplc/src/tx/eval.rs @@ -20,6 +20,7 @@ use super::{ TxInfoV1, TxInfoV2, TxOut, }, to_plutus_data::ToPlutusData, + Error, }; fn slot_to_begin_posix_time(slot: u64, sc: &SlotConfig) -> u64 { @@ -58,7 +59,7 @@ pub struct DataLookupTable { pub fn get_tx_in_info_v1( inputs: &[TransactionInput], utxos: &[ResolvedInput], -) -> anyhow::Result> { +) -> Result, Error> { let result = inputs .iter() .map(|input| { @@ -105,7 +106,7 @@ pub fn get_tx_in_info_v1( fn get_tx_in_info_v2( inputs: &[TransactionInput], utxos: &[ResolvedInput], -) -> anyhow::Result> { +) -> Result, Error> { let result = inputs .iter() .map(|input| { @@ -142,7 +143,7 @@ fn get_script_purpose( mint: &Option, dcert: &Option>, wdrl: &Option, -) -> anyhow::Result { +) -> Result { // sorting according to specs section 4.1: https://hydra.iohk.io/build/18583827/download/1/alonzo-changes.pdf let tag = redeemer.tag.clone(); let index = redeemer.index; @@ -226,7 +227,7 @@ fn get_tx_info_v1( tx: &MintedTx, utxos: &[ResolvedInput], slot_config: &SlotConfig, -) -> anyhow::Result { +) -> Result { let body = tx.transaction_body.clone(); if body.reference_inputs.is_some() { @@ -289,7 +290,7 @@ fn get_tx_info_v2( tx: &MintedTx, utxos: &[ResolvedInput], slot_config: &SlotConfig, -) -> anyhow::Result { +) -> Result { let body = tx.transaction_body.clone(); let inputs = get_tx_in_info_v2(&body.inputs, utxos)?; @@ -557,7 +558,7 @@ pub fn eval_redeemer( redeemer: &Redeemer, lookup_table: &DataLookupTable, cost_mdls_opt: Option<&CostMdls>, -) -> anyhow::Result { +) -> Result { let purpose = get_script_purpose( redeemer, &tx.transaction_body.inputs, diff --git a/crates/uplc/src/transaction_eval/script_context.rs b/crates/uplc/src/tx/script_context.rs similarity index 100% rename from crates/uplc/src/transaction_eval/script_context.rs rename to crates/uplc/src/tx/script_context.rs diff --git a/crates/uplc/src/transaction_eval/to_plutus_data.rs b/crates/uplc/src/tx/to_plutus_data.rs similarity index 100% rename from crates/uplc/src/transaction_eval/to_plutus_data.rs rename to crates/uplc/src/tx/to_plutus_data.rs