Documentation
¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type MultiLin ¶
func (MultiLin) Evaluate ¶
Evaluate assumes len(m) = 1 << len(at) it doesn't modify m
Example ¶
package main import ( "fmt" "github.com/consensys/gnark-crypto/ecc" "github.com/consensys/gnark/frontend" "github.com/consensys/gnark/frontend/cs/r1cs" "github.com/consensys/gnark/frontend/cs/scs" "github.com/consensys/gnark/std/polynomial" ) type evalMultiLinCircuit struct { M []frontend.Variable `gnark:",public"` At []frontend.Variable `gnark:",secret"` Evaluation frontend.Variable `gnark:",secret"` } func (c *evalMultiLinCircuit) Define(api frontend.API) error { m := polynomial.MultiLin(c.M) evaluation := m.Evaluate(api, c.At) api.AssertIsEqual(evaluation, c.Evaluation) return nil } func main() { const logSize = 20 const size = 1 << logSize m := polynomial.MultiLin(make([]frontend.Variable, size)) e := polynomial.MultiLin(make([]frontend.Variable, logSize)) cs, err := frontend.Compile(ecc.BN254.ScalarField(), r1cs.NewBuilder, &evalMultiLinCircuit{M: m, At: e, Evaluation: 0}) if err != nil { panic(err) } fmt.Println("r1cs size:", cs.GetNbConstraints()) cs, err = frontend.Compile(ecc.BN254.ScalarField(), scs.NewBuilder, &evalMultiLinCircuit{M: m, At: e, Evaluation: 0}) if err != nil { panic(err) } fmt.Println("scs size:", cs.GetNbConstraints()) }
Output: r1cs size: 1048627 scs size: 2097226
Click to show internal directories.
Click to hide internal directories.