From 14d5abdb03c5c97afc3f9f971bc5f53b902c0ceb Mon Sep 17 00:00:00 2001 From: teor Date: Fri, 9 Jul 2021 12:54:57 +1000 Subject: [PATCH] Add methods for getting block nullifiers (#2465) * Add methods for getting block nullifiers These methods will be used in a future PR to check for double-spends. * Add doc links Co-authored-by: Janito Vaqueiro Ferreira Filho Co-authored-by: Janito Vaqueiro Ferreira Filho --- zebra-chain/src/block.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/zebra-chain/src/block.rs b/zebra-chain/src/block.rs index c96032ec..331a0f48 100644 --- a/zebra-chain/src/block.rs +++ b/zebra-chain/src/block.rs @@ -29,8 +29,11 @@ use serde::{Deserialize, Serialize}; use crate::{ fmt::DisplayToDebug, + orchard, parameters::{Network, NetworkUpgrade}, + sapling, serialization::{TrustedPreallocate, MAX_PROTOCOL_MESSAGE_LEN}, + sprout, transaction::Transaction, transparent, }; @@ -116,6 +119,30 @@ impl Block { Ok(()) } + + /// Access the [`sprout::Nullifier`]s from all transactions in this block. + pub fn sprout_nullifiers(&self) -> impl Iterator { + self.transactions + .iter() + .map(|transaction| transaction.sprout_nullifiers()) + .flatten() + } + + /// Access the [`sapling::Nullifier`]s from all transactions in this block. + pub fn sapling_nullifiers(&self) -> impl Iterator { + self.transactions + .iter() + .map(|transaction| transaction.sapling_nullifiers()) + .flatten() + } + + /// Access the [`orchard::Nullifier`]s from all transactions in this block. + pub fn orchard_nullifiers(&self) -> impl Iterator { + self.transactions + .iter() + .map(|transaction| transaction.orchard_nullifiers()) + .flatten() + } } impl<'a> From<&'a Block> for Hash {