From f3be700dcff761fe9d9b2be093e9b9846f90af33 Mon Sep 17 00:00:00 2001 From: Giuseppe <8973725+Eagle941@users.noreply.github.com> Date: Wed, 21 Jun 2023 17:37:33 +0100 Subject: [PATCH] Added field in code extractor --- extractor/extractor.go | 4 +++- extractor/extractor_test.go | 5 +++-- extractor/lean_export.go | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/extractor/extractor.go b/extractor/extractor.go index 3d6b05f..c8d79c1 100644 --- a/extractor/extractor.go +++ b/extractor/extractor.go @@ -6,6 +6,7 @@ import ( "math/big" "reflect" + "github.com/consensys/gnark-crypto/ecc" "github.com/consensys/gnark/backend/hint" "github.com/consensys/gnark/frontend" ) @@ -129,6 +130,7 @@ type ExCircuit struct { type CodeExtractor struct { Code []App Gadgets []ExGadget + Field ecc.ID } func operandFromArray(arg []frontend.Variable) Operand { @@ -194,7 +196,7 @@ func (ce *CodeExtractor) Inverse(i1 frontend.Variable) frontend.Variable { } func (ce *CodeExtractor) ToBinary(i1 frontend.Variable, n ...int) []frontend.Variable { - nbBits := 254 // Taken from gnark lib + nbBits := ce.Field.ScalarField().BitLen() if len(n) == 1 { nbBits = n[0] if nbBits < 0 { diff --git a/extractor/extractor_test.go b/extractor/extractor_test.go index f122d2a..cf3744f 100644 --- a/extractor/extractor_test.go +++ b/extractor/extractor_test.go @@ -5,6 +5,7 @@ import ( "gnark-extractor/abstractor" "testing" + "github.com/consensys/gnark-crypto/ecc" "github.com/consensys/gnark/frontend" ) @@ -47,7 +48,7 @@ func (circuit MerkleRecover) Define(api frontend.API) error { func TestMerkleRecover(t *testing.T) { assignment := MerkleRecover{} - err := CircuitToLean(&assignment) + err := CircuitToLean(&assignment, ecc.BW6_756) if err != nil { fmt.Println("CircuitToLean error!") fmt.Println(err.Error()) @@ -89,7 +90,7 @@ func (circuit TwoGadgets) Define(api frontend.API) error { func TestTwoGadgets(t *testing.T) { assignment := TwoGadgets{} - err := CircuitToLean(&assignment) + err := CircuitToLean(&assignment, ecc.BN254) if err != nil { fmt.Println("CircuitToLean error!") fmt.Println(err.Error()) diff --git a/extractor/lean_export.go b/extractor/lean_export.go index 29e4dac..b563a15 100644 --- a/extractor/lean_export.go +++ b/extractor/lean_export.go @@ -6,6 +6,7 @@ import ( "reflect" "strings" + "github.com/consensys/gnark-crypto/ecc" "github.com/consensys/gnark/frontend" ) @@ -30,10 +31,11 @@ func ExportCircuit(circuit ExCircuit) string { return fmt.Sprintf("%s\n\n%s", strings.Join(gadgets, "\n\n"), circ) } -func CircuitToLean(circuit abstractor.Circuit) error { +func CircuitToLean(circuit abstractor.Circuit, field ecc.ID) error { api := CodeExtractor{ Code: []App{}, Gadgets: []ExGadget{}, + Field: field, } err := circuit.AbsDefine(&api) if err != nil {