|
package plonk_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/consensys/gnark-crypto/ecc"
|
|
"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 {
|
|
ProofWithPis variables.ProofWithPublicInputs `gnark:",public"`
|
|
VerifierOnlyCircuitData variables.VerifierOnlyCircuitData `gnark:",public"`
|
|
CommonCircuitData types.CommonCircuitData
|
|
}
|
|
|
|
func (circuit *TestPlonkCircuit) Define(api frontend.API) error {
|
|
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, verifierOnlyCircuitData)
|
|
|
|
plonkChip := plonk.NewPlonkChip(
|
|
api,
|
|
commonCircuitData,
|
|
)
|
|
|
|
plonkChip.Verify(proofChallenges, proofWithPis.Proof.Openings, publicInputsHash)
|
|
return nil
|
|
}
|
|
|
|
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.ReadCommonCircuitData(commonCircuitDataFilename)
|
|
verifierOnlyCircuitData := variables.DeserializeVerifierOnlyCircuitData(types.ReadVerifierOnlyCircuitData(verifierOnlyCircuitDataFilename))
|
|
|
|
testCase := func() {
|
|
circuit := TestPlonkCircuit{
|
|
proofWithPis,
|
|
verifierOnlyCircuitData,
|
|
commonCircuitData,
|
|
}
|
|
witness := TestPlonkCircuit{
|
|
proofWithPis,
|
|
verifierOnlyCircuitData,
|
|
commonCircuitData,
|
|
}
|
|
err := test.IsSolved(&circuit, &witness, ecc.BN254.ScalarField())
|
|
assert.NoError(err)
|
|
}
|
|
|
|
testCase()
|
|
}
|