Skip to content
This repository was archived by the owner on Feb 17, 2025. It is now read-only.

Commit c17bef5

Browse files
ETatuzovankaskov
authored andcommitted
Direct public input updated#21
1 parent fe5bbb7 commit c17bef5

File tree

3 files changed

+67
-16
lines changed

3 files changed

+67
-16
lines changed

include/nil/blueprint/transpiler/evm_verifier_gen.hpp

+5
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,9 @@ namespace nil {
192192

193193
_permutation_offset = _variable_values_offset;
194194
for( std::size_t i = 0; i < PlaceholderParams::arithmetization_params::witness_columns + PlaceholderParams::arithmetization_params::public_input_columns; i++){
195+
if(i == PlaceholderParams::arithmetization_params::witness_columns){
196+
_public_input_offset = _permutation_offset;
197+
}
195198
_permutation_offset += 0x20 * (_common_data.columns_rotations[i].size());
196199
}
197200

@@ -398,6 +401,7 @@ namespace nil {
398401
reps["$PERMUTATION_SIZE$"] = to_string(_permutation_size);
399402
reps["$SPECIAL_SELECTORS_OFFSET$"] = to_string(_special_selectors_offset);
400403
reps["$TABLE_Z_OFFSET$"] = to_string(_table_z_offset);
404+
reps["$PUBLIC_INPUT_OFFSET$"] = to_string(_public_input_offset);
401405
reps["$PERMUTATION_TABLE_OFFSET$"] = to_string(_permutation_offset);
402406
reps["$QUOTIENT_OFFSET$"] = to_string(_quotient_offset);
403407
reps["$ROWS_AMOUNT$"] = to_string(_common_data.rows_amount);
@@ -435,6 +439,7 @@ namespace nil {
435439
std::size_t _variable_values_offset;
436440
std::size_t _permutation_offset;
437441
std::size_t _quotient_offset;
442+
std::size_t _public_input_offset;
438443
variable_indices_type _var_indices;
439444

440445
std::string _gate_includes;

include/nil/blueprint/transpiler/templates/commitment_scheme.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,6 @@ library modular_commitment_scheme_$TEST_NAME$ {
580580
581581
unchecked{i++;}
582582
}
583-
console.log("EVALUATION PROOF verified");
584583
return true;
585584
}
586585
}

include/nil/blueprint/transpiler/templates/modular_verifier.hpp

+62-15
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ contract modular_verifier_$TEST_NAME$ is IModularVerifier{
8282
address gate_argument_address,
8383
address commitment_contract_address
8484
) public{
85-
console.log("Initialize");
8685
types.transcript_data memory tr_state;
8786
transcript.init_transcript(tr_state, hex"");
8887
transcript.update_transcript_b32(tr_state, vk1);
@@ -104,28 +103,77 @@ contract modular_verifier_$TEST_NAME$ is IModularVerifier{
104103
uint256 Z_at_xi;
105104
uint256 l0;
106105
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;
107149
}
108150
109151
function verify(
110-
bytes calldata blob
152+
bytes calldata blob,
153+
uint256[] calldata public_input
111154
) public view{
112155
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);
116160
state.l0 = mulmod(
117161
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),
119163
modulus
120164
);
121165
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+
}
124173
125174
//1. Init transcript
126175
types.transcript_data memory tr_state;
127176
tr_state.current_challenge = transcript_state;
128-
// TODO: Just do something with it
129177
130178
{
131179
//2. Push variable_values commitment to transcript
@@ -167,7 +215,6 @@ contract modular_verifier_$TEST_NAME$ is IModularVerifier{
167215
transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59);
168216
}
169217
170-
bool b = true;
171218
//8. Commitment scheme verify_eval
172219
{
173220
// ICommitmentScheme commitment_scheme = ICommitmentScheme(_commitment_contract_address);
@@ -178,10 +225,10 @@ contract modular_verifier_$TEST_NAME$ is IModularVerifier{
178225
unchecked{i++;}
179226
}
180227
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
182229
)) {
183230
console.log("Error from commitment scheme!");
184-
b = false;
231+
state.b = false;
185232
}
186233
}
187234
@@ -200,12 +247,12 @@ contract modular_verifier_$TEST_NAME$ is IModularVerifier{
200247
}
201248
if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) {
202249
console.log("Error. Table does't satisfy constraint system");
203-
b = false;
250+
state.b = false;
204251
}
205-
if(b) console.log("SUCCESS!"); else console.log("FAILURE!");
252+
if(state.b) console.log("SUCCESS!"); else console.log("FAILURE!");
206253
}
207254
208-
console.log("Gas for verification:", gas-gasleft());
255+
console.log("Gas for verification:", state.gas-gasleft());
209256
}
210257
}
211258
)";

0 commit comments

Comments
 (0)