Prover: beta-v1.2 adds missing commits (#693)

* clean(naturalize): harmonize the implementation of the verifier

* update constraints version to rc3.1

* clean(corset): use the lisp to name the constraints

* fix(permutation): compile zcatalog in deterministic order

---------

Co-authored-by: gusiri <dreamerty@postech.ac.kr>
This commit is contained in:
AlexandreBelling
2025-02-17 13:13:43 +01:00
committed by GitHub
parent 7325f38c88
commit 1edc38b4e8
6 changed files with 42 additions and 35 deletions

View File

@@ -1 +1 @@
beta-v1.2/v0.1.0-rc3
beta-v1.2/v0.1.0-rc3.1

View File

@@ -7,7 +7,6 @@ import (
public_input "github.com/consensys/linea-monorepo/prover/public-input"
"github.com/consensys/gnark-crypto/ecc"
"github.com/consensys/gnark/backend/plonk"
"github.com/consensys/gnark/frontend"
"github.com/consensys/linea-monorepo/prover/circuits"
"github.com/consensys/linea-monorepo/prover/protocol/wizard"
@@ -104,6 +103,8 @@ func MakeProof(
proof, err := circuits.ProveCheck(
&setup,
&assignment,
emPlonk.GetNativeProverOptions(ecc.BW6_761.ScalarField(), setup.Circuit.Field()),
emPlonk.GetNativeVerifierOptions(ecc.BW6_761.ScalarField(), setup.Circuit.Field()),
)
if err != nil {
@@ -112,23 +113,6 @@ func MakeProof(
logrus.Infof("generated outer-circuit proof `%++v` for input `%v`", proof, assignment.PublicInput.(*big.Int).String())
// Sanity-check : the proof must pass
{
pubwitness, err := frontend.NewWitness(
&assignment,
ecc.BLS12_377.ScalarField(),
frontend.PublicOnly(),
)
if err != nil {
panic(err)
}
err = plonk.Verify(proof, setup.VerifyingKey, pubwitness, emPlonk.GetNativeVerifierOptions(ecc.BW6_761.ScalarField(), setup.Circuit.Field()))
if err != nil {
panic(err)
}
}
// Write the serialized proof
return circuits.SerializeProofRaw(proof)
}

View File

@@ -3,9 +3,10 @@ package circuits
import (
"bytes"
"fmt"
"github.com/consensys/gnark/backend/witness"
"os"
"github.com/consensys/gnark/backend/witness"
"github.com/consensys/gnark/backend"
"github.com/consensys/gnark/backend/plonk"
"github.com/consensys/gnark/constraint/solver"

View File

@@ -1,12 +1,15 @@
package permutation
import (
"slices"
"github.com/consensys/linea-monorepo/prover/protocol/coin"
"github.com/consensys/linea-monorepo/prover/protocol/ifaces"
"github.com/consensys/linea-monorepo/prover/protocol/query"
"github.com/consensys/linea-monorepo/prover/protocol/wizard"
"github.com/consensys/linea-monorepo/prover/protocol/wizardutils"
"github.com/consensys/linea-monorepo/prover/symbolic"
"golang.org/x/exp/maps"
)
// CompileGrandProduct scans `comp`, looking for [query.Permutation] queries and
@@ -40,9 +43,16 @@ func CompileGrandProduct(comp *wizard.CompiledIOP) {
dispatchPermutation(comp, zCatalog, round, permutation)
}
for entry, zC := range zCatalog {
zCEntriesOrdered, zCsOrdered := mapAsTupleDeterministic(zCatalog)
for i := range zCEntriesOrdered {
var (
zC = zCsOrdered[i]
round = zCEntriesOrdered[i][0]
)
zC.compile(comp)
round := entry[0]
allProverActions[round] = append(allProverActions[round], zC)
}
@@ -108,3 +118,22 @@ func dispatchPermutation(
}
}
}
func mapAsTupleDeterministic(m map[[2]int]*ZCtx) (keys [][2]int, values []*ZCtx) {
keys = maps.Keys(m)
values = make([]*ZCtx, len(keys))
slices.SortFunc(keys, func(a, b [2]int) int {
if a[0] != b[0] {
return a[0] - b[0]
}
return a[1] - b[1]
})
for i := range keys {
values[i] = m[keys[i]]
}
return keys, values
}

View File

@@ -348,25 +348,20 @@ func (ctx naturalizationCtx) Verify(run *wizard.VerifierRuntime) error {
func (ctx naturalizationCtx) GnarkVerify(api frontend.API, c *wizard.WizardVerifierCircuit) {
logrus.Tracef("verifying naturalization")
// Get the original query
originalQuery := c.GetUnivariateEval(ctx.q.QueryID)
originalQueryParams := c.GetUnivariateParams(ctx.q.QueryID)
// Collect the subqueries and the collection in finalYs evaluations
subQueries := []query.UnivariateEval{}
subQueriesParamsX := []frontend.Variable{}
subQueriesParamsYs := [][]frontend.Variable{}
subQueriesParams := []query.GnarkUnivariateEvalParams{}
finalYs := collection.NewMapping[string, frontend.Variable]()
for qID, qName := range ctx.subQueriesNames {
subQueries = append(subQueries, c.GetUnivariateEval(qName))
params := c.GetUnivariateParams(qName)
subQueriesParamsX = append(subQueriesParamsX, params.X)
subQueriesParamsYs = append(subQueriesParamsYs, params.Ys)
subQueriesParams = append(subQueriesParams, c.GetUnivariateParams(qName))
repr := ctx.deduplicatedReprs[qID]
for j, derivedY := range subQueriesParamsYs[qID] {
for j, derivedY := range subQueriesParams[qID].Ys {
finalYs.InsertNew(column.DerivedYRepr(repr, subQueries[qID].Pols[j]), derivedY)
}
}
@@ -402,8 +397,8 @@ func (ctx naturalizationCtx) GnarkVerify(api frontend.API, c *wizard.WizardVerif
}
recoveredX := recoveredXs[i]
qID := ctx.reprToSubQueryID[subrepr]
submittedX := subQueriesParamsX[qID]
// Or it is a mismatch between the evaluation queries and the derived query
submittedX := subQueriesParams[qID].X
api.AssertIsEqual(recoveredX, submittedX)
}
@@ -412,7 +407,5 @@ func (ctx naturalizationCtx) GnarkVerify(api frontend.API, c *wizard.WizardVerif
*/
recoveredY := column.GnarkVerifyYConsistency(api, originH, "", cachedXs, finalYs)
api.AssertIsEqual(recoveredY, originalQueryParams.Ys[originPolID])
logrus.Tracef("verifying naturalization DONE")
}
}

View File

@@ -93,7 +93,7 @@ func (s *schemaScanner) scanConstraints() {
corsetCSs := s.Schema.Constraints().Collect()
for _, corsetCS := range corsetCSs {
name := fmt.Sprintf("%v", corsetCS)
name := fmt.Sprintf("%v", corsetCS.Lisp(s.Schema).String(false))
if s.Comp.QueriesNoParams.Exists(ifaces.QueryID(name)) {
continue
}