pub struct MerkleTree<F, Digest> { /* private fields */ }Implementations§
Source§impl<F, Digest> MerkleTree<F, Digest>
impl<F, Digest> MerkleTree<F, Digest>
Sourcepub fn backing_matrix(&self) -> &ColMajorMatrix<F>
pub fn backing_matrix(&self) -> &ColMajorMatrix<F>
The matrix that is used to form the leaves of the Merkle tree, which are in turn hashed into the bottom digest layer.
This is typically the codeword matrix in hash-based PCS.
pub fn digest_layers(&self) -> &Vec<Vec<Digest>>
Source§impl<F, Digest> MerkleTree<F, Digest>
impl<F, Digest> MerkleTree<F, Digest>
pub fn rows_per_query(&self) -> usize
Source§impl<F, Digest> MerkleTree<F, Digest>
impl<F, Digest> MerkleTree<F, Digest>
pub fn query_stride(&self) -> usize
pub fn proof_depth(&self) -> usize
Source§impl<F, Digest: Clone> MerkleTree<F, Digest>
impl<F, Digest: Clone> MerkleTree<F, Digest>
pub fn root(&self) -> Result<Digest, StackedPcsError>
pub fn query_merkle_proof( &self, query_idx: usize, ) -> Result<Vec<Digest>, StackedPcsError>
Source§impl<EF: Field, Digest> MerkleTree<EF, Digest>
impl<EF: Field, Digest> MerkleTree<EF, Digest>
pub fn new<H: MerkleHasher<Digest = Digest>>(
hasher: &H,
matrix: ColMajorMatrix<EF>,
rows_per_query: usize,
) -> Result<Self, StackedPcsError>where
EF: ExtensionField<H::F>,
Sourcepub unsafe fn from_raw_parts(
backing_matrix: ColMajorMatrix<EF>,
digest_layers: Vec<Vec<Digest>>,
rows_per_query: usize,
) -> Self
pub unsafe fn from_raw_parts( backing_matrix: ColMajorMatrix<EF>, digest_layers: Vec<Vec<Digest>>, rows_per_query: usize, ) -> Self
Construct a MerkleTree from pre-computed parts without validation.
§Safety
The caller must guarantee:
digest_layersform a valid Merkle tree overbacking_matrix: the leaf layer contains correct hashes of the matrix rows and each subsequent layer contains correct compressions of consecutive pairs from the previous layer, terminating in a single root digest.rows_per_queryis a power of two and does not exceed the number of leaves (i.e.,backing_matrix.height().next_power_of_two()).- The leaf layer length equals
backing_matrix.height().next_power_of_two() / rows_per_query.
Violating these invariants will produce incorrect Merkle proofs or panics in downstream query/verification code.
Sourcepub fn get_opened_rows(
&self,
index: usize,
) -> Result<Vec<Vec<EF>>, StackedPcsError>
pub fn get_opened_rows( &self, index: usize, ) -> Result<Vec<Vec<EF>>, StackedPcsError>
Returns the ordered set of opened rows for the given query index. The rows are { query_idx + t * query_stride() } for t in 0..rows_per_query.
Trait Implementations§
Source§impl<F: Clone, Digest: Clone> Clone for MerkleTree<F, Digest>
impl<F: Clone, Digest: Clone> Clone for MerkleTree<F, Digest>
Source§fn clone(&self) -> MerkleTree<F, Digest>
fn clone(&self) -> MerkleTree<F, Digest>
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<'de, F, Digest> Deserialize<'de> for MerkleTree<F, Digest>where
F: Deserialize<'de>,
Digest: Deserialize<'de>,
impl<'de, F, Digest> Deserialize<'de> for MerkleTree<F, Digest>where
F: Deserialize<'de>,
Digest: Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl<F, Digest> Freeze for MerkleTree<F, Digest>
impl<F, Digest> RefUnwindSafe for MerkleTree<F, Digest>where
F: RefUnwindSafe,
Digest: RefUnwindSafe,
impl<F, Digest> Send for MerkleTree<F, Digest>
impl<F, Digest> Sync for MerkleTree<F, Digest>
impl<F, Digest> Unpin for MerkleTree<F, Digest>
impl<F, Digest> UnsafeUnpin for MerkleTree<F, Digest>
impl<F, Digest> UnwindSafe for MerkleTree<F, Digest>where
F: UnwindSafe,
Digest: 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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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>
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 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>
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