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:
AlexandreBelling
2024-08-21 18:02:47 +02:00
committed by GitHub
parent 950185ec90
commit cffb0318b6
14 changed files with 24 additions and 70 deletions

View File

@@ -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())
}

View File

@@ -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))
}

View File

@@ -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 {

View File

@@ -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")

View File

@@ -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))
})
}
}

View File

@@ -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) {

View File

@@ -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)
})
}

View File

@@ -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))

View File

@@ -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
}

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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=

View File

@@ -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