pub struct Proof {
pub leaf_count: u32,
pub siblings: Vec<Hash>,
}Expand description
A BMT inclusion proof for one or more leaves: the tree’s leaf count plus the deduplicated sibling digests needed to reconstruct the root, ordered level-major (bottom-up) then index-ascending.
Bytes are u32 BE leaf_count ‖ LEB128-varint(n) ‖ n × 32-byte digest —
byte-identical to commonware_storage::bmt::Proof<D> at the pinned
2026.9.0 train (tests::proofs_match_commonware pins this; see also
rust/tests/golden/proofs/). A commonware-based verifier can decode
these bytes with the upstream type directly.
Fields§
§leaf_count: u32The number of leaves in the tree. Incorporated into the finalized
root, so a mismatched leaf_count fails verification rather than
being silently accepted (malleability guard).
siblings: Vec<Hash>The deduplicated sibling digests, level-major bottom-up then
index-ascending, with self-duplicate and already-proven siblings
omitted (see docs/specs/SPEC-MERKLE-OBJECTS.md §5.3).
Implementations§
Source§impl Proof
impl Proof
Sourcepub fn decode(bytes: &[u8], max_items: usize) -> Result<Self, MerkleError>
pub fn decode(bytes: &[u8], max_items: usize) -> Result<Self, MerkleError>
Decode from the commonware-identical wire bytes, bounding the
sibling count to max_items * MAX_LEVELS. max_items should be the
number of positions the caller is about to verify (1 for a
single-leaf proof, the range length for a range proof, the position
count for a multi-proof). Rejects trailing bytes.
§Errors
MerkleError::MalformedProof on a truncated buffer, an
over-max_items sibling count, or trailing bytes.
Trait Implementations§
Source§impl EncodeSize for Proof
impl EncodeSize for Proof
Source§fn encode_size(&self) -> usize
fn encode_size(&self) -> usize
Source§fn encode_inline_size(&self) -> usize
fn encode_inline_size(&self) -> usize
BufsMut::push
during Write::write_bufs. Used to size the working buffer for inline
writes. Override alongside Write::write_bufs for types where large
Bytes fields go via push; failing to do so will over-allocate.impl Eq for Proof
Source§impl Read for Proof
impl Read for Proof
impl StructuralPartialEq for Proof
Source§impl Write for Proof
impl Write for Proof
Source§fn write_bufs(&self, buf: &mut impl BufsMut)
fn write_bufs(&self, buf: &mut impl BufsMut)
BufsMut, allowing existing Bytes chunks to be
appended via BufsMut::push instead of written inline. Must encode
to the same format as Write::write. Defaults to Write::write.Auto Trait Implementations§
impl Freeze for Proof
impl RefUnwindSafe for Proof
impl Send for Proof
impl Sync for Proof
impl Unpin for Proof
impl UnsafeUnpin for Proof
impl UnwindSafe for Proof
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
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> Codec for T
Source§impl<T> Encode for Twhere
T: Write + EncodeSize,
impl<T> Encode for Twhere
T: Write + EncodeSize,
Source§impl<T> EncodeExt for Twhere
T: EncodeSize + Write,
impl<T> EncodeExt for Twhere
T: EncodeSize + Write,
Source§fn encode_with_pool_mut(&self, pool: &BufferPool) -> IoBufMut
fn encode_with_pool_mut(&self, pool: &BufferPool) -> IoBufMut
Source§fn encode_with_pool(&self, pool: &BufferPool) -> IoBufs
fn encode_with_pool(&self, pool: &BufferPool) -> IoBufs
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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 more