pub trait Mmcs<T: Send + Sync>: Clone {
type ProverData<M>;
type Commitment: Clone + Serialize + DeserializeOwned;
type Proof: Clone + Serialize + DeserializeOwned;
type Error: Debug;
// Required methods
fn commit<M: Matrix<T>>(
&self,
inputs: Vec<M>,
) -> (Self::Commitment, Self::ProverData<M>);
fn open_batch<M: Matrix<T>>(
&self,
index: usize,
prover_data: &Self::ProverData<M>,
) -> (Vec<Vec<T>>, Self::Proof);
fn get_matrices<'a, M: Matrix<T>>(
&self,
prover_data: &'a Self::ProverData<M>,
) -> Vec<&'a M>;
fn verify_batch(
&self,
commit: &Self::Commitment,
dimensions: &[Dimensions],
index: usize,
opened_values: &[Vec<T>],
proof: &Self::Proof,
) -> Result<(), Self::Error>;
// Provided methods
fn commit_matrix<M: Matrix<T>>(
&self,
input: M,
) -> (Self::Commitment, Self::ProverData<M>) { ... }
fn commit_vec(
&self,
input: Vec<T>,
) -> (Self::Commitment, Self::ProverData<RowMajorMatrix<T>>)
where T: Clone + Send + Sync { ... }
fn get_matrix_heights<M: Matrix<T>>(
&self,
prover_data: &Self::ProverData<M>,
) -> Vec<usize> { ... }
fn get_max_height<M: Matrix<T>>(
&self,
prover_data: &Self::ProverData<M>,
) -> usize { ... }
}
Expand description
A “Mixed Matrix Commitment Scheme” (MMCS) is a generalization of a vector commitment scheme.
It supports committing to matrices and then opening rows. It is also batch-oriented; one can commit to a batch of matrices at once even if their widths and heights differ.
When a particular row index is opened, it is interpreted directly as a row index for matrices
with the largest height. For matrices with smaller heights, some bits of the row index are
removed (from the least-significant side) to get the effective row index. These semantics are
useful in the FRI protocol. See the documentation for open_batch
for more details.
Required Associated Types§
type ProverData<M>
type Commitment: Clone + Serialize + DeserializeOwned
type Proof: Clone + Serialize + DeserializeOwned
type Error: Debug
Required Methods§
fn commit<M: Matrix<T>>( &self, inputs: Vec<M>, ) -> (Self::Commitment, Self::ProverData<M>)
Sourcefn open_batch<M: Matrix<T>>(
&self,
index: usize,
prover_data: &Self::ProverData<M>,
) -> (Vec<Vec<T>>, Self::Proof)
fn open_batch<M: Matrix<T>>( &self, index: usize, prover_data: &Self::ProverData<M>, ) -> (Vec<Vec<T>>, Self::Proof)
Opens a batch of rows from committed matrices
returns (openings, proof)
where openings
is a vector whose i
th element is the j
th row of the ith matrix M[i]
,
and j = index >> (log2_ceil(max_height) - log2_ceil(M[i].height))
.
Sourcefn get_matrices<'a, M: Matrix<T>>(
&self,
prover_data: &'a Self::ProverData<M>,
) -> Vec<&'a M>
fn get_matrices<'a, M: Matrix<T>>( &self, prover_data: &'a Self::ProverData<M>, ) -> Vec<&'a M>
Get the matrices that were committed to.
Sourcefn verify_batch(
&self,
commit: &Self::Commitment,
dimensions: &[Dimensions],
index: usize,
opened_values: &[Vec<T>],
proof: &Self::Proof,
) -> Result<(), Self::Error>
fn verify_batch( &self, commit: &Self::Commitment, dimensions: &[Dimensions], index: usize, opened_values: &[Vec<T>], proof: &Self::Proof, ) -> Result<(), Self::Error>
Verify a batch opening.
index
is the row index we’re opening for each matrix, following the same
semantics as open_batch
.
dimensions
is a slice whose ith element is the dimensions of the matrix being opened
in the ith opening
Provided Methods§
fn commit_matrix<M: Matrix<T>>( &self, input: M, ) -> (Self::Commitment, Self::ProverData<M>)
fn commit_vec( &self, input: Vec<T>, ) -> (Self::Commitment, Self::ProverData<RowMajorMatrix<T>>)
fn get_matrix_heights<M: Matrix<T>>( &self, prover_data: &Self::ProverData<M>, ) -> Vec<usize>
Sourcefn get_max_height<M: Matrix<T>>(
&self,
prover_data: &Self::ProverData<M>,
) -> usize
fn get_max_height<M: Matrix<T>>( &self, prover_data: &Self::ProverData<M>, ) -> usize
Get the largest height of any committed matrix.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.