Browse Source

added plonk test file

main
Kevin Jue 3 years ago
parent
commit
4262ff15fe
2 changed files with 82 additions and 15 deletions
  1. +18
    -15
      plonky2_verifier/plonk.go
  2. +64
    -0
      plonky2_verifier/plonk_test.go

+ 18
- 15
plonky2_verifier/plonk.go

@ -40,23 +40,26 @@ func (p *PlonkChip) evalL0(x QuadraticExtension, xPowN QuadraticExtension) Quadr
)
}
func (p *PlonkChip) checkPartialProductsCircuit(
func (p *PlonkChip) checkPartialProducts(
numerators []QuadraticExtension,
denominators []QuadraticExtension,
challengeNum uint64) []QuadraticExtension {
productAccs := make([]QuadraticExtension, p.commonData.NumPartialProducts+2)
numPartProds := p.commonData.NumPartialProducts
quotDegreeFactor := p.commonData.QuotientDegreeFactor
productAccs := make([]QuadraticExtension, numPartProds+2)
productAccs = append(productAccs, p.openings.PlonkZs[challengeNum])
productAccs = append(productAccs, p.openings.PartialProducts[challengeNum*p.commonData.NumPartialProducts:(challengeNum+1)*p.commonData.NumPartialProducts]...)
productAccs = append(productAccs, p.openings.PartialProducts[challengeNum*numPartProds:(challengeNum+1)*numPartProds]...)
productAccs = append(productAccs, p.openings.PlonkZsNext[challengeNum])
partialProductChecks := make([]QuadraticExtension, p)
partialProductChecks := make([]QuadraticExtension, numPartProds)
for i := uint64(0); i < numPartialProducts; i += 1 {
ppStartIdx := i * p.commonData.QuotientDegreeFactor
for i := uint64(0); i < numPartProds; i += 1 {
ppStartIdx := i * quotDegreeFactor
numeProduct := numerators[ppStartIdx]
denoProduct := denominators[ppStartIdx]
for j := uint64(1); j < p.commonData.QuotientDegreeFactor; j++ {
for j := uint64(1); j < quotDegreeFactor; j++ {
numeProduct = p.qe.MulExtension(numeProduct, numerators[ppStartIdx+j])
denoProduct = p.qe.MulExtension(denoProduct, denominators[ppStartIdx+j])
}
@ -87,6 +90,7 @@ func (p *PlonkChip) evalVanishingPoly() []QuadraticExtension {
l_0_zeta := p.evalL0(p.proofChallenges.PlonkZeta, zeta_pow_n)
vanishing_z1_terms := make([]QuadraticExtension, p.commonData.Config.NumChallenges)
vanishing_partial_products_terms := make([]QuadraticExtension, p.commonData.Config.NumChallenges*p.commonData.NumPartialProducts)
numerator_values := make([]QuadraticExtension, p.commonData.Config.NumChallenges*p.commonData.Config.NumRoutedWires)
denominator_values := make([]QuadraticExtension, p.commonData.Config.NumChallenges*p.commonData.Config.NumRoutedWires)
for i := uint64(0); i < p.commonData.Config.NumChallenges; i++ {
@ -120,17 +124,16 @@ func (p *PlonkChip) evalVanishingPoly() []QuadraticExtension {
numerator_values = append(numerator_values, numerator)
denominator_values = append(denominator_values, denominator)
}
vanishing_partial_products_terms = append(
vanishing_partial_products_terms,
p.checkPartialProducts(numerator_values, denominator_values, i)...,
)
}
return vanishing_partial_products_terms
}
func (p *PlonkChip) Verify() {
zeta_pow_deg := p.expPowerOf2Extension(p.proofChallenges.PlonkZeta)
p.evalVanishingPoly(p.proofChallenges.PlonkZeta, zeta_pow_deg)
vanishingZTerms := make(F, commonData.Config.NumChallenges)
for i := 0; i < int(commonData.Config.NumChallenges); i++ {
}
p.evalVanishingPoly()
}

+ 64
- 0
plonky2_verifier/plonk_test.go

@ -0,0 +1,64 @@
package plonky2_verifier
import (
. "gnark-ed25519/field"
"testing"
"github.com/consensys/gnark/frontend"
"github.com/consensys/gnark/test"
)
type TestPlonkCircuit struct{}
func (circuit *TestPlonkCircuit) Define(api frontend.API) error {
proofWithPis := DeserializeProofWithPublicInputs("./data/fibonacci/proof_with_public_inputs.json")
commonCircuitData := DeserializeCommonCircuitData("./data/fibonacci/common_circuit_data.json")
field := NewFieldAPI(api)
qe := NewQuadraticExtensionAPI(field, commonCircuitData.DegreeBits)
// Challenge associated with the data from "/.data/fibonacci/*"
proofChallenges := ProofChallenges{
PlonkBetas: []F{
NewFieldElementFromString("4678728155650926271"),
NewFieldElementFromString("13611962404289024887"),
},
PlonkGammas: []F{
NewFieldElementFromString("13237663823305715949"),
NewFieldElementFromString("15389314098328235145"),
},
PlonkAlphas: []F{
NewFieldElementFromString("14505919539124304197"),
NewFieldElementFromString("1695455639263736117"),
},
PlonkZeta: QuadraticExtension{
NewFieldElementFromString("14887793628029982930"),
NewFieldElementFromString("1136137158284059037"),
},
}
plonkChip := PlonkChip{
api: api,
field: field,
qe: qe,
commonData: commonCircuitData,
proofChallenges: proofChallenges,
openings: proofWithPis.Proof.Openings,
}
plonkChip.Verify()
return nil
}
func TestPlonkWitness(t *testing.T) {
assert := test.NewAssert(t)
testCase := func() {
circuit := TestPlonkCircuit{}
witness := TestPlonkCircuit{}
err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
assert.NoError(err)
}
testCase()
}

Loading…
Cancel
Save