gnark-plonky2-verifier/types/common_data.go
types/common_data.goRaw
1package types
2
3import (
4 "encoding/json"
5 "io"
6 "os"
7
8 "github.com/succinctlabs/gnark-plonky2-verifier/plonk/gates"
9)
10
11type CommonCircuitDataRaw struct {
12 Config struct {
13 NumWires uint64 `json:"num_wires"`
14 NumRoutedWires uint64 `json:"num_routed_wires"`
15 NumConstants uint64 `json:"num_constants"`
16 UseBaseArithmeticGate bool `json:"use_base_arithmetic_gate"`
17 SecurityBits uint64 `json:"security_bits"`
18 NumChallenges uint64 `json:"num_challenges"`
19 ZeroKnowledge bool `json:"zero_knowledge"`
20 MaxQuotientDegreeFactor uint64 `json:"max_quotient_degree_factor"`
21 FriConfig struct {
22 RateBits uint64 `json:"rate_bits"`
23 CapHeight uint64 `json:"cap_height"`
24 ProofOfWorkBits uint64 `json:"proof_of_work_bits"`
25 ReductionStrategy struct {
26 ConstantArityBits []uint64 `json:"ConstantArityBits"`
27 } `json:"reduction_strategy"`
28 NumQueryRounds uint64 `json:"num_query_rounds"`
29 } `json:"fri_config"`
30 } `json:"config"`
31 FriParams struct {
32 Config struct {
33 RateBits uint64 `json:"rate_bits"`
34 CapHeight uint64 `json:"cap_height"`
35 ProofOfWorkBits uint64 `json:"proof_of_work_bits"`
36 ReductionStrategy struct {
37 ConstantArityBits []uint64 `json:"ConstantArityBits"`
38 } `json:"reduction_strategy"`
39 NumQueryRounds uint64 `json:"num_query_rounds"`
40 } `json:"config"`
41 Hiding bool `json:"hiding"`
42 DegreeBits uint64 `json:"degree_bits"`
43 ReductionArityBits []uint64 `json:"reduction_arity_bits"`
44 } `json:"fri_params"`
45 Gates []string `json:"gates"`
46 SelectorsInfo struct {
47 SelectorIndices []uint64 `json:"selector_indices"`
48 Groups []struct {
49 Start uint64 `json:"start"`
50 End uint64 `json:"end"`
51 } `json:"groups"`
52 } `json:"selectors_info"`
53 QuotientDegreeFactor uint64 `json:"quotient_degree_factor"`
54 NumGateConstraints uint64 `json:"num_gate_constraints"`
55 NumConstants uint64 `json:"num_constants"`
56 NumPublicInputs uint64 `json:"num_public_inputs"`
57 KIs []uint64 `json:"k_is"`
58 NumPartialProducts uint64 `json:"num_partial_products"`
59}
60
61func ReadCommonCircuitData(path string) CommonCircuitData {
62 jsonFile, err := os.Open(path)
63 if err != nil {
64 panic(err)
65 }
66
67 defer jsonFile.Close()
68 rawBytes, _ := io.ReadAll(jsonFile)
69
70 var raw CommonCircuitDataRaw
71 err = json.Unmarshal(rawBytes, &raw)
72 if err != nil {
73 panic(err)
74 }
75
76 var commonCircuitData CommonCircuitData
77 commonCircuitData.Config.NumWires = raw.Config.NumWires
78 commonCircuitData.Config.NumRoutedWires = raw.Config.NumRoutedWires
79 commonCircuitData.Config.NumConstants = raw.Config.NumConstants
80 commonCircuitData.Config.UseBaseArithmeticGate = raw.Config.UseBaseArithmeticGate
81 commonCircuitData.Config.SecurityBits = raw.Config.SecurityBits
82 commonCircuitData.Config.NumChallenges = raw.Config.NumChallenges
83 commonCircuitData.Config.ZeroKnowledge = raw.Config.ZeroKnowledge
84 commonCircuitData.Config.MaxQuotientDegreeFactor = raw.Config.MaxQuotientDegreeFactor
85
86 commonCircuitData.Config.FriConfig.RateBits = raw.Config.FriConfig.RateBits
87 commonCircuitData.Config.FriConfig.CapHeight = raw.Config.FriConfig.CapHeight
88 commonCircuitData.Config.FriConfig.ProofOfWorkBits = raw.Config.FriConfig.ProofOfWorkBits
89 commonCircuitData.Config.FriConfig.NumQueryRounds = raw.Config.FriConfig.NumQueryRounds
90
91 commonCircuitData.FriParams.DegreeBits = raw.FriParams.DegreeBits
92 commonCircuitData.DegreeBits = raw.FriParams.DegreeBits
93 commonCircuitData.FriParams.Config.RateBits = raw.FriParams.Config.RateBits
94 commonCircuitData.FriParams.Config.CapHeight = raw.FriParams.Config.CapHeight
95 commonCircuitData.FriParams.Config.ProofOfWorkBits = raw.FriParams.Config.ProofOfWorkBits
96 commonCircuitData.FriParams.Config.NumQueryRounds = raw.FriParams.Config.NumQueryRounds
97 commonCircuitData.FriParams.ReductionArityBits = raw.FriParams.ReductionArityBits
98
99 commonCircuitData.GateIds = raw.Gates
100
101 selectorGroupStart := []uint64{}
102 selectorGroupEnd := []uint64{}
103 for _, group := range raw.SelectorsInfo.Groups {
104 selectorGroupStart = append(selectorGroupStart, group.Start)
105 selectorGroupEnd = append(selectorGroupEnd, group.End)
106 }
107
108 commonCircuitData.SelectorsInfo = *gates.NewSelectorsInfo(
109 raw.SelectorsInfo.SelectorIndices,
110 selectorGroupStart,
111 selectorGroupEnd,
112 )
113
114 commonCircuitData.QuotientDegreeFactor = raw.QuotientDegreeFactor
115 commonCircuitData.NumGateConstraints = raw.NumGateConstraints
116 commonCircuitData.NumConstants = raw.NumConstants
117 commonCircuitData.NumPublicInputs = raw.NumPublicInputs
118 commonCircuitData.KIs = raw.KIs
119 commonCircuitData.NumPartialProducts = raw.NumPartialProducts
120
121 // Don't support circuits that have hiding enabled
122 if raw.FriParams.Hiding {
123 panic("Circuit has hiding enabled, which is not supported")
124 }
125
126 return commonCircuitData
127}