BlobBuilder

Struct BlobBuilder 

Source
pub struct BlobBuilder { /* private fields */ }
Expand description

BlobBuilder provides an incremental way to construct a Blob from a stream of data.

This builder handles the division of input data into fixed-size ChunkSets, prepares RLNC-based erasure-coded chunks, computes BLAKE3 digest of blob, and generates Merkle inclusion (in respective Chunksets) proof for proof-carrying chunks.

Implementations§

Source§

impl BlobBuilder

Source

pub fn init() -> Self

Initializes a new BlobBuilder - ready to build a blob.

Source

pub fn num_bytes_absorbed_so_far(&self) -> usize

Source

pub fn update(&mut self, data: &[u8]) -> Option<Vec<ProofCarryingChunk>>

Updates the BlobBuilder with new data.

This method absorbs the provided data into the internal buffer. If enough data accumulates to form a complete ChunkSet, it is processed (erasure-coded, Merkle-proofed) and its resulting ProofCarryingChunks are returned.

You can call this method arbitrary number of times, before calling Self::finalize. Note, you must call this method atleast once with non-empty input data, to not get an error from Self::finalize - as you can’t build a blob over empty input data.

§Arguments
  • data - A byte slice containing the new data to be processed.
§Returns

An Option<Vec<ProofCarryingChunk>>.

  • Some(Vec<ProofCarryingChunk>) if one or more ChunkSets were completed and their chunks generated. These chunks carry Merkle proof-of-inclusion in respective Chunkset.
  • None if no complete ChunkSet was formed or if the input data was empty.
Source

pub fn finalize( self, ) -> Result<(Vec<ProofCarryingChunk>, BlobHeader), DecdsError>

Finalizes the BlobBuilder, processing any remaining buffered data and constructing the BlobHeader.

This method pads any incomplete ChunkSet in the buffer with zeros, processes it, computes the final blob digest, and builds the top-level Merkle tree over chunkset root commitments, yielding the BlobHeader and at max 16 proof-carrying chunks, if there was an incomplete chunkset, which needed to be built.

§Returns

Returns a Result which is:

  • Ok((Vec<ProofCarryingChunk>, BlobHeader)) containing either 0 or 16 ProofCarryingChunks from last chunkset and the BlobHeader for the complete blob.
  • Err(DecdsError::EmptyDataForBlob) if no data was ever absorbed by the builder.
  • Other DecdsError types may be returned from underlying MerkleTree::new calls.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V