binius_core/merkle_tree/
merkle_tree_vcs.rs1use binius_maybe_rayon::iter::IndexedParallelIterator;
4use bytes::{Buf, BufMut};
5
6use super::errors::Error;
7use crate::transcript::{TranscriptReader, TranscriptWriter};
8
9#[derive(Debug, Clone, PartialEq, Eq)]
14pub struct Commitment<Digest> {
15 pub root: Digest,
17 pub depth: usize,
19}
20
21pub trait MerkleTreeScheme<T>: Sync {
23 type Digest: Clone + PartialEq + Eq;
24
25 fn optimal_verify_layer(&self, n_queries: usize, tree_depth: usize) -> usize;
27
28 fn proof_size(&self, len: usize, n_queries: usize, layer_depth: usize) -> Result<usize, Error>;
35
36 fn verify_vector(
38 &self,
39 root: &Self::Digest,
40 data: &[T],
41 batch_size: usize,
42 ) -> Result<(), Error>;
43
44 fn verify_layer(
50 &self,
51 root: &Self::Digest,
52 layer_depth: usize,
53 layer_digests: &[Self::Digest],
54 ) -> Result<(), Error>;
55
56 fn verify_opening<B: Buf>(
58 &self,
59 index: usize,
60 values: &[T],
61 layer_depth: usize,
62 tree_depth: usize,
63 layer_digests: &[Self::Digest],
64 proof: &mut TranscriptReader<B>,
65 ) -> Result<(), Error>;
66}
67
68pub trait MerkleTreeProver<T>: Sync {
73 type Scheme: MerkleTreeScheme<T>;
74 type Committed;
76
77 fn scheme(&self) -> &Self::Scheme;
79
80 #[allow(clippy::type_complexity)]
82 fn commit(
83 &self,
84 data: &[T],
85 batch_size: usize,
86 ) -> Result<(Commitment<<Self::Scheme as MerkleTreeScheme<T>>::Digest>, Self::Committed), Error>;
87
88 #[allow(clippy::type_complexity)]
90 fn commit_iterated<ParIter>(
91 &self,
92 iterated_chunks: ParIter,
93 log_len: usize,
94 ) -> Result<(Commitment<<Self::Scheme as MerkleTreeScheme<T>>::Digest>, Self::Committed), Error>
95 where
96 ParIter: IndexedParallelIterator<Item: IntoIterator<Item = T>>;
97
98 fn layer<'a>(
100 &self,
101 committed: &'a Self::Committed,
102 layer_depth: usize,
103 ) -> Result<&'a [<Self::Scheme as MerkleTreeScheme<T>>::Digest], Error>;
104
105 fn prove_opening<B: BufMut>(
113 &self,
114 committed: &Self::Committed,
115 layer_depth: usize,
116 index: usize,
117 proof: &mut TranscriptWriter<B>,
118 ) -> Result<(), Error>;
119}