diff --git a/gnark-wrapper/circuit.go b/gnark-wrapper/circuit.go index 084e253..760c6f3 100644 --- a/gnark-wrapper/circuit.go +++ b/gnark-wrapper/circuit.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/consensys/gnark/backend/groth16" "github.com/consensys/gnark/frontend/cs/r1cs" + "github.com/consensys/gnark/test/unsafekzg" "io" "os" "time" @@ -14,7 +15,8 @@ import ( "github.com/codex-storage/gnark-plonky2-verifier/variables" "github.com/codex-storage/gnark-plonky2-verifier/verifier" "github.com/consensys/gnark-crypto/ecc" - "github.com/consensys/gnark-crypto/kzg" + bn_kzg "github.com/consensys/gnark-crypto/ecc/bn254/kzg" + gnark_kzg "github.com/consensys/gnark-crypto/kzg" "github.com/consensys/gnark/backend/plonk" "github.com/consensys/gnark/constraint" "github.com/consensys/gnark/frontend" @@ -41,7 +43,7 @@ func (c *Plonky2VerifierCircuit) Define(api frontend.API) error { return nil } -func CompileVerifierCircuitPlonk(CircuitPath string) (constraint.ConstraintSystem, plonk.ProvingKey, plonk.VerifyingKey, error) { +func CompileVerifierCircuitPlonk(CircuitPath string, IsDummy bool) (constraint.ConstraintSystem, plonk.ProvingKey, plonk.VerifyingKey, error) { log := logger.Logger() verifierOnlyCircuitData := variables.DeserializeVerifierOnlyCircuitData( types.ReadVerifierOnlyCircuitData(CircuitPath + "/verifier_only_circuit_data.json"), @@ -63,27 +65,58 @@ func CompileVerifierCircuitPlonk(CircuitPath string) (constraint.ConstraintSyste } log.Info().Msg("Successfully compiled verifier circuit") - log.Info().Msg("Loading SRS - this will take some time") - fileName := CircuitPath + "srs_setup" - if _, err := os.Stat(fileName); os.IsNotExist(err) { - trusted_setup.DownloadAndSaveAztecIgnitionSrs(174, fileName) - } - fSRS, err := os.Open(fileName) - if err != nil { - return nil, nil, nil, fmt.Errorf("failed to open srs file: %w", err) - } + log.Info().Msg("Running circuit setup - this will take some time") - var srs kzg.SRS = kzg.NewSRS(ecc.BN254) - _, err = srs.ReadFrom(fSRS) - if err != nil { - return nil, nil, nil, fmt.Errorf("failed to read srs file: %w", err) + spr, ok := r1cs.(constraint.SparseR1CS) + if !ok { + panic("plonkProof: expected a constraint.SparseR1CS, got something else") + } + var ( + canonicalSrs gnark_kzg.SRS + lagrangeSrs gnark_kzg.SRS + ) + if IsDummy { + fmt.Println("Using dummy setup") + + canonicalSrs, lagrangeSrs, err = unsafekzg.NewSRS(spr) + if err != nil { + panic(fmt.Errorf("unsafekzg.NewSRS: %w", err)) + } + } else { + fmt.Println("Using real setup") + + fileName := CircuitPath + "srs_setup" + if _, err := os.Stat(fileName); os.IsNotExist(err) { + trusted_setup.DownloadAndSaveAztecIgnitionSrs(174, fileName) + } + fSRS, err := os.Open(fileName) + if err != nil { + return nil, nil, nil, fmt.Errorf("failed to open srs file: %w", err) + } + + BnCanonicalSrs := bn_kzg.SRS{} + _, err = canonicalSrs.ReadFrom(fSRS) + if err != nil { + return nil, nil, nil, fmt.Errorf("failed to read srs file: %w", err) + } + fSRS.Close() + + canonicalSrs = &BnCanonicalSrs + BnLagrangeSrs := bn_kzg.SRS{} + + n := spr.GetNbCoefficients() + lagG1, err := bn_kzg.ToLagrangeG1(BnCanonicalSrs.Pk.G1[:n]) + if err != nil { + panic(fmt.Errorf("bn_kzg.ToLagrangeG1: %w", err)) + } + BnLagrangeSrs.Pk.G1 = lagG1 + lagrangeSrs = &BnLagrangeSrs } - fSRS.Close() log.Info().Msg("Successfully loaded SRS") log.Info().Msg("Running circuit setup") start := time.Now() - pk, vk, err := plonk.Setup(r1cs, srs) + pk, vk, err := plonk.Setup(r1cs, canonicalSrs, lagrangeSrs) if err != nil { return nil, nil, nil, err } diff --git a/gnark-wrapper/cli.go b/gnark-wrapper/cli.go index 244c9be..d5e6f6f 100644 --- a/gnark-wrapper/cli.go +++ b/gnark-wrapper/cli.go @@ -9,6 +9,7 @@ import ( "github.com/consensys/gnark/logger" "github.com/rs/zerolog/log" "os" + "path/filepath" ) func main() { @@ -24,7 +25,8 @@ func main() { log := logger.Logger() - log.Info().Msgf("Running gnark plonky2 verifier for %s circuit with proof system %s", *circuitPath, *proofSystem) + circuitName := filepath.Base(*circuitPath) + log.Info().Msgf("Running gnark plonky2 verifier for %s circuit with proof system %s", circuitName, *proofSystem) if *circuitPath == "" { log.Info().Msg("no circuitPath flag found, please specify one") @@ -70,7 +72,7 @@ func main() { func CompileVerifierCircuit(circuitPath string, dataPath string, contractFlag bool, proofSystem string, dummySetup bool) { log.Info().Msg("compiling verifier circuit") if proofSystem == "plonk" { - r1cs, pk, vk, err := CompileVerifierCircuitPlonk(circuitPath) + r1cs, pk, vk, err := CompileVerifierCircuitPlonk(circuitPath, dummySetup) if err != nil { log.Error().Msg("failed to compile verifier circuit:" + err.Error()) os.Exit(1) @@ -149,7 +151,6 @@ func ProveCircuit(circuitPath string, dataPath string, proofSystem string, isDum log.Err(err).Msg("failed sanity check to verify proof") os.Exit(1) } - log.Info().Msgf("number of public input: %s", publicWitness) log.Info().Msg("Successfully passed sanity check - proof verification") } else if proofSystem == "groth16" { log.Info().Msg("loading the Groth16 proving key, circuit data and verifying key") diff --git a/gnark-wrapper/compile.sh b/gnark-wrapper/compile.sh index 609d051..b12e010 100755 --- a/gnark-wrapper/compile.sh +++ b/gnark-wrapper/compile.sh @@ -5,7 +5,7 @@ set -euo pipefail CIRCUIT_DIR=${1:-"$PWD/testdata/dummy"} # path to your Plonky2 JSON folder DATA_DIR=${2:-"$PWD/gnark_output"} # where to save gnark outputs PROOF_SYSTEM=${3:-"groth16"} # "plonk" or "groth16" -DUMMY=${4:-"false"} # only used for groth16 dummy setup +DUMMY=${4:-"false"} # dummy or real setup echo "Building verifier binary..." go build -o verifier . diff --git a/gnark-wrapper/go.mod b/gnark-wrapper/go.mod index 71dc3c7..a9b943c 100644 --- a/gnark-wrapper/go.mod +++ b/gnark-wrapper/go.mod @@ -1,32 +1,32 @@ module github.com/codex-storage/proof-aggregation/gnark-wrapper -go 1.20 +go 1.23.0 + +toolchain go1.24.3 require ( github.com/codex-storage/gnark-plonky2-verifier v0.0.0-20250527085145-0fde8cf39b5f - github.com/consensys/gnark v0.9.1 - github.com/consensys/gnark-crypto v0.12.2-0.20231013160410-1f65e75b6dfb - github.com/rs/zerolog v1.31.0 + github.com/consensys/gnark v0.12.0 + github.com/consensys/gnark-crypto v0.17.0 + github.com/rs/zerolog v1.33.0 ) require ( github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect - github.com/consensys/bavard v0.1.27 // indirect + github.com/consensys/bavard v0.1.29 // indirect github.com/consensys/gnark-ignition-verifier v0.0.0-20230527014722-10693546ab33 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/fxamacker/cbor/v2 v2.5.0 // indirect - github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect + github.com/ingonyama-zk/icicle/v3 v3.1.1-0.20241118092657-fccdb2f0921b // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/stretchr/testify v1.8.4 // indirect + github.com/ronanh/intcomp v1.1.0 // indirect github.com/x448/float16 v0.8.4 // indirect golang.org/x/crypto v0.35.0 // indirect - golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 // indirect golang.org/x/sync v0.11.0 // indirect golang.org/x/sys v0.30.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) diff --git a/gnark-wrapper/go.sum b/gnark-wrapper/go.sum index a7f116a..ca34f13 100644 --- a/gnark-wrapper/go.sum +++ b/gnark-wrapper/go.sum @@ -4,27 +4,29 @@ github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/codex-storage/gnark-plonky2-verifier v0.0.0-20250527085145-0fde8cf39b5f h1:Ryvf7so/6s3/gXu+qufX4KnibgSvyX45rKYvVXWkv08= github.com/codex-storage/gnark-plonky2-verifier v0.0.0-20250527085145-0fde8cf39b5f/go.mod h1:cPuoiO7TeRAULGcyJhWiVbFHJzAbHYY1tcRhi6ucrE4= -github.com/consensys/bavard v0.1.27 h1:j6hKUrGAy/H+gpNrpLU3I26n1yc+VMGmd6ID5+gAhOs= -github.com/consensys/bavard v0.1.27/go.mod h1:k/zVjHHC4B+PQy1Pg7fgvG3ALicQw540Crag8qx+dZs= -github.com/consensys/gnark v0.9.1 h1:aTwBp5469MY/2jNrf4ABrqHRW3+JytfkADdw4ZBY7T0= -github.com/consensys/gnark v0.9.1/go.mod h1:udWvWGXnfBE7mn7BsNoGAvZDnUhcONBEtNijvVjfY80= -github.com/consensys/gnark-crypto v0.12.2-0.20231013160410-1f65e75b6dfb h1:f0BMgIjhZy4lSRHCXFbQst85f5agZAjtDMixQqBWNpc= -github.com/consensys/gnark-crypto v0.12.2-0.20231013160410-1f65e75b6dfb/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= +github.com/consensys/bavard v0.1.29 h1:fobxIYksIQ+ZSrTJUuQgu+HIJwclrAPcdXqd7H2hh1k= +github.com/consensys/bavard v0.1.29/go.mod h1:k/zVjHHC4B+PQy1Pg7fgvG3ALicQw540Crag8qx+dZs= +github.com/consensys/gnark v0.12.0 h1:XgQ1kh2R6fHuf5fBYl+i7TxR+QTbGQuZaaqqkk5nLO0= +github.com/consensys/gnark v0.12.0/go.mod h1:WDvuIQ8qrRvWT9NhTrib84WeLVBSGhSTrbQBXs1yR5w= +github.com/consensys/gnark-crypto v0.17.0 h1:vKDhZMOrySbpZDCvGMOELrHFv/A9mJ7+9I8HEfRZSkI= +github.com/consensys/gnark-crypto v0.17.0/go.mod h1:A2URlMHUT81ifJ0UlLzSlm7TmnE3t7VxEThApdMukJw= github.com/consensys/gnark-ignition-verifier v0.0.0-20230527014722-10693546ab33 h1:z42ewLaLxoTYeQ17arcF4WExZc/eSaN3YVlF7eEaPt4= github.com/consensys/gnark-ignition-verifier v0.0.0-20230527014722-10693546ab33/go.mod h1:JdKor28c/KR4BbznP88bz8AAvnCgovzrB3KWsiR7lwk= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fxamacker/cbor/v2 v2.5.0 h1:oHsG0V/Q6E/wqTS2O1Cozzsy69nqCiguo5Q1a1ADivE= -github.com/fxamacker/cbor/v2 v2.5.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 h1:pUa4ghanp6q4IJHwE9RwLgmVFfReJN+KbQ8ExNEUUoQ= -github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= +github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/ingonyama-zk/icicle/v3 v3.1.1-0.20241118092657-fccdb2f0921b h1:AvQTK7l0PTHODD06PVQX1Tn2o29sRIaKIDOvTJmKurY= +github.com/ingonyama-zk/icicle/v3 v3.1.1-0.20241118092657-fccdb2f0921b/go.mod h1:e0JHb27/P6WorCJS3YolbY5XffS4PGBuoW38OthLkDs= +github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzWu4= +github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -37,18 +39,19 @@ github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFV github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/ronanh/intcomp v1.1.0 h1:i54kxmpmSoOZFcWPMWryuakN0vLxLswASsGa07zkvLU= +github.com/ronanh/intcomp v1.1.0/go.mod h1:7FOLy3P3Zj3er/kVrU/pl+Ql7JFZj7bwliMGketo0IU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= -github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 h1:kx6Ds3MlpiUHKj7syVnbp57++8WpuKPcR5yjLBjvLEA= +golang.org/x/exp v0.0.0-20240823005443-9b4947da3948/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -56,9 +59,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= diff --git a/gnark-wrapper/test.sh b/gnark-wrapper/test.sh index 9cfb62a..e3fd198 100644 --- a/gnark-wrapper/test.sh +++ b/gnark-wrapper/test.sh @@ -6,7 +6,7 @@ set -euo pipefail CIRCUIT_DIR=${1:-"$PWD/testdata/dummy"} # path to your Plonky2 JSON folder DATA_DIR=${2:-"$PWD/gnark_output"} # where to save gnark outputs PROOF_SYSTEM=${3:-"groth16"} # "plonk" or "groth16" -DUMMY=${4:-"false"} # only used for groth16 dummy setup +DUMMY=${4:-"false"} # dummy or real setup echo "Running full test: compile → prove → verify" ./compile.sh "${CIRCUIT_DIR}" "${DATA_DIR}" "${PROOF_SYSTEM}" "${DUMMY}" diff --git a/gnark-wrapper/verifier.go b/gnark-wrapper/verifier.go index 7a01b08..8d64906 100644 --- a/gnark-wrapper/verifier.go +++ b/gnark-wrapper/verifier.go @@ -12,6 +12,7 @@ import ( "github.com/consensys/gnark-crypto/ecc" "github.com/consensys/gnark/backend/plonk" + "github.com/consensys/gnark/backend/solidity" "github.com/consensys/gnark/backend/witness" "github.com/consensys/gnark/logger" ) @@ -114,7 +115,7 @@ func LoadGroth16Proof(dataPath string) (groth16.Proof, error) { } type solidityExporter interface { - ExportSolidity(w io.Writer) error + ExportSolidity(io.Writer, ...solidity.ExportOption) error } func ExportIFunctionVerifierSolidity(path string, vk solidityExporter) error {