mirror of
https://github.com/vacp2p/linea-monorepo.git
synced 2026-01-09 04:08:01 -05:00
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:
@@ -1 +1 @@
|
||||
beta-v1.2/v0.1.0-rc3
|
||||
beta-v1.2/v0.1.0-rc3.1
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user