From cec54d34a109900160bb4ca331d1f3a451c318f5 Mon Sep 17 00:00:00 2001 From: Marcos Nicolau Date: Thu, 28 Aug 2025 15:20:23 -0300 Subject: [PATCH 01/10] update batcher circom verifier to accept raw pub inputs --- crates/batcher/go_verifiers_lib/go.mod | 6 +++ crates/batcher/go_verifiers_lib/go.sum | 8 ++-- crates/batcher/go_verifiers_lib/verifier.go | 45 ++++++++++++++++----- 3 files changed, 45 insertions(+), 14 deletions(-) diff --git a/crates/batcher/go_verifiers_lib/go.mod b/crates/batcher/go_verifiers_lib/go.mod index 5b23efe6d7..6f38a939d6 100644 --- a/crates/batcher/go_verifiers_lib/go.mod +++ b/crates/batcher/go_verifiers_lib/go.mod @@ -2,6 +2,12 @@ module verifier go 1.22.3 +replace github.com/iden3/go-rapidsnark => github.com/MarcosNicolau/go-rapidsnark v0.0.0-20250828172020-87df0a23ada4 + +replace github.com/iden3/go-rapidsnark/types => github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 + +replace github.com/iden3/go-rapidsnark/verifier => github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 + require ( github.com/consensys/gnark v0.12.0 github.com/consensys/gnark-crypto v0.17.0 diff --git a/crates/batcher/go_verifiers_lib/go.sum b/crates/batcher/go_verifiers_lib/go.sum index 5fd69b3b3a..a1a5e4f38b 100644 --- a/crates/batcher/go_verifiers_lib/go.sum +++ b/crates/batcher/go_verifiers_lib/go.sum @@ -1,3 +1,7 @@ +github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 h1:NAZOH8mk5hgWpxf1ujVw+uggsRBMcXiiC7R7sZXVfW0= +github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= +github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 h1:Sz8H0fl9kjg8iZmaHT8pyCx4Smy5JJtq0OyKfz8iXls= +github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= github.com/bits-and-blooms/bitset v1.20.0 h1:2F+rfL86jE2d/bmw7OhqUg2Sj/1rURkBn3MdfoPyRVU= github.com/bits-and-blooms/bitset v1.20.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= @@ -21,10 +25,6 @@ github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73 github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/iden3/go-iden3-crypto v0.0.17 h1:NdkceRLJo/pI4UpcjVah4lN/a3yzxRUGXqxbWcYh9mY= github.com/iden3/go-iden3-crypto v0.0.17/go.mod h1:dLpM4vEPJ3nDHzhWFXDjzkn1qHoBeOT/3UEhXsEsP3E= -github.com/iden3/go-rapidsnark/types v0.0.3 h1:f0s1Qdut1qHe1O67+m+xUVRBPwSXnq5j0xSrBi0jqM4= -github.com/iden3/go-rapidsnark/types v0.0.3/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= -github.com/iden3/go-rapidsnark/verifier v0.0.5 h1:J7y0ovrEjDQoWtZmlrp4tgGng1A9faMeYsQH4igAEqA= -github.com/iden3/go-rapidsnark/verifier v0.0.5/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= 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= diff --git a/crates/batcher/go_verifiers_lib/verifier.go b/crates/batcher/go_verifiers_lib/verifier.go index 4463ea522c..54d9f5b23c 100644 --- a/crates/batcher/go_verifiers_lib/verifier.go +++ b/crates/batcher/go_verifiers_lib/verifier.go @@ -14,8 +14,7 @@ import "C" import ( "bytes" "encoding/json" - "github.com/iden3/go-rapidsnark/types" - "github.com/iden3/go-rapidsnark/verifier" + "math/big" "log" "unsafe" @@ -24,6 +23,8 @@ import ( "github.com/consensys/gnark/backend/groth16" "github.com/consensys/gnark/backend/plonk" "github.com/consensys/gnark/backend/witness" + "github.com/iden3/go-rapidsnark/types" + "github.com/iden3/go-rapidsnark/verifier" ) func listRefToBytes(listRef C.ListRef) []byte { @@ -122,6 +123,20 @@ func verifyGnarkGroth16Proof(proofBytesRef C.ListRef, pubInputBytesRef C.ListRef return err == nil } +func bytesToBigInts32(b []byte) []*big.Int { + if len(b)%32 != 0 { + panic("pubInputBytes length is not a multiple of 32") + } + + inputs := make([]*big.Int, 0, len(b)/32) + for i := 0; i < len(b); i += 32 { + chunk := b[i : i+32] + bi := new(big.Int).SetBytes(chunk) + inputs = append(inputs, bi) + } + return inputs +} + //export VerifyCircomGroth16ProofBN256 func VerifyCircomGroth16ProofBN256(proofBytesRef C.ListRef, pubInputBytesRef C.ListRef, verificationKeyBytesRef C.ListRef) bool { proofBytes := listRefToBytes(proofBytesRef) @@ -131,26 +146,36 @@ func VerifyCircomGroth16ProofBN256(proofBytesRef C.ListRef, pubInputBytesRef C.L proofData := &types.ProofData{} err := json.Unmarshal(proofBytes, proofData) if err != nil { - log.Printf("Could not marshal proof: %v", err) + log.Printf("Could not unmarshal proof: %v", err) return false } - var pubSignals []string - err = json.Unmarshal(pubInputBytes, &pubSignals) + parsedProofData, err := verifier.ParseProofData(*proofData) if err != nil { - log.Printf("Error unmarshaling JSON: %v", err) + log.Printf("Could not parse proof: %v", err) return false } - zkProof := types.ZKProof{ - Proof: proofData, - PubSignals: pubSignals, + var vkStr verifier.VkJSON + err = json.Unmarshal(verificationKeyBytes, &vkStr) + if err != nil { + log.Printf("Could not unmarshal vk: %v", err) + return false + } + + vk, err := verifier.ParseVK(vkStr) + if err != nil { + log.Printf("Could not parse vk: %v", err) + return false } - err = verifier.VerifyGroth16(zkProof, verificationKeyBytes) + inputs := bytesToBigInts32(pubInputBytes) + + err = verifier.VerifyRaw(vk, parsedProofData, inputs) if err != nil { log.Printf("Could not verify Groth16 proof: %v", err) return false } + return true } From c22391ec9230a0f942f9f33058f45203124de717 Mon Sep 17 00:00:00 2001 From: Marcos Nicolau Date: Thu, 28 Aug 2025 15:20:42 -0300 Subject: [PATCH 02/10] update operator circom verifier to accept raw pub inputs --- go.mod | 8 +++++++- go.sum | 8 ++++---- operator/pkg/operator.go | 44 +++++++++++++++++++++++++++++++--------- 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 889d0d2d0a..480a540b73 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,12 @@ go 1.22.3 toolchain go1.23.4 +replace github.com/iden3/go-rapidsnark => github.com/MarcosNicolau/go-rapidsnark v0.0.0-20250828172020-87df0a23ada4 + +replace github.com/iden3/go-rapidsnark/types => github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 + +replace github.com/iden3/go-rapidsnark/verifier => github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 + require ( github.com/Layr-Labs/eigensdk-go v0.2.0-beta.1 github.com/ethereum/go-ethereum v1.14.0 @@ -18,7 +24,6 @@ require ( github.com/consensys/gnark v0.12.0 github.com/consensys/gnark-crypto v0.17.0 github.com/fxamacker/cbor/v2 v2.7.0 - github.com/iden3/go-rapidsnark/types v0.0.3 github.com/iden3/go-rapidsnark/verifier v0.0.5 github.com/rs/zerolog v1.33.0 github.com/ugorji/go/codec v1.2.12 @@ -63,6 +68,7 @@ require ( github.com/gorilla/websocket v1.5.1 // indirect github.com/holiman/uint256 v1.2.4 // indirect github.com/iden3/go-iden3-crypto v0.0.17 // indirect + github.com/iden3/go-rapidsnark/types v0.0.3 // indirect github.com/ingonyama-zk/icicle/v3 v3.1.1-0.20241118092657-fccdb2f0921b // indirect github.com/klauspost/compress v1.17.7 // indirect github.com/lmittmann/tint v1.0.4 // indirect diff --git a/go.sum b/go.sum index af23873944..fb4e6b2d9f 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,10 @@ github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Layr-Labs/eigensdk-go v0.2.0-beta.1 h1:vW7AKcvt7fGlIeOMl2Ft9Au/ib8Z9ush8fSrpFSVr10= github.com/Layr-Labs/eigensdk-go v0.2.0-beta.1/go.mod h1:G4yqiK+5NfUuEMVGGncOEm7QskuGRPmKA7bKxpPzPT4= +github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 h1:NAZOH8mk5hgWpxf1ujVw+uggsRBMcXiiC7R7sZXVfW0= +github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= +github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 h1:Sz8H0fl9kjg8iZmaHT8pyCx4Smy5JJtq0OyKfz8iXls= +github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8= @@ -192,10 +196,6 @@ github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFck github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/iden3/go-iden3-crypto v0.0.17 h1:NdkceRLJo/pI4UpcjVah4lN/a3yzxRUGXqxbWcYh9mY= github.com/iden3/go-iden3-crypto v0.0.17/go.mod h1:dLpM4vEPJ3nDHzhWFXDjzkn1qHoBeOT/3UEhXsEsP3E= -github.com/iden3/go-rapidsnark/types v0.0.3 h1:f0s1Qdut1qHe1O67+m+xUVRBPwSXnq5j0xSrBi0jqM4= -github.com/iden3/go-rapidsnark/types v0.0.3/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= -github.com/iden3/go-rapidsnark/verifier v0.0.5 h1:J7y0ovrEjDQoWtZmlrp4tgGng1A9faMeYsQH4igAEqA= -github.com/iden3/go-rapidsnark/verifier v0.0.5/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= 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/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= diff --git a/operator/pkg/operator.go b/operator/pkg/operator.go index 12f5ba6af9..c6d649d63d 100644 --- a/operator/pkg/operator.go +++ b/operator/pkg/operator.go @@ -15,7 +15,7 @@ import ( "time" rapidsnark_types "github.com/iden3/go-rapidsnark/types" - "github.com/iden3/go-rapidsnark/verifier" + rapidsnark_verifier "github.com/iden3/go-rapidsnark/verifier" "github.com/ethereum/go-ethereum/crypto" "github.com/urfave/cli/v2" @@ -621,30 +621,54 @@ func (o *Operator) verifyGnarkGroth16Proof(proofBytes []byte, pubInputBytes []by // verifyCircomGroth16Bn256Proof verifies a Circom Groth16 proof using BN256 curve. func (o *Operator) verifyCircomGroth16Bn256Proof(proofBytes []byte, pubInputBytes []byte, verificationKeyBytes []byte) bool { + bytesToBigInts32 := func(b []byte) []*big.Int { + if len(b)%32 != 0 { + panic("pubInputBytes length is not a multiple of 32") + } + + inputs := make([]*big.Int, 0, len(b)/32) + for i := 0; i < len(b); i += 32 { + chunk := b[i : i+32] + bi := new(big.Int).SetBytes(chunk) + inputs = append(inputs, bi) + } + return inputs + } + proofData := &rapidsnark_types.ProofData{} err := json.Unmarshal(proofBytes, proofData) if err != nil { - o.Logger.Infof("Could not marshal proof: %v", err) + log.Printf("Could not unmarshal proof: %v", err) return false } - var pubSignals []string - err = json.Unmarshal(pubInputBytes, &pubSignals) + parsedProofData, err := rapidsnark_verifier.ParseProofData(*proofData) if err != nil { - o.Logger.Infof("Could not marshal public signals: %v", err) + log.Printf("Could not parse proof: %v", err) return false } - zkProof := rapidsnark_types.ZKProof{ - Proof: proofData, - PubSignals: pubSignals, + var vkStr rapidsnark_verifier.VkJSON + err = json.Unmarshal(verificationKeyBytes, &vkStr) + if err != nil { + log.Printf("Could not unmarshal vk: %v", err) + return false } - err = verifier.VerifyGroth16(zkProof, verificationKeyBytes) + vk, err := rapidsnark_verifier.ParseVK(vkStr) if err != nil { - o.Logger.Infof("Could not verify Circom Groth16 BN256 proof: %v", err) + log.Printf("Could not parse vk: %v", err) return false } + + inputs := bytesToBigInts32(pubInputBytes) + + err = rapidsnark_verifier.VerifyRaw(vk, parsedProofData, inputs) + if err != nil { + log.Printf("Could not verify Groth16 proof: %v", err) + return false + } + return true } From ddb130b56c4b1cefb0afa4ca2c189da42b40ee2d Mon Sep 17 00:00:00 2001 From: Marcos Nicolau Date: Thu, 28 Aug 2025 15:21:19 -0300 Subject: [PATCH 03/10] feat: sdk and cli parse input.json to the raw numbers --- crates/cli/src/main.rs | 15 +++++++++++---- crates/sdk/src/common/mod.rs | 1 + crates/sdk/src/common/utils.rs | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 crates/sdk/src/common/utils.rs diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs index a9778cbda2..ef9ce61a65 100644 --- a/crates/cli/src/main.rs +++ b/crates/cli/src/main.rs @@ -926,10 +926,17 @@ fn verification_data_from_args(args: &SubmitArgs) -> Result = serde_json::from_slice(&pub_input_file) + .map_err(|e| SubmitError::MissingRequiredParameter(e.to_string()))?; + + let decode_inputs = aligned_sdk::common::utils::encode_circom_pub_inputs(&pub_inputs) + .map_err(|_| { + SubmitError::MissingRequiredParameter("Invalid public inputs".into()) + })?; + + pub_input = Some(decode_inputs); } } diff --git a/crates/sdk/src/common/mod.rs b/crates/sdk/src/common/mod.rs index 23e3925b8f..497d26485f 100644 --- a/crates/sdk/src/common/mod.rs +++ b/crates/sdk/src/common/mod.rs @@ -1,3 +1,4 @@ pub mod constants; pub mod errors; pub mod types; +pub mod utils; diff --git a/crates/sdk/src/common/utils.rs b/crates/sdk/src/common/utils.rs new file mode 100644 index 0000000000..97266f9191 --- /dev/null +++ b/crates/sdk/src/common/utils.rs @@ -0,0 +1,32 @@ +use ethers::{abi::ethereum_types::FromDecStrErr, types::U256}; + +/// Encodes Circom public inputs into a single byte vector. +/// +/// Circom normally outputs public inputs as a JSON array of strings, where each +/// entry is actually a big integer represented in decimal. For example: +/// +/// ```json +/// { "pubInputs": ["123", "456", "789"] } +/// ``` +/// +/// For on-chain usage (e.g. in Solidity), working with JSON is inefficient. +/// Instead, we prefer the **raw form**: each input is converted to a 32-byte +/// big-endian encoding of the integer, concatenated together. This makes it +/// simple to compute commitments and verify proofs on-chain, since the contract +/// receives a compact `bytes` array rather than parsing JSON. +/// +/// Each input must fit in 32 bytes (i.e. < 2^256). +pub fn encode_circom_pub_inputs(input: &[String]) -> Result, FromDecStrErr> { + let mut out = Vec::with_capacity(input.len() * 32); + + for s in input { + // parse as decimal (base 10). Use from_str_radix(s, 16) if they're hex. + let n = U256::from_dec_str(s)?; + let mut bytes = [0u8; 32]; + n.to_big_endian(&mut bytes); + + out.extend_from_slice(&bytes); + } + + Ok(out) +} From 81efbd2c9a41f01e2312d2d607fe073fd201370f Mon Sep 17 00:00:00 2001 From: Marcos Nicolau Date: Fri, 29 Aug 2025 10:34:34 -0300 Subject: [PATCH 04/10] chore: update fork to org --- crates/batcher/go_verifiers_lib/go.mod | 6 +++--- crates/batcher/go_verifiers_lib/go.sum | 8 ++++---- go.mod | 8 ++++---- go.sum | 8 ++++---- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/crates/batcher/go_verifiers_lib/go.mod b/crates/batcher/go_verifiers_lib/go.mod index 6f38a939d6..6d0d5a4cf6 100644 --- a/crates/batcher/go_verifiers_lib/go.mod +++ b/crates/batcher/go_verifiers_lib/go.mod @@ -2,11 +2,11 @@ module verifier go 1.22.3 -replace github.com/iden3/go-rapidsnark => github.com/MarcosNicolau/go-rapidsnark v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark => github.com/yetanotherco/go-rapidsnark v0.0.0-20250828172020-87df0a23ada4 -replace github.com/iden3/go-rapidsnark/types => github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark/types => github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 -replace github.com/iden3/go-rapidsnark/verifier => github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark/verifier => github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 require ( github.com/consensys/gnark v0.12.0 diff --git a/crates/batcher/go_verifiers_lib/go.sum b/crates/batcher/go_verifiers_lib/go.sum index a1a5e4f38b..32ea803c1d 100644 --- a/crates/batcher/go_verifiers_lib/go.sum +++ b/crates/batcher/go_verifiers_lib/go.sum @@ -1,7 +1,3 @@ -github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 h1:NAZOH8mk5hgWpxf1ujVw+uggsRBMcXiiC7R7sZXVfW0= -github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= -github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 h1:Sz8H0fl9kjg8iZmaHT8pyCx4Smy5JJtq0OyKfz8iXls= -github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= github.com/bits-and-blooms/bitset v1.20.0 h1:2F+rfL86jE2d/bmw7OhqUg2Sj/1rURkBn3MdfoPyRVU= github.com/bits-and-blooms/bitset v1.20.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= @@ -50,6 +46,10 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf 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= +github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 h1:AAUBT4TrU8p66nW8aHVCFme87NfkUi03xTeuNA5HQws= +github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= +github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 h1:9NfnU0RAhwC4hPXSG7tHvkHPsAVO2sJBliXguLn5ZgQ= +github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= diff --git a/go.mod b/go.mod index 480a540b73..8fb114e7ff 100644 --- a/go.mod +++ b/go.mod @@ -4,11 +4,11 @@ go 1.22.3 toolchain go1.23.4 -replace github.com/iden3/go-rapidsnark => github.com/MarcosNicolau/go-rapidsnark v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark => github.com/yetanotherco/go-rapidsnark v0.0.0-20250828172020-87df0a23ada4 -replace github.com/iden3/go-rapidsnark/types => github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark/types => github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 -replace github.com/iden3/go-rapidsnark/verifier => github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark/verifier => github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 require ( github.com/Layr-Labs/eigensdk-go v0.2.0-beta.1 @@ -24,6 +24,7 @@ require ( github.com/consensys/gnark v0.12.0 github.com/consensys/gnark-crypto v0.17.0 github.com/fxamacker/cbor/v2 v2.7.0 + github.com/iden3/go-rapidsnark/types v0.0.3 github.com/iden3/go-rapidsnark/verifier v0.0.5 github.com/rs/zerolog v1.33.0 github.com/ugorji/go/codec v1.2.12 @@ -68,7 +69,6 @@ require ( github.com/gorilla/websocket v1.5.1 // indirect github.com/holiman/uint256 v1.2.4 // indirect github.com/iden3/go-iden3-crypto v0.0.17 // indirect - github.com/iden3/go-rapidsnark/types v0.0.3 // indirect github.com/ingonyama-zk/icicle/v3 v3.1.1-0.20241118092657-fccdb2f0921b // indirect github.com/klauspost/compress v1.17.7 // indirect github.com/lmittmann/tint v1.0.4 // indirect diff --git a/go.sum b/go.sum index fb4e6b2d9f..de73427e74 100644 --- a/go.sum +++ b/go.sum @@ -8,10 +8,6 @@ github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Layr-Labs/eigensdk-go v0.2.0-beta.1 h1:vW7AKcvt7fGlIeOMl2Ft9Au/ib8Z9ush8fSrpFSVr10= github.com/Layr-Labs/eigensdk-go v0.2.0-beta.1/go.mod h1:G4yqiK+5NfUuEMVGGncOEm7QskuGRPmKA7bKxpPzPT4= -github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 h1:NAZOH8mk5hgWpxf1ujVw+uggsRBMcXiiC7R7sZXVfW0= -github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= -github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 h1:Sz8H0fl9kjg8iZmaHT8pyCx4Smy5JJtq0OyKfz8iXls= -github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8= @@ -323,6 +319,10 @@ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= +github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 h1:AAUBT4TrU8p66nW8aHVCFme87NfkUi03xTeuNA5HQws= +github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= +github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 h1:9NfnU0RAhwC4hPXSG7tHvkHPsAVO2sJBliXguLn5ZgQ= +github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= From 2b7baa237121a8e04c663db06b13820a8799c14e Mon Sep 17 00:00:00 2001 From: Marcos Nicolau Date: Fri, 29 Aug 2025 14:06:40 -0300 Subject: [PATCH 05/10] chore: update go mod to point to main branch commit --- crates/batcher/go_verifiers_lib/go.mod | 6 +++--- crates/batcher/go_verifiers_lib/go.sum | 8 ++++---- go.mod | 6 +++--- go.sum | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/crates/batcher/go_verifiers_lib/go.mod b/crates/batcher/go_verifiers_lib/go.mod index 6d0d5a4cf6..980e31ef6a 100644 --- a/crates/batcher/go_verifiers_lib/go.mod +++ b/crates/batcher/go_verifiers_lib/go.mod @@ -2,11 +2,11 @@ module verifier go 1.22.3 -replace github.com/iden3/go-rapidsnark => github.com/yetanotherco/go-rapidsnark v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark => github.com/yetanotherco/go-rapidsnark v0.0.0-20250829135025-99f9f6b11ecc -replace github.com/iden3/go-rapidsnark/types => github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark/types => github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250829135025-99f9f6b11ecc -replace github.com/iden3/go-rapidsnark/verifier => github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark/verifier => github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250829135025-99f9f6b11ecc require ( github.com/consensys/gnark v0.12.0 diff --git a/crates/batcher/go_verifiers_lib/go.sum b/crates/batcher/go_verifiers_lib/go.sum index 32ea803c1d..7f0850e751 100644 --- a/crates/batcher/go_verifiers_lib/go.sum +++ b/crates/batcher/go_verifiers_lib/go.sum @@ -46,10 +46,10 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf 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= -github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 h1:AAUBT4TrU8p66nW8aHVCFme87NfkUi03xTeuNA5HQws= -github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= -github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 h1:9NfnU0RAhwC4hPXSG7tHvkHPsAVO2sJBliXguLn5ZgQ= -github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= +github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250829135025-99f9f6b11ecc h1:9d0e1bmYz6pv0p1V8zrx7jALDdgAIZ8bZWSCDxemgE4= +github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250829135025-99f9f6b11ecc/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= +github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250829135025-99f9f6b11ecc h1:JLSkcXpSuKb4fzYMF1qNM0nO2oysvOkpNeCSQunTtUA= +github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250829135025-99f9f6b11ecc/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= diff --git a/go.mod b/go.mod index 8fb114e7ff..a6863dcff5 100644 --- a/go.mod +++ b/go.mod @@ -4,11 +4,11 @@ go 1.22.3 toolchain go1.23.4 -replace github.com/iden3/go-rapidsnark => github.com/yetanotherco/go-rapidsnark v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark => github.com/yetanotherco/go-rapidsnark v0.0.0-20250829135025-99f9f6b11ecc -replace github.com/iden3/go-rapidsnark/types => github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark/types => github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250829135025-99f9f6b11ecc -replace github.com/iden3/go-rapidsnark/verifier => github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 +replace github.com/iden3/go-rapidsnark/verifier => github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250829135025-99f9f6b11ecc require ( github.com/Layr-Labs/eigensdk-go v0.2.0-beta.1 diff --git a/go.sum b/go.sum index de73427e74..ef91df79e0 100644 --- a/go.sum +++ b/go.sum @@ -319,10 +319,10 @@ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= -github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 h1:AAUBT4TrU8p66nW8aHVCFme87NfkUi03xTeuNA5HQws= -github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= -github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 h1:9NfnU0RAhwC4hPXSG7tHvkHPsAVO2sJBliXguLn5ZgQ= -github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= +github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250829135025-99f9f6b11ecc h1:9d0e1bmYz6pv0p1V8zrx7jALDdgAIZ8bZWSCDxemgE4= +github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250829135025-99f9f6b11ecc/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4= +github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250829135025-99f9f6b11ecc h1:JLSkcXpSuKb4fzYMF1qNM0nO2oysvOkpNeCSQunTtUA= +github.com/yetanotherco/go-rapidsnark/verifier v0.0.0-20250829135025-99f9f6b11ecc/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= From 6067e8611dbf07f35b56b0252a04e24988b35d2d Mon Sep 17 00:00:00 2001 From: Marcos Nicolau Date: Fri, 29 Aug 2025 14:13:44 -0300 Subject: [PATCH 06/10] fix: avoid panic on invalid pub inputs length --- crates/batcher/go_verifiers_lib/verifier.go | 13 +++++++++---- operator/pkg/operator.go | 12 ++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/crates/batcher/go_verifiers_lib/verifier.go b/crates/batcher/go_verifiers_lib/verifier.go index 54d9f5b23c..5c4762f2b9 100644 --- a/crates/batcher/go_verifiers_lib/verifier.go +++ b/crates/batcher/go_verifiers_lib/verifier.go @@ -14,6 +14,7 @@ import "C" import ( "bytes" "encoding/json" + "fmt" "math/big" "log" @@ -123,9 +124,9 @@ func verifyGnarkGroth16Proof(proofBytesRef C.ListRef, pubInputBytesRef C.ListRef return err == nil } -func bytesToBigInts32(b []byte) []*big.Int { +func bytesToBigInts32(b []byte) ([]*big.Int, error) { if len(b)%32 != 0 { - panic("pubInputBytes length is not a multiple of 32") + return nil, fmt.Errorf("invalid length") } inputs := make([]*big.Int, 0, len(b)/32) @@ -134,7 +135,7 @@ func bytesToBigInts32(b []byte) []*big.Int { bi := new(big.Int).SetBytes(chunk) inputs = append(inputs, bi) } - return inputs + return inputs, nil } //export VerifyCircomGroth16ProofBN256 @@ -169,7 +170,11 @@ func VerifyCircomGroth16ProofBN256(proofBytesRef C.ListRef, pubInputBytesRef C.L return false } - inputs := bytesToBigInts32(pubInputBytes) + inputs, err := bytesToBigInts32(pubInputBytes) + if err != nil { + log.Printf("Could not parse pub inputs: %v", err) + return false + } err = verifier.VerifyRaw(vk, parsedProofData, inputs) if err != nil { diff --git a/operator/pkg/operator.go b/operator/pkg/operator.go index c6d649d63d..adead883af 100644 --- a/operator/pkg/operator.go +++ b/operator/pkg/operator.go @@ -621,9 +621,9 @@ func (o *Operator) verifyGnarkGroth16Proof(proofBytes []byte, pubInputBytes []by // verifyCircomGroth16Bn256Proof verifies a Circom Groth16 proof using BN256 curve. func (o *Operator) verifyCircomGroth16Bn256Proof(proofBytes []byte, pubInputBytes []byte, verificationKeyBytes []byte) bool { - bytesToBigInts32 := func(b []byte) []*big.Int { + bytesToBigInts32 := func(b []byte) ([]*big.Int, error) { if len(b)%32 != 0 { - panic("pubInputBytes length is not a multiple of 32") + return nil, fmt.Errorf("invalid length") } inputs := make([]*big.Int, 0, len(b)/32) @@ -632,7 +632,7 @@ func (o *Operator) verifyCircomGroth16Bn256Proof(proofBytes []byte, pubInputByte bi := new(big.Int).SetBytes(chunk) inputs = append(inputs, bi) } - return inputs + return inputs, nil } proofData := &rapidsnark_types.ProofData{} @@ -661,7 +661,11 @@ func (o *Operator) verifyCircomGroth16Bn256Proof(proofBytes []byte, pubInputByte return false } - inputs := bytesToBigInts32(pubInputBytes) + inputs, err := bytesToBigInts32(pubInputBytes) + if err != nil { + log.Printf("Could not parse pub inputs: %v", err) + return false + } err = rapidsnark_verifier.VerifyRaw(vk, parsedProofData, inputs) if err != nil { From 0f46e927c85ae1645e39762da309d6142c51504d Mon Sep 17 00:00:00 2001 From: MauroFab Date: Fri, 29 Aug 2025 17:05:01 -0300 Subject: [PATCH 07/10] Explain why the replacement in the go.mod --- go.mod | 3 +++ 1 file changed, 3 insertions(+) diff --git a/go.mod b/go.mod index a6863dcff5..7db949c994 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,9 @@ go 1.22.3 toolchain go1.23.4 +// Replace with fork that exposes VerifyRaw function for raw byte public inputs. +// The official iden3/go-rapidsnark only provides VerifyGroth16 which expects JSON string +// public inputs, but we need to commit to the raw bytes and VerifyRaw simplifies this work. replace github.com/iden3/go-rapidsnark => github.com/yetanotherco/go-rapidsnark v0.0.0-20250829135025-99f9f6b11ecc replace github.com/iden3/go-rapidsnark/types => github.com/yetanotherco/go-rapidsnark/types v0.0.0-20250829135025-99f9f6b11ecc From be112941daf55cdf1b145d1c55ee20b89fc51f8c Mon Sep 17 00:00:00 2001 From: Marcos Nicolau Date: Fri, 29 Aug 2025 17:29:28 -0300 Subject: [PATCH 08/10] chore: no pub input proof --- Makefile | 46 ++++++++++ .../README.md | 43 +++++++++ .../circuit.circom | 15 ++++ .../generate_proof.sh | 36 ++++++++ .../generate_setup.sh | 22 +++++ .../input.json | 1 + .../proof.json | 28 ++++++ .../public.json | 2 + .../verification_key.json | 89 +++++++++++++++++++ 9 files changed, 282 insertions(+) create mode 100644 scripts/test_files/circom_groth16_bn256_no_pub_input_script/README.md create mode 100644 scripts/test_files/circom_groth16_bn256_no_pub_input_script/circuit.circom create mode 100755 scripts/test_files/circom_groth16_bn256_no_pub_input_script/generate_proof.sh create mode 100755 scripts/test_files/circom_groth16_bn256_no_pub_input_script/generate_setup.sh create mode 100644 scripts/test_files/circom_groth16_bn256_no_pub_input_script/input.json create mode 100644 scripts/test_files/circom_groth16_bn256_no_pub_input_script/proof.json create mode 100644 scripts/test_files/circom_groth16_bn256_no_pub_input_script/public.json create mode 100644 scripts/test_files/circom_groth16_bn256_no_pub_input_script/verification_key.json diff --git a/Makefile b/Makefile index 797b9a211c..8b46e91a54 100644 --- a/Makefile +++ b/Makefile @@ -681,6 +681,30 @@ batcher_send_circom_groth16_bn256_burst: crates/target/release/aligned ## Send a --rpc_url $(RPC_URL) \ --network $(NETWORK) +batcher_send_circom_groth16_bn256_burst: crates/target/release/aligned ## Send a burst of Circom Groth16 BN256 proofs to Batcher. Parameters: RPC_URL, NETWORK, BURST_SIZE + @echo "Sending Circom Groth16 BN256 proof to Batcher..." + @cd crates/cli/ && cargo run --release -- submit \ + --proving_system CircomGroth16Bn256 \ + --proof ../../scripts/test_files/circom_groth16_bn256_script/proof.json \ + --public_input ../../scripts/test_files/circom_groth16_bn256_script/public.json \ + --vk ../../scripts/test_files/circom_groth16_bn256_script/verification_key.json \ + --proof_generator_addr 0x66f9664f97F2b50F62D13eA064982f936dE76657 \ + --repetitions $(BURST_SIZE) \ + --rpc_url $(RPC_URL) \ + --network $(NETWORK) + +batcher_send_circom_groth16_bn256_no_pub_input_burst: crates/target/release/aligned ## Send a burst of Circom Groth16 BN256 proofs to Batcher. Parameters: RPC_URL, NETWORK, BURST_SIZE + @echo "Sending Circom Groth16 BN256 proof to Batcher..." + @cd crates/cli/ && cargo run --release -- submit \ + --proving_system CircomGroth16Bn256 \ + --proof ../../scripts/test_files/circom_groth16_bn256_no_pub_input_script/proof.json \ + --public_input ../../scripts/test_files/circom_groth16_bn256_no_pub_input_script/public.json \ + --vk ../../scripts/test_files/circom_groth16_bn256_no_pub_input_script/verification_key.json \ + --proof_generator_addr 0x66f9664f97F2b50F62D13eA064982f936dE76657 \ + --repetitions $(BURST_SIZE) \ + --rpc_url $(RPC_URL) \ + --network $(NETWORK) + batcher_send_proof_with_random_address: ## Send a proof with a random address to Batcher. Parameters: RPC_URL, NETWORK, PROOF_TYPE, REPETITIONS @cd crates/cli/ && ./send_proof_with_random_address.sh @@ -802,6 +826,14 @@ generate_circom_groth16_bn256_setup: ## Run the circom_groth16_bn256_script setu @echo "Running circom_groth16_bn256 script setup..." @cd scripts/test_files/circom_groth16_bn256_script && ./generate_setup.sh +generate_circom_groth16_bn256_no_pub_input_proof: ## Run the circom_groth16_bn256_script + @echo "Running circom_groth16_bn256 script..." + @cd scripts/test_files/circom_groth16_bn256_no_pub_input_script && ./generate_proof.sh + +generate_circom_groth16_bn256_no_pub_input_setup: ## Run the circom_groth16_bn256_script setup + @echo "Running circom_groth16_bn256_no_pub_input_script setup..." + @cd scripts/test_files/circom_groth16_bn256_no_pub_input_script && ./generate_setup.sh + __CONTRACTS_DEPLOYMENT__: ## ____ deploy_aligned_contracts: ## Deploy Aligned Contracts. Parameters: NETWORK= @echo "Deploying Aligned Contracts on $(NETWORK) network..." @@ -1150,6 +1182,19 @@ docker_batcher_send_circom_groth16_bn256_burst: --rpc_url $(DOCKER_RPC_URL) \ --max_fee 0.1ether +docker_batcher_send_circom_groth16_bn256_burst: + @echo "Sending Circom Groth16 BN256 task to Batcher..." + docker exec $(shell docker ps | grep batcher | awk '{print $$1}') aligned submit \ + --private_key $(DOCKER_PROOFS_PRIVATE_KEY) \ + --proving_system CircomGroth16Bn256 \ + --proof ./scripts/test_files/circom_groth16_bn256_no_pub_input_script/proof.json \ + --public_input ./scripts/test_files/circom_groth16_bn256_no_pub_input_script/public.json \ + --vk ./scripts/test_files/circom_groth16_bn256_no_pub_input_script/verification_key.json \ + --proof_generator_addr $(PROOF_GENERATOR_ADDRESS) \ + --repetitions $(DOCKER_BURST_SIZE) \ + --rpc_url $(DOCKER_RPC_URL) \ + --max_fee 0.1ether + # Update target as new proofs are supported. docker_batcher_send_all_proofs_burst: @$(MAKE) docker_batcher_send_sp1_burst @@ -1158,6 +1203,7 @@ docker_batcher_send_all_proofs_burst: @$(MAKE) docker_batcher_send_gnark_plonk_bls12_381_burst @$(MAKE) docker_batcher_send_gnark_groth16_burst @$(MAKE) docker_batcher_send_circom_groth16_bn256_burst + @$(MAKE) docker_batcher_send_circom_groth16_bn256_no_pub_input_burst docker_batcher_send_infinite_groth16: docker exec $(shell docker ps | grep batcher | awk '{print $$1}') \ diff --git a/scripts/test_files/circom_groth16_bn256_no_pub_input_script/README.md b/scripts/test_files/circom_groth16_bn256_no_pub_input_script/README.md new file mode 100644 index 0000000000..069c7dcd64 --- /dev/null +++ b/scripts/test_files/circom_groth16_bn256_no_pub_input_script/README.md @@ -0,0 +1,43 @@ +# Circom + +# Circom Groth16 BN256 Script + +The proof contained here is generated using the steps from [snarkjs repository](https://github.com/iden3/snarkjs) guide. + +The example uses the following dependencies versions: + +- Node version `v22.16.0` +- Circom version `2.2.2` +- Snarkjs version `0.7.5` + +You can find how to install all dependencies in the snarkjs repository. + +## Powers Of Tau Setup + +You can run the following command from the repository root to create the setup: + +```bash +make generate_circom_groth16_bn256_setup +``` + +## Generate the Circuit + +You can modify `circuit.circom` and `input.json` files to create your own circuit and input. + +## Generate the Proof + +You can run the following command from the repository root to generate the proof: + +```bash +make generate_circom_groth16_bn256_proof +``` + +This will generate the following files `proof.json`, `public.json`, and `verification_key.json` that can be sent to Aligned. + +## Send the Proof to Aligned + +You can run the following command from the repository root to send the proof to Aligned: + +```bash +make batcher_send_circom_groth16_bn256_task +``` \ No newline at end of file diff --git a/scripts/test_files/circom_groth16_bn256_no_pub_input_script/circuit.circom b/scripts/test_files/circom_groth16_bn256_no_pub_input_script/circuit.circom new file mode 100644 index 0000000000..1551142777 --- /dev/null +++ b/scripts/test_files/circom_groth16_bn256_no_pub_input_script/circuit.circom @@ -0,0 +1,15 @@ +pragma circom 2.0.0; + +template Multiplier(n) { + signal input a; + signal input b; + + signal int[n]; + + int[0] <== a*a + b; + for (var i=1; i Date: Fri, 29 Aug 2025 18:02:33 -0300 Subject: [PATCH 09/10] fix: docker no pub input circom target --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8b46e91a54..1d08238cc0 100644 --- a/Makefile +++ b/Makefile @@ -1182,7 +1182,7 @@ docker_batcher_send_circom_groth16_bn256_burst: --rpc_url $(DOCKER_RPC_URL) \ --max_fee 0.1ether -docker_batcher_send_circom_groth16_bn256_burst: +docker_batcher_send_circom_groth16_bn256_no_pub_input_burst: @echo "Sending Circom Groth16 BN256 task to Batcher..." docker exec $(shell docker ps | grep batcher | awk '{print $$1}') aligned submit \ --private_key $(DOCKER_PROOFS_PRIVATE_KEY) \ From 22f504938280d296bd3e1e8edab10ba7f6fc9265 Mon Sep 17 00:00:00 2001 From: Marcos Nicolau Date: Sat, 30 Aug 2025 14:12:11 -0300 Subject: [PATCH 10/10] chore: update docker sent proofs --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1d08238cc0..e01cdd1569 100644 --- a/Makefile +++ b/Makefile @@ -1241,7 +1241,7 @@ docker_verify_proofs_onchain: ' DOCKER_PROOFS_WAIT_TIME=60 -DOCKER_SENT_PROOFS=6 +DOCKER_SENT_PROOFS=7 docker_verify_proof_submission_success: @echo "Verifying proofs were successfully submitted..."