arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
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}