Implement compute elements (row) proofs

This commit is contained in:
Daniel Sanchez Quiros 2024-04-11 18:31:42 +03:00
parent 9b2d723fd9
commit b0d957c85c
2 changed files with 34 additions and 5 deletions

View File

@ -1,8 +1,8 @@
use crate::common::{Chunk, ChunksMatrix};
use crate::global::{DOMAIN, GLOBAL_PARAMETERS};
use kzgrs::{
bytes_to_polynomial, commit_polynomial, Commitment, Polynomial, PolynomialEvaluationDomain,
Proof, BYTES_PER_FIELD_ELEMENT,
bytes_to_polynomial, commit_polynomial, encode, generate_element_proof, Commitment,
Evaluations, Polynomial, PolynomialEvaluationDomain, Proof, BYTES_PER_FIELD_ELEMENT,
};
pub struct DaEncoderParams {
column_count: usize,
@ -47,17 +47,45 @@ impl DaEncoder {
.collect()
}
fn compute_kzg_row_commitments(matrix: ChunksMatrix) -> Vec<(Polynomial, Commitment)> {
fn compute_kzg_row_commitments(
matrix: ChunksMatrix,
) -> Vec<((Evaluations, Polynomial), Commitment)> {
matrix
.rows()
.map(|r| {
let (_, poly) = bytes_to_polynomial::<
let (evals, poly) = bytes_to_polynomial::<
{ DaEncoderParams::MAX_BLS12_381_ENCODING_CHUNK_SIZE },
>(r.as_bytes().as_ref(), *DOMAIN)
.unwrap();
let commitment = commit_polynomial(&poly, &GLOBAL_PARAMETERS).unwrap();
(poly, commitment)
((evals, poly), commitment)
})
.collect()
}
fn rs_encode_row(evaluations: &Evaluations, row: &Polynomial) -> Evaluations {
encode(row, evaluations, 2, &DOMAIN)
}
fn rs_encode_rows(rows: &[(Evaluations, Polynomial)]) -> Vec<Evaluations> {
rows.iter()
.map(|(eval, poly)| Self::rs_encode_row(eval, poly))
.collect()
}
fn compute_rows_proofs(
polynomials: &[Polynomial],
commitments: &[Commitment],
size: usize,
) -> Vec<Vec<Proof>> {
polynomials
.iter()
.zip(commitments.iter())
.map(|(poly, commitment)| {
(0..size)
.map(|i| generate_element_proof(i, poly, &GLOBAL_PARAMETERS, &DOMAIN).unwrap())
.collect()
})
.collect()
}

View File

@ -19,6 +19,7 @@ pub type Commitment = kzg10::Commitment<Bls12_381>;
pub type Proof = kzg10::Proof<Bls12_381>;
pub type FieldElement = ark_bls12_381::Fr;
pub type Polynomial = DensePolynomial<Fr>;
pub type Evaluations = ark_poly::Evaluations<Fr>;
pub type PolynomialEvaluationDomain = GeneralEvaluationDomain<Fr>;
pub type GlobalParameters = UniversalParams<Bls12_381>;