Skip to content

Commit

Permalink
Merge pull request #3695 from kevaundray/kw/fix-kzg-multi-comment
Browse files Browse the repository at this point in the history
chore: Fixes and elaborates on comments for `compute_kzg_proof_multi`
  • Loading branch information
hwwhww committed Apr 19, 2024
2 parents 0b312ca + 8e3500b commit 9c04cf1
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions specs/_features/eip7594/polynomial-commitments-sampling.md
Original file line number Diff line number Diff line change
Expand Up @@ -308,18 +308,26 @@ def compute_kzg_proof_multi_impl(
polynomial_coeff: PolynomialCoeff,
zs: Sequence[BLSFieldElement]) -> Tuple[KZGProof, Sequence[BLSFieldElement]]:
"""
Helper function that computes multi-evaluation KZG proofs.
Compute a KZG multi-evaluation proof for a set of `k` points.
This is done by committing to the following quotient polynomial:
Q(X) = f(X) - r(X) / Z(X)
Where:
- r(X) is the degree `k-1` polynomial that agrees with f(x) at all `k` points
- Z(X) is the degree `k` polynomial that evaluates to zero on all `k` points
"""

# For all x_i, compute p(x_i) - p(z)
# For all points, compute the evaluation of those points
ys = [evaluate_polynomialcoeff(polynomial_coeff, z) for z in zs]
# Compute r(X)
interpolation_polynomial = interpolate_polynomialcoeff(zs, ys)
# Compute f(X) - r(X)
polynomial_shifted = add_polynomialcoeff(polynomial_coeff, neg_polynomialcoeff(interpolation_polynomial))

# For all x_i, compute (x_i - z)
# Compute Z(X)
denominator_poly = vanishing_polynomialcoeff(zs)

# Compute the quotient polynomial directly in evaluation form
# Compute the quotient polynomial directly in monomial form
quotient_polynomial = divide_polynomialcoeff(polynomial_shifted, denominator_poly)

return KZGProof(g1_lincomb(KZG_SETUP_G1_MONOMIAL[:len(quotient_polynomial)], quotient_polynomial)), ys
Expand Down

0 comments on commit 9c04cf1

Please sign in to comment.