diff --git a/crates/uplc/src/tx/script_context.rs b/crates/uplc/src/tx/script_context.rs index d36b0dbe..a5f4c1cd 100644 --- a/crates/uplc/src/tx/script_context.rs +++ b/crates/uplc/src/tx/script_context.rs @@ -1,7 +1,4 @@ -use super::{ - to_plutus_data::{MintValue, ToPlutusData}, - Error, -}; +use super::{to_plutus_data::MintValue, Error}; use itertools::Itertools; use pallas_addresses::{Address, Network, StakePayload}; use pallas_codec::utils::{ @@ -834,23 +831,13 @@ pub fn find_script( let lookup_datum = |datum: Option| match datum { Some(DatumOption::Hash(hash)) => match lookup_table.datum.get(&hash) { - Some(d) => Ok(d.clone()), + Some(d) => Ok(Some(d.clone())), None => Err(Error::MissingRequiredDatum { hash: hash.to_string(), }), }, - Some(DatumOption::Data(data)) => Ok(data.0.clone()), - _ => Err(Error::MissingRequiredInlineDatumOrHash), - }; - let lookup_datum_v3 = |datum: Option| match datum { - Some(DatumOption::Hash(hash)) => match lookup_table.datum.get(&hash) { - Some(d) => Ok(d.clone()), - None => Err(Error::MissingRequiredDatum { - hash: hash.to_string(), - }), - }, - Some(DatumOption::Data(data)) => Ok(data.0.clone()), - _ => Ok(None::.to_plutus_data()), + Some(DatumOption::Data(data)) => Ok(Some(data.0.clone())), + None => Ok(None), }; match redeemer.tag { @@ -922,11 +909,15 @@ pub fn find_script( Address::Shelley(shelley_address) => { let hash = shelley_address.payment().as_hash(); let (script, _) = lookup_script(hash)?; - let datum = match script { - ScriptVersion::V3(_) => lookup_datum_v3(output_datum(&input.resolved)), - _ => lookup_datum(output_datum(&input.resolved)), - }?; - Ok((script, Some(datum))) + let datum = lookup_datum(output_datum(&input.resolved))?; + + if datum.is_none() + && matches!(script, ScriptVersion::V1(..) | ScriptVersion::V2(..)) + { + return Err(Error::MissingRequiredInlineDatumOrHash); + } + + Ok((script, datum)) } _ => Err(Error::NonScriptStakeCredential), }),