@@ -11,42 +11,20 @@ use crate::stacked::{EncodingProof as VanillaEncodingProof, PublicParams};
11
11
#[ derive( Debug , Clone ) ]
12
12
pub struct EncodingProof {
13
13
node : Option < u64 > ,
14
- encoded_node : Option < Fr > ,
15
- // The inner `Option` is for the circuit, the outer to determine if
16
- // if we need to encode sth.
17
- #[ allow( clippy:: option_option) ]
18
- decoded_node : Option < Option < Fr > > ,
19
14
parents : Vec < Option < Fr > > ,
20
15
}
21
16
22
17
impl EncodingProof {
23
18
/// Create an empty proof, used in `blank_circuit`s.
24
- pub fn empty < H : Hasher > ( params : & PublicParams < H > ) -> Self {
25
- EncodingProof {
26
- node : None ,
27
- encoded_node : None ,
28
- decoded_node : None ,
29
- parents : vec ! [ None ; params. graph. degree( ) ] ,
30
- }
31
- }
32
-
33
- /// Create an empty proof, used in `blank_circuit`s.
34
- pub fn empty_base < H : Hasher > ( params : & PublicParams < H > ) -> Self {
35
- EncodingProof {
36
- node : None ,
37
- encoded_node : None ,
38
- decoded_node : None ,
39
- parents : vec ! [ None ; params. graph. base_graph( ) . degree( ) ] ,
40
- }
41
- }
42
-
43
- /// Create an empty proof, used in `blank_circuit`s.
44
- pub fn empty_with_decoded < H : Hasher > ( params : & PublicParams < H > ) -> Self {
19
+ pub fn empty < H : Hasher > ( params : & PublicParams < H > , layer : usize ) -> Self {
20
+ let degree = if layer == 1 {
21
+ params. graph . base_graph ( ) . degree ( )
22
+ } else {
23
+ params. graph . degree ( )
24
+ } ;
45
25
EncodingProof {
46
26
node : None ,
47
- encoded_node : None ,
48
- decoded_node : Some ( None ) ,
49
- parents : vec ! [ None ; params. graph. degree( ) ] ,
27
+ parents : vec ! [ None ; degree] ,
50
28
}
51
29
}
52
30
@@ -91,18 +69,38 @@ impl EncodingProof {
91
69
)
92
70
}
93
71
94
- pub fn synthesize < CS : ConstraintSystem < Bls12 > > (
72
+ pub fn synthesize_key < CS : ConstraintSystem < Bls12 > > (
95
73
self ,
96
74
mut cs : CS ,
97
75
params : & <Bls12 as JubjubEngine >:: Params ,
98
76
replica_id : & [ Boolean ] ,
77
+ exp_encoded_node : & num:: AllocatedNum < Bls12 > ,
99
78
) -> Result < ( ) , SynthesisError > {
100
- let EncodingProof {
79
+ let EncodingProof { node, parents } = self ;
80
+
81
+ let key = Self :: create_key (
82
+ cs. namespace ( || "create_key" ) ,
83
+ params,
84
+ replica_id,
101
85
node,
102
86
parents,
103
- encoded_node,
104
- decoded_node,
105
- } = self ;
87
+ ) ?;
88
+
89
+ // enforce equality
90
+ constraint:: equal ( & mut cs, || "equality_key" , & exp_encoded_node, & key) ;
91
+
92
+ Ok ( ( ) )
93
+ }
94
+
95
+ pub fn synthesize_decoded < CS : ConstraintSystem < Bls12 > > (
96
+ self ,
97
+ mut cs : CS ,
98
+ params : & <Bls12 as JubjubEngine >:: Params ,
99
+ replica_id : & [ Boolean ] ,
100
+ exp_encoded_node : & num:: AllocatedNum < Bls12 > ,
101
+ decoded_node : & num:: AllocatedNum < Bls12 > ,
102
+ ) -> Result < ( ) , SynthesisError > {
103
+ let EncodingProof { node, parents } = self ;
106
104
107
105
let key = Self :: create_key (
108
106
cs. namespace ( || "create_key" ) ,
@@ -112,44 +110,26 @@ impl EncodingProof {
112
110
parents,
113
111
) ?;
114
112
115
- let encoded_node = num:: AllocatedNum :: alloc ( cs. namespace ( || "encoded_num" ) , || {
116
- encoded_node
117
- . map ( Into :: into)
118
- . ok_or_else ( || SynthesisError :: AssignmentMissing )
119
- } ) ?;
120
-
121
- let encoded_node_new = if let Some ( decoded_node) = decoded_node {
122
- let decoded_num = num:: AllocatedNum :: alloc ( cs. namespace ( || "decoded_num" ) , || {
123
- decoded_node
124
- . map ( Into :: into)
125
- . ok_or_else ( || SynthesisError :: AssignmentMissing )
126
- } ) ?;
127
- encode ( cs. namespace ( || "encode" ) , & key, & decoded_num) ?
128
- } else {
129
- key
130
- } ;
113
+ let encoded_node = encode ( cs. namespace ( || "encode" ) , & key, decoded_node) ?;
131
114
132
115
// enforce equality
133
- constraint:: equal ( & mut cs, || "equality" , & encoded_node_new, & encoded_node) ;
116
+ constraint:: equal (
117
+ & mut cs,
118
+ || "equality_encoded_node" ,
119
+ & exp_encoded_node,
120
+ & encoded_node,
121
+ ) ;
134
122
135
123
Ok ( ( ) )
136
124
}
137
125
}
138
126
139
127
impl < H : Hasher > From < VanillaEncodingProof < H > > for EncodingProof {
140
128
fn from ( vanilla_proof : VanillaEncodingProof < H > ) -> Self {
141
- let VanillaEncodingProof {
142
- parents,
143
- decoded_node,
144
- encoded_node,
145
- node,
146
- ..
147
- } = vanilla_proof;
129
+ let VanillaEncodingProof { parents, node, .. } = vanilla_proof;
148
130
149
131
EncodingProof {
150
132
node : Some ( node) ,
151
- encoded_node : Some ( encoded_node. into_fr ( ) ) ,
152
- decoded_node : decoded_node. map ( |n| Some ( n. into_fr ( ) ) ) ,
153
133
parents : parents. into_iter ( ) . map ( |p| Some ( p. into ( ) ) ) . collect ( ) ,
154
134
}
155
135
}
0 commit comments