feat: rename transaction eval and add error enum
This commit is contained in:
		
							parent
							
								
									68fc0f643e
								
							
						
					
					
						commit
						9e280f9cb5
					
				|  | @ -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)?; | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|  |  | |||
|  | @ -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<dyn std::error::Error>; | ||||
| use pallas_primitives::Fragment; | ||||
| 
 | ||||
| use pallas_primitives::{Error, Fragment}; | ||||
| 
 | ||||
| pub fn plutus_data(bytes: &[u8]) -> Result<PlutusData, Error> { | ||||
|     PlutusData::decode_fragment(bytes) | ||||
|  |  | |||
|  | @ -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), | ||||
|  |  | |||
|  | @ -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<Vec<Redeemer>> { | ||||
| ) -> Result<Vec<Redeemer>, 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<u8>, Vec<u8>)], | ||||
|     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()); | ||||
|             } | ||||
|  | @ -0,0 +1,7 @@ | |||
| use crate::machine; | ||||
| 
 | ||||
| #[derive(thiserror::Error, Debug)] | ||||
| pub enum Error { | ||||
|     #[error("Runtime error")] | ||||
|     Machine(#[from] machine::Error), | ||||
| } | ||||
|  | @ -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<Vec<TxInInfo>> { | ||||
| ) -> Result<Vec<TxInInfo>, 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<Vec<TxInInfo>> { | ||||
| ) -> Result<Vec<TxInInfo>, Error> { | ||||
|     let result = inputs | ||||
|         .iter() | ||||
|         .map(|input| { | ||||
|  | @ -142,7 +143,7 @@ fn get_script_purpose( | |||
|     mint: &Option<Mint>, | ||||
|     dcert: &Option<Vec<Certificate>>, | ||||
|     wdrl: &Option<Withdrawals>, | ||||
| ) -> anyhow::Result<ScriptPurpose> { | ||||
| ) -> Result<ScriptPurpose, Error> { | ||||
|     // 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<TxInfo> { | ||||
| ) -> Result<TxInfo, Error> { | ||||
|     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<TxInfo> { | ||||
| ) -> Result<TxInfo, Error> { | ||||
|     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<Redeemer> { | ||||
| ) -> Result<Redeemer, Error> { | ||||
|     let purpose = get_script_purpose( | ||||
|         redeemer, | ||||
|         &tx.transaction_body.inputs, | ||||
		Loading…
	
		Reference in New Issue
	
	 rvcas
						rvcas