# Brakedown and Shockwave

$$ \gdef\setn#1{\mathcal{#1}} \gdef\mat#1{\mathrm{#1}} \gdef\vec#1{\mathbf{#1}} \gdef\enc{\mathsf{enc}} \gdef\p#1{\left({#1}\right)} $$

From GLS⁺21. Like in Hyrax, we will create a commitment to a matrix $\mat M ∈ 𝔽^{n×m}$ such that we can later compute double contractions $$ s = \vec p ⋅ \mat M ⋅ \vec q = \sum_{ij} \mat M_{ij}⋅p_i⋅q_j $$ for some arbitrary vectors $\vec p, \vec q$.

Take a linear code $\enc: 𝔽^m→𝔽^M$ with rate $ρ = m/M$. When instantiated with a linear-time encoding codes, it is known as Brakedown Polynomial Commitments. When instantiated with Reed-Solomon codes, it is known as Ligero Polynomial Commitments AHIV17. (And when used to instantiate Spartan they are known as Brakedown and Shockwave respectively.)

### Commitment

Prover has $\mat M ∈ 𝔽^{n×m}$.

**Prover**sends the column-wise Merkle-hash of $\mat E = [\enc(\mat M_i)]_{i∈[n]}$.

### Evaluation

In addtion to above, prover and verifier have $\vec p ∈ 𝔽^n$, $\vec q ∈ 𝔽^m$ and want to compute the double contraction $s = \vec p ⋅ \mat M ⋅ \vec q$. The protocol is as above, with $\vec r$ substituted by $\vec p$:

**Verifier**sends random $\mat R ∈ 𝔽^{k×n}$.**Prover**sends $\mat U = [\vec p; \mat R]⋅ \mat M$.**Verfier**computes $\mat C = [\enc(\mat U_i)]_{i∈[k]}$.**Verifier**sends $\setn C ⊂ [m]$.**Prover**decommits columns $\mat E_{\setn C}$.**Verifier**checks $\mat C_{\setn C} = [\vec p; \mat R] ⋅ \mat E_{\setn C}$.**Verifier**checks $s = \mat U_0 ⋅ \vec q$

### Parameter Choices for Reed-Solomon Codes

Given security target $λ$ in bits. Assuming the matrix dimensions and encoding rate are fixed, the main protocol parameters are the number of random combinations $k$ and queries $|\setn C|$. Following GLS⁺21 theorem B.7 (see also reference implementation 1 2), these are set to:

$$ \begin{aligned} k = 1 + \left\lfloor \frac{λ - 1}{\log_2 |𝔽| - \log_2 M} \right\rfloor && |\setn C| = \left\lceil \frac{λ}{1 - \log_2 (1 + \frac{m}{M})} \right\rceil \end{aligned} $$

For $λ = 128$ and large field $|𝔽| ≥ 2^{200}$ with reasonably sized $M < 2^{64}$ we will always have $k = 1$. The number of queries $|\setn C|$ decays exponentially from about $2.5 ⋅ λ$ for $M = 2⋅m$ down to $λ$ as $M$ increases.

The randomized checks created by $k$ serve to verify that the commitment is constructed correctly. This only has to be done once, so for repeated evaluations or when the commitment is trusted we can set $k=0$ (see GLS⁺21 p. 12).

**Question.** Does the process of grinding as used in FRI help to boost soundness and reduce $|\setn C|$?

## References

- AHIV17 Scott Ames, Carmit Hazay, Yuval Ishai & Muthuramakrishnan Venkitasubramaniam (2017). Ligero: Lightweight Sublinear Arguments Without a Trusted Setup.
- BCG20 Jonathan Bootle, Alessandro Chiesa, and Jens Groth (2020). Linear-Time Arguments with Sublinear Verification from Tensor Codes
- GLS⁺21 Alexander Golovnev, Jonathan Lee, Srinath Setty, Justin Thaler, Riad S. Wahby (2021). Brakedown: Linear-time and field-agnostic SNARKs for R1CS.