gnark-plonky2-verifier/plonky2_verifier/constant_gate.go
plonky2_verifier/constant_gate.goRaw
1package plonky2_verifier
2
3import (
4 "fmt"
5 . "gnark-plonky2-verifier/field"
6)
7
8type ConstantGate struct {
9 numConsts uint64
10}
11
12func NewConstantGate(numConsts uint64) *ConstantGate {
13 return &ConstantGate{
14 numConsts: numConsts,
15 }
16}
17
18func (g *ConstantGate) Id() string {
19 return fmt.Sprintf("ConstantGate { num_consts: %d }", g.numConsts)
20}
21
22func (g *ConstantGate) ConstInput(i uint64) uint64 {
23 if i > g.numConsts {
24 panic("Invalid constant index")
25 }
26 return i
27}
28
29func (g *ConstantGate) WireOutput(i uint64) uint64 {
30 if i > g.numConsts {
31 panic("Invalid wire index")
32 }
33 return i
34}
35
36func (g *ConstantGate) EvalUnfiltered(p *PlonkChip, vars EvaluationVars) []QuadraticExtension {
37 constraints := []QuadraticExtension{}
38
39 for i := uint64(0); i < g.numConsts; i++ {
40 constraints = append(constraints, p.qeAPI.SubExtension(vars.localConstants[g.ConstInput(i)], vars.localWires[g.WireOutput(i)]))
41 }
42
43 return constraints
44}