@@ -82,7 +82,6 @@ contract modular_verifier_$TEST_NAME$ is IModularVerifier{
82
82
address gate_argument_address,
83
83
address commitment_contract_address
84
84
) public{
85
- console.log("Initialize");
86
85
types.transcript_data memory tr_state;
87
86
transcript.init_transcript(tr_state, hex"");
88
87
transcript.update_transcript_b32(tr_state, vk1);
@@ -104,28 +103,77 @@ contract modular_verifier_$TEST_NAME$ is IModularVerifier{
104
103
uint256 Z_at_xi;
105
104
uint256 l0;
106
105
uint256[f_parts] F;
106
+ uint256 gas;
107
+ bool b;
108
+ }
109
+
110
+ // Public input columns
111
+ function public_input_direct(bytes calldata blob, uint256[] calldata public_input, verifier_state memory state) internal view
112
+ returns (bool check){
113
+ check = true;
114
+
115
+ uint256 result = 0;
116
+ uint256 Omega = 1;
117
+
118
+ for(uint256 i = 0; i < public_input.length;){
119
+ if( public_input[i] != 0){
120
+ uint256 L = mulmod(
121
+ Omega,
122
+ field.inverse_static(
123
+ addmod(state.xi, modulus - Omega, modulus),
124
+ modulus
125
+ ),
126
+ modulus
127
+ );
128
+
129
+ result = addmod(
130
+ result,
131
+ mulmod(
132
+ public_input[i], L, modulus
133
+ ),
134
+ modulus
135
+ );
136
+ }
137
+ Omega = mulmod(Omega, omega, modulus);
138
+ unchecked{i++;}
139
+ }
140
+ result = mulmod(
141
+ result, addmod(field.pow_small(state.xi, rows_amount, modulus), modulus - 1, modulus), modulus
142
+ );
143
+ result = mulmod(result, field.inverse_static(rows_amount, modulus), modulus);
144
+
145
+ // Input is proof_map.eval_proof_combined_value_offset
146
+ if( result != basic_marshalling.get_uint256_be(
147
+ blob, $PUBLIC_INPUT_OFFSET$
148
+ )) check = false;
107
149
}
108
150
109
151
function verify(
110
- bytes calldata blob
152
+ bytes calldata blob,
153
+ uint256[] calldata public_input
111
154
) public view{
112
155
verifier_state memory state;
113
- uint256 gas = gasleft();
114
- uint256 xi = basic_marshalling.get_uint256_be(blob, $EVAL_PROOF_OFFSET$);
115
- state.Z_at_xi = addmod(field.pow_small(xi, rows_amount, modulus), modulus-1, modulus);
156
+ state.b = true;
157
+ state.gas = gasleft();
158
+ state.xi = basic_marshalling.get_uint256_be(blob, $EVAL_PROOF_OFFSET$);
159
+ state.Z_at_xi = addmod(field.pow_small(state.xi, rows_amount, modulus), modulus-1, modulus);
116
160
state.l0 = mulmod(
117
161
state.Z_at_xi,
118
- field.inverse_static(mulmod(addmod(xi, modulus - 1, modulus), rows_amount, modulus), modulus),
162
+ field.inverse_static(mulmod(addmod(state. xi, modulus - 1, modulus), rows_amount, modulus), modulus),
119
163
modulus
120
164
);
121
165
122
- //0. Check proof size
123
- // No direct public input
166
+ //0. Direct public input check
167
+ if(public_input.length > 0) {
168
+ if (!public_input_direct(blob[$TABLE_Z_OFFSET$:$TABLE_Z_OFFSET$+$QUOTIENT_OFFSET$], public_input, state)) {
169
+ console.log("Wrong public input!");
170
+ state.b = false;
171
+ }
172
+ }
124
173
125
174
//1. Init transcript
126
175
types.transcript_data memory tr_state;
127
176
tr_state.current_challenge = transcript_state;
128
- // TODO: Just do something with it
129
177
130
178
{
131
179
//2. Push variable_values commitment to transcript
@@ -167,7 +215,6 @@ contract modular_verifier_$TEST_NAME$ is IModularVerifier{
167
215
transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59);
168
216
}
169
217
170
- bool b = true;
171
218
//8. Commitment scheme verify_eval
172
219
{
173
220
// ICommitmentScheme commitment_scheme = ICommitmentScheme(_commitment_contract_address);
@@ -178,10 +225,10 @@ contract modular_verifier_$TEST_NAME$ is IModularVerifier{
178
225
unchecked{i++;}
179
226
}
180
227
if(!modular_commitment_scheme_$TEST_NAME$.verify_eval(
181
- blob[z_offset - 0x8:], commitments, xi, tr_state.current_challenge
228
+ blob[z_offset - 0x8:], commitments, state. xi, tr_state.current_challenge
182
229
)) {
183
230
console.log("Error from commitment scheme!");
184
- b = false;
231
+ state. b = false;
185
232
}
186
233
}
187
234
@@ -200,12 +247,12 @@ contract modular_verifier_$TEST_NAME$ is IModularVerifier{
200
247
}
201
248
if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) {
202
249
console.log("Error. Table does't satisfy constraint system");
203
- b = false;
250
+ state. b = false;
204
251
}
205
- if(b) console.log("SUCCESS!"); else console.log("FAILURE!");
252
+ if(state. b) console.log("SUCCESS!"); else console.log("FAILURE!");
206
253
}
207
254
208
- console.log("Gas for verification:", gas-gasleft());
255
+ console.log("Gas for verification:", state. gas-gasleft());
209
256
}
210
257
}
211
258
)" ;
0 commit comments