mirror of
https://github.com/arnaucube/gnark-plonky2-verifier.git
synced 2026-01-12 00:51:33 +01:00
All tests pass
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user