From 3fddca075c8c3143f29088563b09fdf8a68796c3 Mon Sep 17 00:00:00 2001 From: Daniel Sanchez Quiros Date: Tue, 5 Mar 2024 19:02:19 +0100 Subject: [PATCH] Implement compute row proofs (not working on extended data) --- da/common.py | 4 ++-- da/encoder.py | 11 ++++++++++- da/test_encoder.py | 16 +++++++++++++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/da/common.py b/da/common.py index 72f1ef4..521cd5f 100644 --- a/da/common.py +++ b/da/common.py @@ -11,11 +11,11 @@ class Chunk(Bytes32): pass -class Column(bytes): +class Column(List[Bytes32]): pass -class Row(bytes): +class Row(List[Bytes32]): pass diff --git a/da/encoder.py b/da/encoder.py index 2c6f405..536326c 100644 --- a/da/encoder.py +++ b/da/encoder.py @@ -51,7 +51,16 @@ class DAEncoder: return ChunksMatrix(__rs_encode_row(row) for row in chunks_matrix) def _compute_rows_proofs(self, chunks_matrix: ChunksMatrix, row_commitments: List[Commitment]) -> List[List[Proof]]: - ... + proofs = [] + for row, commitment in zip(chunks_matrix, row_commitments): + poly = kzg.bytes_to_polynomial(row) + proofs.append( + [ + kzg.generate_element_proof(i, poly, GLOBAL_PARAMETERS, ROOTS_OF_UNITY) + for i in range(len(row)//self.params.bytes_per_field_element) + ] + ) + return proofs def _compute_column_kzg_commitments(self, chunks_matrix: ChunksMatrix) -> List[Commitment]: ... diff --git a/da/test_encoder.py b/da/test_encoder.py index 2d52bb0..dc3bd6f 100644 --- a/da/test_encoder.py +++ b/da/test_encoder.py @@ -57,7 +57,21 @@ class TestEncoder(TestCase): self.assertEqual(poly_1, poly_2) def test_compute_rows_proofs(self): - pass + chunks_matrix = self.encoder._chunkify_data(self.data) + commitments = self.encoder._compute_row_kzg_commitments(chunks_matrix) + extended_chunks_matrix = self.encoder._rs_encode_rows(chunks_matrix) + original_proofs = self.encoder._compute_rows_proofs(chunks_matrix, commitments) + extended_proofs = self.encoder._compute_rows_proofs(extended_chunks_matrix, commitments) + # check original sized matrix + for row, commitment, proofs in zip(chunks_matrix, commitments, original_proofs): + poly = kzg.bytes_to_polynomial(row) + for i in range(len(proofs)): + self.assertTrue(kzg.verify_element_proof(poly, commitment, proofs[i], i, ROOTS_OF_UNITY)) + # check extended matrix + for row, commitment, proofs in zip(extended_chunks_matrix, commitments, extended_proofs): + poly = kzg.bytes_to_polynomial(row) + for i in range(len(proofs)): + self.assertTrue(kzg.verify_element_proof(poly, commitment, proofs[i], i, ROOTS_OF_UNITY)) def test_compute_column_kzg_commitments(self): pass