pub struct NullifierTree<Backend = Smt> { /* private fields */ }Expand description
The sparse merkle tree of all nullifiers in the blockchain.
A nullifier can only ever be spent once and its value in the tree is the block number at which it was spent.
The tree guarantees that once a nullifier has been inserted into the tree, its block number does not change. Note that inserting the nullifier multiple times with the same block number is valid.
Implementations§
Source§impl NullifierTree<Smt>
impl NullifierTree<Smt>
Sourcepub fn with_entries(
entries: impl IntoIterator<Item = (Nullifier, BlockNumber)>,
) -> Result<Self, NullifierTreeError>
pub fn with_entries( entries: impl IntoIterator<Item = (Nullifier, BlockNumber)>, ) -> Result<Self, NullifierTreeError>
Creates a new nullifier tree from the provided entries.
This is a convenience method that creates an SMT backend with the provided entries and wraps it in a NullifierTree.
§Errors
Returns an error if:
- the provided entries contain multiple block numbers for the same nullifier.
Source§impl<Backend> NullifierTree<LargeSmt<Backend>>where
Backend: SmtStorage,
impl<Backend> NullifierTree<LargeSmt<Backend>>where
Backend: SmtStorage,
Sourcepub fn with_storage_from_entries(
storage: Backend,
entries: impl IntoIterator<Item = (Nullifier, BlockNumber)>,
) -> Result<Self, NullifierTreeError>
pub fn with_storage_from_entries( storage: Backend, entries: impl IntoIterator<Item = (Nullifier, BlockNumber)>, ) -> Result<Self, NullifierTreeError>
Creates a new nullifier tree from the provided entries using the given storage backend
This is a convenience method that creates an SMT on the provided storage backend using the provided entries and wraps it in a NullifierTree.
§Errors
Returns an error if:
- the provided entries contain multiple block numbers for the same nullifier.
- a storage error is encountered.
Source§impl<Backend> NullifierTree<Backend>where
Backend: NullifierTreeBackend<Error = MerkleError>,
impl<Backend> NullifierTree<Backend>where
Backend: NullifierTreeBackend<Error = MerkleError>,
Sourcepub fn new_unchecked(backend: Backend) -> Self
pub fn new_unchecked(backend: Backend) -> Self
Creates a new NullifierTree from its inner representation.
§Invariants
See the documentation on NullifierTreeBackend trait documentation.
Sourcepub fn num_nullifiers(&self) -> usize
pub fn num_nullifiers(&self) -> usize
Returns the number of spent nullifiers in this tree.
Sourcepub fn entries(&self) -> impl Iterator<Item = (Nullifier, BlockNumber)>
pub fn entries(&self) -> impl Iterator<Item = (Nullifier, BlockNumber)>
Returns an iterator over the nullifiers and their block numbers in the tree.
Sourcepub fn open(&self, nullifier: &Nullifier) -> NullifierWitness
pub fn open(&self, nullifier: &Nullifier) -> NullifierWitness
Returns a NullifierWitness of the leaf associated with the nullifier.
Conceptually, such a witness is a Merkle path to the leaf, as well as the leaf itself.
This witness is a proof of the current block number of the given nullifier. If that block number is zero, it proves that the nullifier is unspent.
Sourcepub fn get_block_num(&self, nullifier: &Nullifier) -> Option<BlockNumber>
pub fn get_block_num(&self, nullifier: &Nullifier) -> Option<BlockNumber>
Returns the block number for the given nullifier or None if the nullifier wasn’t spent
yet.
Sourcepub fn compute_mutations<I>(
&self,
nullifiers: impl IntoIterator<Item = (Nullifier, BlockNumber), IntoIter = I>,
) -> Result<NullifierMutationSet, NullifierTreeError>
pub fn compute_mutations<I>( &self, nullifiers: impl IntoIterator<Item = (Nullifier, BlockNumber), IntoIter = I>, ) -> Result<NullifierMutationSet, NullifierTreeError>
Computes a mutation set resulting from inserting the provided nullifiers into this nullifier tree.
§Errors
Returns an error if:
- a nullifier in the provided iterator was already spent.
Sourcepub fn mark_spent(
&mut self,
nullifier: Nullifier,
block_num: BlockNumber,
) -> Result<(), NullifierTreeError>
pub fn mark_spent( &mut self, nullifier: Nullifier, block_num: BlockNumber, ) -> Result<(), NullifierTreeError>
Marks the given nullifier as spent at the given block number.
§Errors
Returns an error if:
- the nullifier was already spent.
Sourcepub fn apply_mutations(
&mut self,
mutations: NullifierMutationSet,
) -> Result<(), NullifierTreeError>
pub fn apply_mutations( &mut self, mutations: NullifierMutationSet, ) -> Result<(), NullifierTreeError>
Applies mutations to the nullifier tree.
§Errors
Returns an error if:
mutationswas computed on a tree with a different root than this one.
Trait Implementations§
Source§impl<Backend: Clone> Clone for NullifierTree<Backend>
impl<Backend: Clone> Clone for NullifierTree<Backend>
Source§fn clone(&self) -> NullifierTree<Backend>
fn clone(&self) -> NullifierTree<Backend>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<Backend: Debug> Debug for NullifierTree<Backend>
impl<Backend: Debug> Debug for NullifierTree<Backend>
Source§impl<Backend> Default for NullifierTree<Backend>where
Backend: Default,
impl<Backend> Default for NullifierTree<Backend>where
Backend: Default,
Source§impl Deserializable for NullifierTree
impl Deserializable for NullifierTree
Source§fn read_from<R: ByteReader>(
source: &mut R,
) -> Result<Self, DeserializationError>
fn read_from<R: ByteReader>( source: &mut R, ) -> Result<Self, DeserializationError>
source, attempts to deserialize these bytes
into Self, and returns the result. Read moreSource§fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>
fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>
Source§impl<Backend: PartialEq> PartialEq for NullifierTree<Backend>
impl<Backend: PartialEq> PartialEq for NullifierTree<Backend>
Source§impl Serializable for NullifierTree
impl Serializable for NullifierTree
Source§fn write_into<W: ByteWriter>(&self, target: &mut W)
fn write_into<W: ByteWriter>(&self, target: &mut W)
self into bytes and writes these bytes into the target.Source§fn get_size_hint(&self) -> usize
fn get_size_hint(&self) -> usize
impl<Backend: Eq> Eq for NullifierTree<Backend>
impl<Backend> StructuralPartialEq for NullifierTree<Backend>
Auto Trait Implementations§
impl<Backend> Freeze for NullifierTree<Backend>where
Backend: Freeze,
impl<Backend> RefUnwindSafe for NullifierTree<Backend>where
Backend: RefUnwindSafe,
impl<Backend> Send for NullifierTree<Backend>where
Backend: Send,
impl<Backend> Sync for NullifierTree<Backend>where
Backend: Sync,
impl<Backend> Unpin for NullifierTree<Backend>where
Backend: Unpin,
impl<Backend> UnwindSafe for NullifierTree<Backend>where
Backend: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more