In the previous part, we described how to make a polynomial that someone wants to prove into a table, using PLONKish arithmetization. After that, we will explain how the zk-SNARK protocol works. One needs a lookup table or permutation argument, but I will postpone it.
Circuit commitment
Suppose the prover makes a table with advice(private), instance(public), and fixed(constant, selector) columns. As explained in Part I, let
After commitment, the verifier makes a random challenge
be a quotient polynomial. Since we committed
Vanishing argument
Next, the verifier wants to check the prover has proper polynomials
then the prover need to send
and whether the evaluations work well with previous commitments. To do this for several evaluations efficiently, halo2 uses the multipoint opening argument. I will talk about this after explaining how the polynomial commitment works.
To commit and open the polynomials, the original halo2 from ZCash uses the inner product argument. This is a modified version of [BCCGC16] I posted here. After that, PSE uses the KZG commitment scheme instead. I will explain two different versions of halo2 in the next series of posts.
댓글
댓글 쓰기