From f3b9d33f324aa97941162a701dbcde918ed1a4ca Mon Sep 17 00:00:00 2001 From: alessandrokonrad Date: Tue, 27 Sep 2022 14:33:49 +0200 Subject: [PATCH] added deserialisation error to machine --- crates/uplc/src/machine/error.rs | 2 ++ crates/uplc/src/machine/runtime.rs | 10 +++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/crates/uplc/src/machine/error.rs b/crates/uplc/src/machine/error.rs index 9be3823a..690c1643 100644 --- a/crates/uplc/src/machine/error.rs +++ b/crates/uplc/src/machine/error.rs @@ -44,4 +44,6 @@ pub enum Error { UnexpectedEd25519PublicKeyLength(usize), #[error("Ed25519S Signature should be 64 bytes but it was {0}")] UnexpectedEd25519SignatureLength(usize), + #[error("Failed to deserialise PlutusData:\n\n{0:#?}")] + DeserialisationError(Value), } diff --git a/crates/uplc/src/machine/runtime.rs b/crates/uplc/src/machine/runtime.rs index fa1614b2..8cd314b3 100644 --- a/crates/uplc/src/machine/runtime.rs +++ b/crates/uplc/src/machine/runtime.rs @@ -760,7 +760,7 @@ impl DefaultFunction { )), ))) } - _ => unreachable!(), + v => Err(Error::DeserialisationError(v.clone())), }, DefaultFunction::UnMapData => match &args[0] { Value::Con(Constant::Data(PlutusData::Map(m))) => { @@ -779,7 +779,7 @@ impl DefaultFunction { .collect(), ))) } - _ => unreachable!(), + v => Err(Error::DeserialisationError(v.clone())), }, DefaultFunction::UnListData => match &args[0] { Value::Con(Constant::Data(PlutusData::Array(l))) => { @@ -791,7 +791,7 @@ impl DefaultFunction { .collect(), ))) } - _ => unreachable!(), + v => Err(Error::DeserialisationError(v.clone())), }, DefaultFunction::UnIData => match &args[0] { Value::Con(Constant::Data(PlutusData::BigInt(b))) => { @@ -803,13 +803,13 @@ impl DefaultFunction { unreachable!() } } - _ => unreachable!(), + v => Err(Error::DeserialisationError(v.clone())), }, DefaultFunction::UnBData => match &args[0] { Value::Con(Constant::Data(PlutusData::BoundedBytes(b))) => { Ok(Value::Con(Constant::ByteString(b.to_vec()))) } - _ => unreachable!(), + v => Err(Error::DeserialisationError(v.clone())), }, DefaultFunction::EqualsData => match (&args[0], &args[1]) { (Value::Con(Constant::Data(d1)), Value::Con(Constant::Data(d2))) => {