Randomize the test_recover_polynomial()
This commit is contained in:
parent
09c2519938
commit
a58c86832a
|
@ -486,7 +486,7 @@ def recover_polynomial(cell_ids: Sequence[CellID], cells: Sequence[Cell]) -> Pol
|
||||||
extended_evaluation_rbo[start:end] = cell
|
extended_evaluation_rbo[start:end] = cell
|
||||||
extended_evaluation = bit_reversal_permutation(extended_evaluation_rbo)
|
extended_evaluation = bit_reversal_permutation(extended_evaluation_rbo)
|
||||||
|
|
||||||
extended_evaluation_times_zero = [BLSFieldElement(a * b % BLS_MODULUS)
|
extended_evaluation_times_zero = [BLSFieldElement(int(a) * int(b) % BLS_MODULUS)
|
||||||
for a, b in zip(zero_poly_eval, extended_evaluation)]
|
for a, b in zip(zero_poly_eval, extended_evaluation)]
|
||||||
|
|
||||||
extended_evaluations_fft = fft_field(extended_evaluation_times_zero, ROOTS_OF_UNITY_EXTENDED, inv=True)
|
extended_evaluations_fft = fft_field(extended_evaluation_times_zero, ROOTS_OF_UNITY_EXTENDED, inv=True)
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import random
|
||||||
from eth2spec.test.context import (
|
from eth2spec.test.context import (
|
||||||
spec_test,
|
spec_test,
|
||||||
single_phase,
|
single_phase,
|
||||||
|
@ -17,6 +18,7 @@ def test_fft(spec):
|
||||||
result = spec.fft_field(vals, roots_of_unity)
|
result = spec.fft_field(vals, roots_of_unity)
|
||||||
assert len(result) == len(vals)
|
assert len(result) == len(vals)
|
||||||
# TODO: add more assertions?
|
# TODO: add more assertions?
|
||||||
|
# One possible test would be to use polynomial_eval_to_coeff()
|
||||||
|
|
||||||
|
|
||||||
@with_peerdas_and_later
|
@with_peerdas_and_later
|
||||||
|
@ -53,11 +55,37 @@ def test_verify_cell_proof_batch(spec):
|
||||||
@spec_test
|
@spec_test
|
||||||
@single_phase
|
@single_phase
|
||||||
def test_recover_polynomial(spec):
|
def test_recover_polynomial(spec):
|
||||||
blob = get_sample_blob(spec)
|
rng = random.Random(5566)
|
||||||
original_polynomial = spec.blob_to_polynomial(blob)
|
|
||||||
cells = spec.compute_cells(blob)
|
|
||||||
cell_ids = list(range(spec.CELLS_PER_BLOB // 2))
|
|
||||||
known_cells = [cells[cell_id] for cell_id in cell_ids]
|
|
||||||
result = spec.recover_polynomial(cell_ids, known_cells)
|
|
||||||
|
|
||||||
assert original_polynomial == result[0:len(result) // 2]
|
# Number of samples we will be recovering from
|
||||||
|
N_SAMPLES = spec.CELLS_PER_BLOB // 2
|
||||||
|
|
||||||
|
# Get the data we will be working with
|
||||||
|
blob = get_sample_blob(spec)
|
||||||
|
# Get the data in evaluation form
|
||||||
|
original_polynomial = spec.blob_to_polynomial(blob)
|
||||||
|
|
||||||
|
# Extend data with Reed-Solomon and split the extended data in cells
|
||||||
|
cells = spec.compute_cells(blob)
|
||||||
|
|
||||||
|
# Compute the cells we will be recovering from
|
||||||
|
cell_ids = []
|
||||||
|
known_cells = []
|
||||||
|
# First figure out just the indices of the cells
|
||||||
|
for i in range(N_SAMPLES):
|
||||||
|
j = rng.randint(0, spec.CELLS_PER_BLOB)
|
||||||
|
while j in cell_ids:
|
||||||
|
j = rng.randint(0, spec.CELLS_PER_BLOB)
|
||||||
|
cell_ids.append(j)
|
||||||
|
# Now the cells themselves
|
||||||
|
known_cells = [cells[cell_id] for cell_id in cell_ids]
|
||||||
|
|
||||||
|
# Recover the data
|
||||||
|
recovered_data = spec.recover_polynomial(cell_ids, known_cells)
|
||||||
|
|
||||||
|
# Check that the original data match the non-extended portion of the recovered data
|
||||||
|
assert original_polynomial == recovered_data[:len(recovered_data) // 2]
|
||||||
|
|
||||||
|
# Now flatten the cells and check that they match the entirety of the recovered data
|
||||||
|
flattened_cells = [x for xs in cells for x in xs]
|
||||||
|
assert flattened_cells == recovered_data
|
||||||
|
|
Loading…
Reference in New Issue