mirror of
https://github.com/0xPARC/plonkathon.git
synced 2026-01-10 14:18:06 -05:00
61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
import py_ecc.bn128 as b
|
||
from utils import *
|
||
from dataclasses import dataclass
|
||
from curve import *
|
||
from transcript import Transcript
|
||
from poly import Polynomial, Basis
|
||
|
||
|
||
@dataclass
|
||
class VerificationKey:
|
||
"""Verification key"""
|
||
|
||
group_order: int
|
||
# [q_M(x)]₁ (commitment to multiplication selector polynomial)
|
||
Qm: G1Point
|
||
# [q_L(x)]₁ (commitment to left selector polynomial)
|
||
Ql: G1Point
|
||
# [q_R(x)]₁ (commitment to right selector polynomial)
|
||
Qr: G1Point
|
||
# [q_O(x)]₁ (commitment to output selector polynomial)
|
||
Qo: G1Point
|
||
# [q_C(x)]₁ (commitment to constants selector polynomial)
|
||
Qc: G1Point
|
||
# [S_σ1(x)]₁ (commitment to the first permutation polynomial S_σ1(X))
|
||
S1: G1Point
|
||
# [S_σ2(x)]₁ (commitment to the second permutation polynomial S_σ2(X))
|
||
S2: G1Point
|
||
# [S_σ3(x)]₁ (commitment to the third permutation polynomial S_σ3(X))
|
||
S3: G1Point
|
||
# [x]₂ = xH, where H is a generator of G_2
|
||
X_2: G2Point
|
||
# nth root of unity, where n is the program's group order.
|
||
w: Scalar
|
||
|
||
# More optimized version that tries hard to minimize pairings and
|
||
# elliptic curve multiplications, but at the cost of being harder
|
||
# to understand and mixing together a lot of the computations to
|
||
# efficiently batch them.
|
||
def verify_proof(self, group_order: int, pf, public=[]) -> bool:
|
||
|
||
return False
|
||
|
||
# Basic, easier-to-understand version of what's going on.
|
||
# Feel free to use multiple pairings.
|
||
def verify_proof_unoptimized(self, group_order: int, pf, public=[]) -> bool:
|
||
|
||
return False
|
||
|
||
# Compute challenges (should be same as those computed by prover)
|
||
def compute_challenges(
|
||
self, proof
|
||
) -> tuple[Scalar, Scalar, Scalar, Scalar, Scalar, Scalar]:
|
||
transcript = Transcript(b"plonk")
|
||
beta, gamma = transcript.round_1(proof.msg_1)
|
||
alpha, _fft_cofactor = transcript.round_2(proof.msg_2)
|
||
zeta = transcript.round_3(proof.msg_3)
|
||
v = transcript.round_4(proof.msg_4)
|
||
u = transcript.round_5(proof.msg_5)
|
||
|
||
return beta, gamma, alpha, zeta, v, u
|