All tests pass

This commit is contained in:
Uma Roy
2023-10-11 14:53:34 -07:00
parent b173b28649
commit 3aef7954ed
32 changed files with 839 additions and 946 deletions

View File

@@ -11,7 +11,7 @@ import (
gl "github.com/succinctlabs/gnark-plonky2-verifier/goldilocks"
"github.com/succinctlabs/gnark-plonky2-verifier/plonk/gates"
"github.com/succinctlabs/gnark-plonky2-verifier/poseidon"
"github.com/succinctlabs/gnark-plonky2-verifier/verifier"
"github.com/succinctlabs/gnark-plonky2-verifier/types"
)
// From recursive_step circuit
@@ -690,7 +690,7 @@ type TestGateCircuit struct {
}
func (circuit *TestGateCircuit) Define(api frontend.API) error {
commonCircuitData := verifier.DeserializeCommonCircuitData("../../data/decode_block/common_circuit_data.json")
commonCircuitData := types.DeserializeCommonCircuitData("../../testdata/decode_block/common_circuit_data.json")
numSelectors := commonCircuitData.SelectorsInfo.NumSelectors()
glApi := gl.New(api)

View File

@@ -5,27 +5,37 @@ import (
gl "github.com/succinctlabs/gnark-plonky2-verifier/goldilocks"
"github.com/succinctlabs/gnark-plonky2-verifier/plonk/gates"
"github.com/succinctlabs/gnark-plonky2-verifier/poseidon"
"github.com/succinctlabs/gnark-plonky2-verifier/types"
"github.com/succinctlabs/gnark-plonky2-verifier/variables"
)
type PlonkChip struct {
api frontend.API `gnark:"-"`
commonData variables.CommonCircuitData `gnark:"-"`
commonData types.CommonCircuitData `gnark:"-"`
// These are global constant variables that we use in this Chip that we save here.
// This avoids having to recreate them every time we use them.
DEGREE gl.Variable `gnark:"-"`
DEGREE_BITS_F gl.Variable `gnark:"-"`
DEGREE_QE gl.QuadraticExtensionVariable `gnark:"-"`
commonDataKIs []gl.Variable `gnark:"-"`
evaluateGatesChip *gates.EvaluateGatesChip
}
func NewPlonkChip(api frontend.API, commonData variables.CommonCircuitData) *PlonkChip {
func NewPlonkChip(api frontend.API, commonData types.CommonCircuitData) *PlonkChip {
// TODO: Should degreeBits be verified that it fits within the field and that degree is within uint64?
// Create the gates based on commonData GateIds
createdGates := []gates.Gate{}
for _, gateId := range commonData.GateIds {
createdGates = append(createdGates, gates.GateInstanceFromId(gateId))
}
evaluateGatesChip := gates.NewEvaluateGatesChip(
api,
commonData.Gates,
createdGates,
commonData.NumGateConstraints,
commonData.SelectorsInfo,
)
@@ -38,6 +48,7 @@ func NewPlonkChip(api frontend.API, commonData variables.CommonCircuitData) *Plo
DEGREE: gl.NewVariable(1 << commonData.DegreeBits),
DEGREE_BITS_F: gl.NewVariable(commonData.DegreeBits),
DEGREE_QE: gl.NewVariable(1 << commonData.DegreeBits).ToQuadraticExtension(),
commonDataKIs: gl.Uint64ArrayToVariableArray(commonData.KIs),
evaluateGatesChip: evaluateGatesChip,
}
@@ -117,7 +128,7 @@ func (p *PlonkChip) evalVanishingPoly(
sIDs := make([]gl.QuadraticExtensionVariable, p.commonData.Config.NumRoutedWires)
for i := uint64(0); i < p.commonData.Config.NumRoutedWires; i++ {
sIDs[i] = glApi.ScalarMulExtension(proofChallenges.PlonkZeta, p.commonData.KIs[i])
sIDs[i] = glApi.ScalarMulExtension(proofChallenges.PlonkZeta, p.commonDataKIs[i])
}
// Calculate L_0(zeta)

View File

@@ -7,23 +7,25 @@ import (
"github.com/consensys/gnark/frontend"
"github.com/consensys/gnark/test"
"github.com/succinctlabs/gnark-plonky2-verifier/plonk"
"github.com/succinctlabs/gnark-plonky2-verifier/types"
"github.com/succinctlabs/gnark-plonky2-verifier/variables"
"github.com/succinctlabs/gnark-plonky2-verifier/verifier"
)
type TestPlonkCircuit struct {
proofWithPIsFilename string `gnark:"-"`
commonCircuitDataFilename string `gnark:"-"`
verifierOnlyCircuitDataFilename string `gnark:"-"`
ProofWithPis variables.ProofWithPublicInputs `gnark:",public"`
VerifierOnlyCircuitData variables.VerifierOnlyCircuitData `gnark:",public"`
CommonCircuitData types.CommonCircuitData
}
func (circuit *TestPlonkCircuit) Define(api frontend.API) error {
proofWithPis := verifier.DeserializeProofWithPublicInputs(circuit.proofWithPIsFilename)
commonCircuitData := verifier.DeserializeCommonCircuitData(circuit.commonCircuitDataFilename)
verifierOnlyCircuitData := verifier.DeserializeVerifierOnlyCircuitData(circuit.verifierOnlyCircuitDataFilename)
commonCircuitData := circuit.CommonCircuitData
verifierOnlyCircuitData := circuit.VerifierOnlyCircuitData
proofWithPis := circuit.ProofWithPis
verifierChip := verifier.NewVerifierChip(api, commonCircuitData)
publicInputsHash := verifierChip.GetPublicInputsHash(proofWithPis.PublicInputs)
proofChallenges := verifierChip.GetChallenges(proofWithPis.Proof, publicInputsHash, commonCircuitData, verifierOnlyCircuitData)
proofChallenges := verifierChip.GetChallenges(proofWithPis.Proof, publicInputsHash, verifierOnlyCircuitData)
plonkChip := plonk.NewPlonkChip(
api,
@@ -37,13 +39,25 @@ func (circuit *TestPlonkCircuit) Define(api frontend.API) error {
func TestPlonkDecodeBlock(t *testing.T) {
assert := test.NewAssert(t)
proofWithPIsFilename := "../testdata/decode_block/proof_with_public_inputs.json"
commonCircuitDataFilename := "../testdata/decode_block/common_circuit_data.json"
verifierOnlyCircuitDataFilename := "../testdata/decode_block/verifier_only_circuit_data.json"
proofWithPis := variables.DeserializeProofWithPublicInputs(types.ReadProofWithPublicInputs(proofWithPIsFilename))
commonCircuitData := types.DeserializeCommonCircuitData(commonCircuitDataFilename)
verifierOnlyCircuitData := variables.DeserializeVerifierOnlyCircuitData(types.ReadVerifierOnlyCircuitData(verifierOnlyCircuitDataFilename))
testCase := func() {
circuit := TestPlonkCircuit{
proofWithPIsFilename: "../../data/decode_block/proof_with_public_inputs.json",
commonCircuitDataFilename: "../../data/decode_block/common_circuit_data.json",
verifierOnlyCircuitDataFilename: "../../data/decode_block/verifier_only_circuit_data.json",
proofWithPis,
verifierOnlyCircuitData,
commonCircuitData,
}
witness := TestPlonkCircuit{
proofWithPis,
verifierOnlyCircuitData,
commonCircuitData,
}
witness := TestPlonkCircuit{}
err := test.IsSolved(&circuit, &witness, ecc.BN254.ScalarField())
assert.NoError(err)
}