diff --git a/zebra-chain/src/transaction/shielded_data.rs b/zebra-chain/src/transaction/shielded_data.rs index f617a2ad8..c6df6550a 100644 --- a/zebra-chain/src/transaction/shielded_data.rs +++ b/zebra-chain/src/transaction/shielded_data.rs @@ -2,7 +2,7 @@ use futures::future::Either; use crate::{ primitives::redjubjub::{Binding, Signature}, - sapling::{Output, Spend}, + sapling::{Nullifier, Output, Spend}, serialization::serde_helpers, }; @@ -61,6 +61,17 @@ impl ShieldedData { .into_iter() .chain(self.rest_outputs.iter()) } + + /// Collect the [`Nullifier`]s for this transaction, if it contains + /// [`Spend`]s. + pub fn nullifiers(&self) -> Vec { + self.spends().map(|spend| spend.nullifier).collect() + } + + /// Collect the cm_u's for this transaction, if it contains [`Output`]s. + pub fn note_commitments(&self) -> Vec { + self.outputs().map(|output| output.cm_u).collect() + } } // Technically, it's possible to construct two equivalent representations