mirror of
https://github.com/vacp2p/linea-monorepo.git
synced 2026-01-09 15:38:06 -05:00
Prover: GKR without option (#3831)
* feat(gkrmimr): bump gnark to a version that does not need to override the hints * chores(gnark): point to the master branch for gnark's dependency
This commit is contained in:
@@ -58,7 +58,7 @@ func TestHashGnarkAny(t *testing.T) {
|
||||
t.Fatalf("could not get the witness: %v", err)
|
||||
}
|
||||
|
||||
err = ccs.IsSolved(wit, gkrmimc.SolverOpts(ccs)...)
|
||||
err = ccs.IsSolved(wit)
|
||||
if err != nil {
|
||||
t.Fatalf("circuit not solved: %v", err.Error())
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@ package v1_test
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/hex"
|
||||
"testing"
|
||||
|
||||
"github.com/consensys/gnark-crypto/ecc"
|
||||
fr381 "github.com/consensys/gnark-crypto/ecc/bls12-381/fr"
|
||||
"github.com/consensys/gnark/frontend"
|
||||
@@ -13,12 +15,10 @@ import (
|
||||
"github.com/consensys/zkevm-monorepo/prover/backend/blobsubmission"
|
||||
"github.com/consensys/zkevm-monorepo/prover/circuits/blobdecompression"
|
||||
v1 "github.com/consensys/zkevm-monorepo/prover/circuits/blobdecompression/v1"
|
||||
"github.com/consensys/zkevm-monorepo/prover/crypto/mimc/gkrmimc"
|
||||
blobcompressorv1 "github.com/consensys/zkevm-monorepo/prover/lib/compressor/blob/v1"
|
||||
blobtestutils "github.com/consensys/zkevm-monorepo/prover/lib/compressor/blob/v1/test_utils"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func prepareTestBlob(t require.TestingT) (c, a frontend.Circuit) {
|
||||
@@ -88,5 +88,5 @@ func TestSingleBlockBlobNoEngine(t *testing.T) {
|
||||
w, err := frontend.NewWitness(a, ecc.BLS12_377.ScalarField())
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.NoError(t, cs.IsSolved(w, gkrmimc.SolverOpts(cs)...))
|
||||
assert.NoError(t, cs.IsSolved(w))
|
||||
}
|
||||
|
||||
@@ -4,11 +4,9 @@ import (
|
||||
"math/big"
|
||||
|
||||
"github.com/consensys/gnark-crypto/ecc"
|
||||
"github.com/consensys/gnark/backend"
|
||||
"github.com/consensys/gnark/backend/plonk"
|
||||
"github.com/consensys/gnark/frontend"
|
||||
"github.com/consensys/zkevm-monorepo/prover/circuits"
|
||||
"github.com/consensys/zkevm-monorepo/prover/crypto/mimc/gkrmimc"
|
||||
"github.com/consensys/zkevm-monorepo/prover/protocol/wizard"
|
||||
"github.com/consensys/zkevm-monorepo/prover/zkevm"
|
||||
"github.com/consensys/zkevm-monorepo/prover/zkevm/prover/publicInput"
|
||||
@@ -103,7 +101,6 @@ func MakeProof(
|
||||
setup.Circuit,
|
||||
setup.ProvingKey,
|
||||
witness,
|
||||
backend.WithSolverOptions(gkrmimc.SolverOpts(setup.Circuit)...),
|
||||
emPlonk.GetNativeProverOptions(ecc.BW6_761.ScalarField(), setup.Circuit.Field()),
|
||||
)
|
||||
if err != nil {
|
||||
|
||||
@@ -2,8 +2,9 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/consensys/gnark-crypto/ecc"
|
||||
"github.com/consensys/gnark/backend"
|
||||
"github.com/consensys/gnark/backend/plonk"
|
||||
"github.com/consensys/gnark/frontend"
|
||||
"github.com/consensys/gnark/frontend/cs/scs"
|
||||
@@ -12,8 +13,6 @@ import (
|
||||
pi_interconnection "github.com/consensys/zkevm-monorepo/prover/circuits/pi-interconnection"
|
||||
pitesting "github.com/consensys/zkevm-monorepo/prover/circuits/pi-interconnection/test_utils"
|
||||
"github.com/consensys/zkevm-monorepo/prover/config"
|
||||
"github.com/consensys/zkevm-monorepo/prover/crypto/mimc/gkrmimc"
|
||||
"time"
|
||||
|
||||
//"github.com/consensys/zkevm-monorepo/prover/circuits/pi-interconnection/test_utils"
|
||||
"github.com/consensys/zkevm-monorepo/prover/protocol/compiler/dummy"
|
||||
@@ -52,7 +51,7 @@ func main() {
|
||||
|
||||
w, err := frontend.NewWitness(&a, ecc.BLS12_377.ScalarField())
|
||||
assert.NoError(b, err)
|
||||
_, err = plonk.Prove(cs, pk, w, backend.WithSolverOptions(gkrmimc.SolverOpts(cs)...))
|
||||
_, err = plonk.Prove(cs, pk, w)
|
||||
assert.NoError(b, err)
|
||||
|
||||
fmt.Println(time.Now().Unix()-secondsStart, "seconds")
|
||||
|
||||
@@ -18,7 +18,6 @@ import (
|
||||
pi_interconnection "github.com/consensys/zkevm-monorepo/prover/circuits/pi-interconnection"
|
||||
pitesting "github.com/consensys/zkevm-monorepo/prover/circuits/pi-interconnection/test_utils"
|
||||
"github.com/consensys/zkevm-monorepo/prover/config"
|
||||
"github.com/consensys/zkevm-monorepo/prover/crypto/mimc/gkrmimc"
|
||||
blobtesting "github.com/consensys/zkevm-monorepo/prover/lib/compressor/blob/v1/test_utils"
|
||||
"github.com/consensys/zkevm-monorepo/prover/protocol/compiler/dummy"
|
||||
public_input "github.com/consensys/zkevm-monorepo/prover/public-input"
|
||||
@@ -63,7 +62,7 @@ func TestSingleBlobBlobE2E(t *testing.T) {
|
||||
w, err := frontend.NewWitness(&a, ecc.BLS12_377.ScalarField())
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.NoError(t, cs.IsSolved(w, gkrmimc.SolverOpts(cs)...))
|
||||
assert.NoError(t, cs.IsSolved(w))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package keccak
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/consensys/gnark-crypto/ecc"
|
||||
"github.com/consensys/gnark/frontend"
|
||||
"github.com/consensys/gnark/test"
|
||||
@@ -8,7 +10,6 @@ import (
|
||||
"github.com/consensys/zkevm-monorepo/prover/protocol/compiler/dummy"
|
||||
"github.com/consensys/zkevm-monorepo/prover/utils"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestAssign(t *testing.T) {
|
||||
|
||||
@@ -52,7 +52,7 @@ func TestFactory(t *testing.T) {
|
||||
witness, err := frontend.NewWitness(&assignment, ecc.BLS12_377.ScalarField())
|
||||
require.NoError(t, err)
|
||||
|
||||
err = scs.IsSolved(witness, SolverOpts(scs)...)
|
||||
err = scs.IsSolved(witness)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ func TestFactoryWithPadding(t *testing.T) {
|
||||
witness, err := frontend.NewWitness(&assignment, ecc.BLS12_377.ScalarField())
|
||||
require.NoError(t, err)
|
||||
|
||||
err = scs.IsSolved(witness, SolverOpts(scs)...)
|
||||
err = scs.IsSolved(witness)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ func TestFactoryManySizes(t *testing.T) {
|
||||
witness, err := frontend.NewWitness(&assignment, ecc.BLS12_377.ScalarField())
|
||||
require.NoError(t, err)
|
||||
|
||||
err = scs.IsSolved(witness, SolverOpts(scs)...)
|
||||
err = scs.IsSolved(witness)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
cGkr "github.com/consensys/gnark-crypto/ecc/bls12-377/fr/gkr"
|
||||
"github.com/consensys/gnark/constraint"
|
||||
cs "github.com/consensys/gnark/constraint/bls12-377"
|
||||
"github.com/consensys/gnark/constraint/solver"
|
||||
"github.com/consensys/gnark/frontend"
|
||||
gGkr "github.com/consensys/gnark/std/gkr"
|
||||
"github.com/consensys/gnark/std/hash"
|
||||
@@ -36,6 +37,7 @@ func init() {
|
||||
|
||||
// Registers the hasher to be used in the GKR prover
|
||||
cs.RegisterHashBuilder("mimc", mimc.NewMiMC)
|
||||
solver.RegisterHint(mimcHintfunc)
|
||||
}
|
||||
|
||||
// writePaddedHex appends the integer `n` (assumedly less than 1<<(4*nbDigits))
|
||||
|
||||
@@ -3,16 +3,11 @@ package gkrmimc
|
||||
import (
|
||||
"math/big"
|
||||
|
||||
"github.com/consensys/gnark/constraint"
|
||||
cs "github.com/consensys/gnark/constraint/bls12-377"
|
||||
"github.com/consensys/gnark/constraint/solver"
|
||||
"github.com/consensys/gnark/frontend"
|
||||
"github.com/consensys/gnark/std/gkr"
|
||||
"github.com/consensys/gnark/std/hash"
|
||||
"github.com/consensys/zkevm-monorepo/prover/crypto/mimc"
|
||||
"github.com/consensys/zkevm-monorepo/prover/maths/field"
|
||||
"github.com/consensys/zkevm-monorepo/prover/utils"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var cache []*HasherFactory
|
||||
@@ -217,39 +212,3 @@ func (f *HasherFactory) padToPow2() int {
|
||||
|
||||
return targetSize
|
||||
}
|
||||
|
||||
// SolverOpts returns the list of the [solver.Option] required to prove the
|
||||
// satisfiability of a circuit using the MiMC GKR circuit (and thus the
|
||||
// [HasherFactory]). It registers all the hints that are necessary to solve
|
||||
// the circuit.
|
||||
//
|
||||
// The result of this function has to be passed to the plonk.Prove function.
|
||||
func SolverOpts(scs constraint.ConstraintSystem) []solver.Option {
|
||||
|
||||
// Attempts to parse it as a ccs
|
||||
spr, ok := scs.(*cs.SparseR1CS)
|
||||
if !ok {
|
||||
panic("not a sparse r1cs")
|
||||
}
|
||||
|
||||
// not a circuit using GKR
|
||||
if !spr.GkrInfo.Is() {
|
||||
logrus.Warn("Not a circuit using gkr, this can happen if nothing is actually hashed")
|
||||
}
|
||||
|
||||
var gkrData cs.GkrSolvingData
|
||||
opts := []solver.Option{
|
||||
solver.WithHints(
|
||||
mimcHintfunc,
|
||||
gkr.SolveHintPlaceholder,
|
||||
gkr.ProveHintPlaceholder,
|
||||
),
|
||||
}
|
||||
|
||||
opts = append(opts,
|
||||
solver.OverrideHint(spr.GkrInfo.SolveHintID, cs.GkrSolveHint(spr.GkrInfo, &gkrData)),
|
||||
solver.OverrideHint(spr.GkrInfo.ProveHintID, cs.GkrProveHint(spr.GkrInfo.HashName, &gkrData)),
|
||||
)
|
||||
|
||||
return opts
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"github.com/consensys/gnark-crypto/ecc"
|
||||
"github.com/consensys/gnark/frontend"
|
||||
"github.com/consensys/gnark/frontend/cs/scs"
|
||||
"github.com/consensys/zkevm-monorepo/prover/crypto/mimc/gkrmimc"
|
||||
"github.com/consensys/zkevm-monorepo/prover/protocol/coin"
|
||||
"github.com/consensys/zkevm-monorepo/prover/protocol/compiler/dummy"
|
||||
"github.com/consensys/zkevm-monorepo/prover/protocol/compiler/globalcs"
|
||||
@@ -184,7 +183,7 @@ func checkSolved(
|
||||
witness, err := frontend.NewWitness(assignment, ecc.BLS12_377.ScalarField())
|
||||
require.NoError(t, err)
|
||||
|
||||
err = scs.IsSolved(witness, gkrmimc.SolverOpts(scs)...)
|
||||
err = scs.IsSolved(witness)
|
||||
|
||||
if err != nil {
|
||||
// When the error string is too large `require.NoError` does not print
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"github.com/consensys/gnark-crypto/ecc"
|
||||
"github.com/consensys/gnark/frontend"
|
||||
"github.com/consensys/gnark/frontend/cs/scs"
|
||||
"github.com/consensys/zkevm-monorepo/prover/crypto/mimc/gkrmimc"
|
||||
"github.com/consensys/zkevm-monorepo/prover/maths/common/smartvectors"
|
||||
"github.com/consensys/zkevm-monorepo/prover/maths/field"
|
||||
"github.com/consensys/zkevm-monorepo/prover/protocol/column"
|
||||
@@ -49,7 +48,7 @@ func TestGnarkCompile(t *testing.T) {
|
||||
witness, err := frontend.NewWitness(assignment, ecc.BLS12_377.ScalarField())
|
||||
require.NoError(t, err)
|
||||
|
||||
err = scs.IsSolved(witness, gkrmimc.SolverOpts(scs)...)
|
||||
err = scs.IsSolved(witness)
|
||||
if err != nil {
|
||||
// When the error string is too large `require.NoError` does not print
|
||||
// the error.
|
||||
|
||||
@@ -7,8 +7,8 @@ toolchain go1.22.5
|
||||
require (
|
||||
github.com/consensys/bavard v0.1.13
|
||||
github.com/consensys/compress v0.2.5
|
||||
github.com/consensys/gnark v0.10.1-0.20240731142023-d8ccab5994e0
|
||||
github.com/consensys/gnark-crypto v0.13.0
|
||||
github.com/consensys/gnark v0.10.1-0.20240820204737-841a46e699de
|
||||
github.com/consensys/gnark-crypto v0.13.1-0.20240802214859-ff4c0ddbe1ef
|
||||
github.com/crate-crypto/go-kzg-4844 v1.1.0
|
||||
github.com/dlclark/regexp2 v1.11.2
|
||||
github.com/go-playground/validator/v10 v10.22.0
|
||||
|
||||
@@ -96,10 +96,10 @@ github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/Yj
|
||||
github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
|
||||
github.com/consensys/compress v0.2.5 h1:gJr1hKzbOD36JFsF1AN8lfXz1yevnJi1YolffY19Ntk=
|
||||
github.com/consensys/compress v0.2.5/go.mod h1:pyM+ZXiNUh7/0+AUjUf9RKUM6vSH7T/fsn5LLS0j1Tk=
|
||||
github.com/consensys/gnark v0.10.1-0.20240731142023-d8ccab5994e0 h1:+Afd4fRFvF67A9kf+TurbJ/638xkkQG1r0ymO8wADZY=
|
||||
github.com/consensys/gnark v0.10.1-0.20240731142023-d8ccab5994e0/go.mod h1:S+QS+G9ZclYU8cukF+fi8+CoWIXy/HUcmcIkc8gj4Q8=
|
||||
github.com/consensys/gnark-crypto v0.13.0 h1:VPULb/v6bbYELAPTDFINEVaMTTybV5GLxDdcjnS+4oc=
|
||||
github.com/consensys/gnark-crypto v0.13.0/go.mod h1:wKqwsieaKPThcFkHe0d0zMsbHEUWFmZcG7KBCse210o=
|
||||
github.com/consensys/gnark v0.10.1-0.20240820204737-841a46e699de h1:DXiYLidaVuK/pRCQ1SDT2wNFfibvmhvr8TTfbp+kXIc=
|
||||
github.com/consensys/gnark v0.10.1-0.20240820204737-841a46e699de/go.mod h1:6OZlCYQMepjrtkNwbW/gMc7UQZNcAfNrsj1/1iZ8d5U=
|
||||
github.com/consensys/gnark-crypto v0.13.1-0.20240802214859-ff4c0ddbe1ef h1:4DaS1IYXk0vKcCdguGjkHVyN43YqmKUmpYDxb90VBnU=
|
||||
github.com/consensys/gnark-crypto v0.13.1-0.20240802214859-ff4c0ddbe1ef/go.mod h1:wKqwsieaKPThcFkHe0d0zMsbHEUWFmZcG7KBCse210o=
|
||||
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"github.com/consensys/gnark-crypto/ecc"
|
||||
"github.com/consensys/gnark/frontend"
|
||||
"github.com/consensys/gnark/frontend/cs/scs"
|
||||
"github.com/consensys/zkevm-monorepo/prover/crypto/mimc/gkrmimc"
|
||||
"github.com/consensys/zkevm-monorepo/prover/maths/common/smartvectors"
|
||||
"github.com/consensys/zkevm-monorepo/prover/maths/field"
|
||||
"github.com/consensys/zkevm-monorepo/prover/protocol/coin"
|
||||
@@ -154,7 +153,7 @@ func TestVortexGnarkVerifier(t *testing.T) {
|
||||
witness, err := frontend.NewWitness(assignment, ecc.BLS12_377.ScalarField())
|
||||
require.NoError(t, err)
|
||||
|
||||
err = scs.IsSolved(witness, gkrmimc.SolverOpts(scs)...)
|
||||
err = scs.IsSolved(witness)
|
||||
|
||||
if err != nil {
|
||||
// When the error string is too large `require.NoError` does not print
|
||||
|
||||
Reference in New Issue
Block a user