From 865b25b58bedcc77e1d823f31b2b3fe928d738f8 Mon Sep 17 00:00:00 2001 From: Sebastien Guillemot Date: Sun, 7 Aug 2022 03:48:32 +0900 Subject: [PATCH] feat(traverse): Add missing getters on output (#162) --- pallas-primitives/src/babbage/model.rs | 4 ++-- pallas-traverse/src/output.rs | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/pallas-primitives/src/babbage/model.rs b/pallas-primitives/src/babbage/model.rs index 612ef03..927fadf 100644 --- a/pallas-primitives/src/babbage/model.rs +++ b/pallas-primitives/src/babbage/model.rs @@ -93,7 +93,7 @@ pub use crate::alonzo::Coin; pub use crate::alonzo::Value; -pub use crate::alonzo::TransactionOutput as LegacyTransacionOutput; +pub use crate::alonzo::TransactionOutput as LegacyTransactionOutput; pub use crate::alonzo::PoolKeyhash; @@ -285,7 +285,7 @@ pub struct TransactionBody { #[derive(Debug, PartialEq, Clone)] pub enum TransactionOutput { - Legacy(LegacyTransacionOutput), + Legacy(LegacyTransactionOutput), PostAlonzo(PostAlonzoTransactionOutput), } diff --git a/pallas-traverse/src/output.rs b/pallas-traverse/src/output.rs index 451d891..72d202a 100644 --- a/pallas-traverse/src/output.rs +++ b/pallas-traverse/src/output.rs @@ -2,7 +2,7 @@ use std::{borrow::Cow, ops::Deref}; use pallas_addresses::{Address, ByronAddress, Error as AddressError}; use pallas_codec::minicbor; -use pallas_primitives::{alonzo, babbage, byron}; +use pallas_primitives::{alonzo, babbage::{self, DatumOption, ScriptRef}, byron}; use crate::{Era, MultiEraOutput}; @@ -19,6 +19,27 @@ impl<'b> MultiEraOutput<'b> { Self::Babbage(Box::new(Cow::Borrowed(output))) } + pub fn datum(&self) -> Option { + match self { + MultiEraOutput::AlonzoCompatible(x) => x.datum_hash.map(DatumOption::Hash), + MultiEraOutput::Babbage(x) => match x.deref().deref() { + babbage::TransactionOutput::Legacy(x) => x.datum_hash.map(DatumOption::Hash), + babbage::TransactionOutput::PostAlonzo(x) => x.datum_option.clone(), + }, + _ => None + } + } + + pub fn script_ref(&self) -> Option<&ScriptRef> { + match &self { + MultiEraOutput::Babbage(x) => match x.deref().deref() { + babbage::TransactionOutput::Legacy(_) => None, + babbage::TransactionOutput::PostAlonzo(x) => x.script_ref.as_ref(), + }, + _ => None + } + } + pub fn address(&self) -> Result { match self { MultiEraOutput::AlonzoCompatible(x) => Address::from_bytes(&x.address),