pub struct PartialBlockchain { /* private fields */ }Expand description
A partial view into the full Blockchain’s Merkle Mountain Range
(MMR).
It allows for efficient authentication of input notes during transaction execution or authentication of reference blocks during batch or block execution. Authentication is achieved by providing inclusion proofs for the notes consumed in the transaction against the partial blockchain root associated with the transaction’s reference block.
PartialBlockchain contains authentication paths for a limited set of blocks. The intent is
to include only the blocks relevant for execution:
- For transactions: the set of blocks in which all input notes were created.
- For batches: the set of reference blocks of all transactions in the batch and the blocks to prove any unauthenticated note’s inclusion.
- For blocks: the set of reference blocks of all batches in the block and the blocks to prove any unauthenticated note’s inclusion.
§Guarantees
The PartialBlockchain contains the full authenticated BlockHeaders of all blocks it
tracks in its partial MMR and users of this type can make this assumption. This is ensured when
using PartialBlockchain::new. PartialBlockchain::new_unchecked should only be used
whenever this guarantee can be upheld.
Implementations§
Source§impl PartialBlockchain
impl PartialBlockchain
Sourcepub fn new(
mmr: PartialMmr,
blocks: impl IntoIterator<Item = BlockHeader>,
) -> Result<Self, PartialBlockchainError>
pub fn new( mmr: PartialMmr, blocks: impl IntoIterator<Item = BlockHeader>, ) -> Result<Self, PartialBlockchainError>
Returns a new PartialBlockchain instantiated from the provided partial MMR and a list of block headers.
§Errors
Returns an error if:
- block_num for any of the blocks is greater than the chain length implied by the provided partial MMR.
- The same block appears more than once in the provided list of block headers.
- The partial MMR does not track authentication paths for any of the specified blocks.
- Any of the provided block header’s commitment is not tracked in the MMR, i.e. its inclusion cannot be verified.
Sourcepub fn new_unchecked(
mmr: PartialMmr,
blocks: impl IntoIterator<Item = BlockHeader>,
) -> Result<Self, PartialBlockchainError>
pub fn new_unchecked( mmr: PartialMmr, blocks: impl IntoIterator<Item = BlockHeader>, ) -> Result<Self, PartialBlockchainError>
Returns a new PartialBlockchain instantiated from the provided partial MMR and a list of block headers.
§Warning
This does not verify that the provided block commitments are in the MMR. Use Self::new
to run this verification. This constructor is provided to bypass this check in trusted
environment because it is relatively expensive.
§Errors
Returns an error if:
- block_num for any of the blocks is greater than the chain length implied by the provided partial MMR.
- The same block appears more than once in the provided list of block headers.
- The partial MMR does not track authentication paths for any of the specified blocks.
Sourcepub fn mmr(&self) -> &PartialMmr
pub fn mmr(&self) -> &PartialMmr
Returns the underlying PartialMmr.
Sourcepub fn chain_length(&self) -> BlockNumber
pub fn chain_length(&self) -> BlockNumber
Returns total number of blocks contain in the chain described by this MMR.
Sourcepub fn num_tracked_blocks(&self) -> usize
pub fn num_tracked_blocks(&self) -> usize
Returns the number of blocks tracked by this partial blockchain.
Sourcepub fn contains_block(&self, block_num: BlockNumber) -> bool
pub fn contains_block(&self, block_num: BlockNumber) -> bool
Returns true if a block with the given number is present in this partial blockchain.
Note that this only checks whether an entry with the block’s number exists in the MMR.
Sourcepub fn get_block(&self, block_num: BlockNumber) -> Option<&BlockHeader>
pub fn get_block(&self, block_num: BlockNumber) -> Option<&BlockHeader>
Returns the block header for the specified block, or None if the block is not present in this partial blockchain.
Sourcepub fn block_headers(&self) -> impl Iterator<Item = &BlockHeader>
pub fn block_headers(&self) -> impl Iterator<Item = &BlockHeader>
Returns an iterator over the block headers in this partial blockchain.
Sourcepub fn add_block(&mut self, block_header: BlockHeader, track: bool)
pub fn add_block(&mut self, block_header: BlockHeader, track: bool)
Appends the provided block header to this partial blockchain. This method assumes that the provided block header is for the next block in the chain.
If track parameter is set to true, the authentication path for the provided block header
will be added to this partial blockchain.
§Panics
Panics if the block_header.block_num is not equal to the current chain length (i.e., the
provided block header is not the next block in the chain).
Sourcepub fn prune_to(&mut self, to: RangeTo<BlockNumber>)
pub fn prune_to(&mut self, to: RangeTo<BlockNumber>)
Drop every block header whose number is strictly less than to.end.
After the call, all such headers are removed, and each pruned header’s path is untrack‑ed
from the internal PartialMmr, eliminating local authentication data for those leaves
while leaving the MMR root commitment unchanged.
Sourcepub fn remove(&mut self, block_num: BlockNumber)
pub fn remove(&mut self, block_num: BlockNumber)
Removes a single block header and the associated authentication path from this
PartialBlockchain.
This does not change the commitment to the underlying MMR, but the current partial MMR will no longer track the removed data.
Sourcepub fn inner_nodes(&self) -> impl Iterator<Item = InnerNodeInfo> + '_
pub fn inner_nodes(&self) -> impl Iterator<Item = InnerNodeInfo> + '_
Returns an iterator over the inner nodes of authentication paths contained in this chain MMR.
Trait Implementations§
Source§impl Clone for PartialBlockchain
impl Clone for PartialBlockchain
Source§fn clone(&self) -> PartialBlockchain
fn clone(&self) -> PartialBlockchain
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PartialBlockchain
impl Debug for PartialBlockchain
Source§impl Default for PartialBlockchain
impl Default for PartialBlockchain
Source§impl Deserializable for PartialBlockchain
impl Deserializable for PartialBlockchain
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 PartialEq for PartialBlockchain
impl PartialEq for PartialBlockchain
Source§impl Serializable for PartialBlockchain
impl Serializable for PartialBlockchain
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 Eq for PartialBlockchain
impl StructuralPartialEq for PartialBlockchain
Auto Trait Implementations§
impl Freeze for PartialBlockchain
impl RefUnwindSafe for PartialBlockchain
impl Send for PartialBlockchain
impl Sync for PartialBlockchain
impl Unpin for PartialBlockchain
impl UnwindSafe for PartialBlockchain
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