-
Notifications
You must be signed in to change notification settings - Fork 426
/
Copy pathapi.go
45 lines (37 loc) · 1.31 KB
/
api.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package gkr
import (
"github.com/consensys/gnark/constraint"
"github.com/consensys/gnark/internal/utils"
)
func frontendVarToInt(a constraint.GkrVariable) int {
return int(a)
}
func (api *API) NamedGate(gate GateName, in ...constraint.GkrVariable) constraint.GkrVariable {
api.toStore.Circuit = append(api.toStore.Circuit, constraint.GkrWire{
Gate: string(gate),
Inputs: utils.Map(in, frontendVarToInt),
})
api.assignments = append(api.assignments, nil)
return constraint.GkrVariable(len(api.toStore.Circuit) - 1)
}
func (api *API) namedGate2PlusIn(gate GateName, in1, in2 constraint.GkrVariable, in ...constraint.GkrVariable) constraint.GkrVariable {
inCombined := make([]constraint.GkrVariable, 2+len(in))
inCombined[0] = in1
inCombined[1] = in2
for i := range in {
inCombined[i+2] = in[i]
}
return api.NamedGate(gate, inCombined...)
}
func (api *API) Add(i1, i2 constraint.GkrVariable) constraint.GkrVariable {
return api.namedGate2PlusIn(Add2, i1, i2)
}
func (api *API) Neg(i1 constraint.GkrVariable) constraint.GkrVariable {
return api.NamedGate("neg", i1)
}
func (api *API) Sub(i1, i2 constraint.GkrVariable) constraint.GkrVariable {
return api.namedGate2PlusIn(Sub2, i1, i2)
}
func (api *API) Mul(i1, i2 constraint.GkrVariable) constraint.GkrVariable {
return api.namedGate2PlusIn(Mul2, i1, i2)
}