Skip to content

Commit 9792556

Browse files
committed
Added events, added event handling in hardhat and moved gas estimation from solidity to hardhat #86
1 parent aa908fa commit 9792556

File tree

7 files changed

+95
-50
lines changed

7 files changed

+95
-50
lines changed

contracts/interfaces/modular_verifier.sol

+37-2
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,51 @@
1616
//---------------------------------------------------------------------------//
1717
pragma solidity ^0.8.0;
1818

19+
/**
20+
* @dev Interface class to verify Placeholder proof
21+
*/
1922
interface IModularVerifier {
23+
24+
/**
25+
* @dev Emitted when public input is wrong
26+
*/
27+
event WrongPublicInput();
28+
29+
/**
30+
* @dev Emitted when commitment is wrong
31+
*/
32+
event WrongCommitment();
33+
34+
/**
35+
* @dev Emitted when table does not satisfy constraint system
36+
*/
37+
event ConstraintSystemNotSatisfied();
38+
39+
/**
40+
* @dev Emitted when proof is verified
41+
*/
42+
event ProofVerified();
43+
44+
/**
45+
* @dev Emitted when proof verification failed
46+
*/
47+
event ProofVerificationFailed();
48+
49+
50+
/**
51+
* @dev Initializes verifier
52+
*/
2053
function initialize(
21-
// address permutation_argument_contract_address,
2254
address lookup_argument_contract_address,
2355
address gate_argument_contract_address,
2456
address commitment_contract_address
2557
) external;
2658

59+
/**
60+
* @dev Verifies proof
61+
*/
2762
function verify(
2863
bytes calldata blob,
2964
uint256[] calldata public_input
30-
) external view returns (bool result);
65+
) external returns (bool result);
3166
}

contracts/zkllvm/circuit1/modular_verifier.sol

+9-9
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ contract modular_verifier_circuit1 is IModularVerifier{
7676
uint256 Z_at_xi;
7777
uint256 l0;
7878
uint256[f_parts] F;
79-
uint256 gas;
8079
bool b;
8180
}
8281

@@ -124,10 +123,9 @@ contract modular_verifier_circuit1 is IModularVerifier{
124123
function verify(
125124
bytes calldata blob,
126125
uint256[] calldata public_input
127-
) public view returns (bool result) {
126+
) public returns (bool result) {
128127
verifier_state memory state;
129128
state.b = true;
130-
state.gas = gasleft();
131129
state.xi = basic_marshalling.get_uint256_be(blob, 0x79);
132130
state.Z_at_xi = addmod(field.pow_small(state.xi, rows_amount, modulus), modulus-1, modulus);
133131
state.l0 = mulmod(
@@ -139,7 +137,7 @@ contract modular_verifier_circuit1 is IModularVerifier{
139137
//0. Direct public input check
140138
if(public_input.length > 0) {
141139
if (!public_input_direct(blob[865:865+320], public_input, state)) {
142-
console.log("Wrong public input!");
140+
emit WrongPublicInput();
143141
state.b = false;
144142
}
145143
}
@@ -198,7 +196,6 @@ contract modular_verifier_circuit1 is IModularVerifier{
198196
F_consolidated = addmod(F_consolidated, mulmod(state.F[i],transcript.get_field_challenge(tr_state, modulus), modulus), modulus);
199197
unchecked{i++;}
200198
}
201-
uint256 points_num = basic_marshalling.get_length(blob, 0x79 + 0x20);
202199
transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59);
203200
}
204201

@@ -214,7 +211,7 @@ contract modular_verifier_circuit1 is IModularVerifier{
214211
if(!modular_commitment_scheme_circuit1.verify_eval(
215212
blob[z_offset - 0x8:], commitments, state.xi, tr_state.current_challenge
216213
)) {
217-
console.log("Error from commitment scheme!");
214+
emit WrongCommitment();
218215
state.b = false;
219216
}
220217
}
@@ -233,13 +230,16 @@ contract modular_verifier_circuit1 is IModularVerifier{
233230
unchecked{i++;}
234231
}
235232
if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) {
236-
console.log("Error. Table does't satisfy constraint system");
233+
emit ConstraintSystemNotSatisfied();
237234
state.b = false;
238235
}
239-
if(state.b) console.log("SUCCESS!"); else console.log("FAILURE!");
236+
if(state.b) {
237+
emit ProofVerified();
238+
} else {
239+
emit ProofVerificationFailed();
240+
}
240241
}
241242

242-
console.log("Gas for verification:", state.gas-gasleft());
243243
result = state.b;
244244
}
245245
}

contracts/zkllvm/circuit2/modular_verifier.sol

+9-9
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ contract modular_verifier_circuit2 is IModularVerifier{
7676
uint256 Z_at_xi;
7777
uint256 l0;
7878
uint256[f_parts] F;
79-
uint256 gas;
8079
bool b;
8180
}
8281

@@ -124,10 +123,9 @@ contract modular_verifier_circuit2 is IModularVerifier{
124123
function verify(
125124
bytes calldata blob,
126125
uint256[] calldata public_input
127-
) public view returns (bool result) {
126+
) public returns (bool result) {
128127
verifier_state memory state;
129128
state.b = true;
130-
state.gas = gasleft();
131129
state.xi = basic_marshalling.get_uint256_be(blob, 0x79);
132130
state.Z_at_xi = addmod(field.pow_small(state.xi, rows_amount, modulus), modulus-1, modulus);
133131
state.l0 = mulmod(
@@ -139,7 +137,7 @@ contract modular_verifier_circuit2 is IModularVerifier{
139137
//0. Direct public input check
140138
if(public_input.length > 0) {
141139
if (!public_input_direct(blob[865:865+352], public_input, state)) {
142-
console.log("Wrong public input!");
140+
emit WrongPublicInput();
143141
state.b = false;
144142
}
145143
}
@@ -198,7 +196,6 @@ contract modular_verifier_circuit2 is IModularVerifier{
198196
F_consolidated = addmod(F_consolidated, mulmod(state.F[i],transcript.get_field_challenge(tr_state, modulus), modulus), modulus);
199197
unchecked{i++;}
200198
}
201-
uint256 points_num = basic_marshalling.get_length(blob, 0x79 + 0x20);
202199
transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59);
203200
}
204201

@@ -214,7 +211,7 @@ contract modular_verifier_circuit2 is IModularVerifier{
214211
if(!modular_commitment_scheme_circuit2.verify_eval(
215212
blob[z_offset - 0x8:], commitments, state.xi, tr_state.current_challenge
216213
)) {
217-
console.log("Error from commitment scheme!");
214+
emit WrongCommitment();
218215
state.b = false;
219216
}
220217
}
@@ -233,13 +230,16 @@ contract modular_verifier_circuit2 is IModularVerifier{
233230
unchecked{i++;}
234231
}
235232
if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) {
236-
console.log("Error. Table does't satisfy constraint system");
233+
emit ConstraintSystemNotSatisfied();
237234
state.b = false;
238235
}
239-
if(state.b) console.log("SUCCESS!"); else console.log("FAILURE!");
236+
if(state.b) {
237+
emit ProofVerified();
238+
} else {
239+
emit ProofVerificationFailed();
240+
}
240241
}
241242

242-
console.log("Gas for verification:", state.gas-gasleft());
243243
result = state.b;
244244
}
245245
}

contracts/zkllvm/circuit3/modular_verifier.sol

+9-9
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ contract modular_verifier_circuit3 is IModularVerifier{
7676
uint256 Z_at_xi;
7777
uint256 l0;
7878
uint256[f_parts] F;
79-
uint256 gas;
8079
bool b;
8180
}
8281

@@ -124,10 +123,9 @@ contract modular_verifier_circuit3 is IModularVerifier{
124123
function verify(
125124
bytes calldata blob,
126125
uint256[] calldata public_input
127-
) public view returns (bool result) {
126+
) public returns (bool result) {
128127
verifier_state memory state;
129128
state.b = true;
130-
state.gas = gasleft();
131129
state.xi = basic_marshalling.get_uint256_be(blob, 0xa1);
132130
state.Z_at_xi = addmod(field.pow_small(state.xi, rows_amount, modulus), modulus-1, modulus);
133131
state.l0 = mulmod(
@@ -139,7 +137,7 @@ contract modular_verifier_circuit3 is IModularVerifier{
139137
//0. Direct public input check
140138
if(public_input.length > 0) {
141139
if (!public_input_direct(blob[905:905+672], public_input, state)) {
142-
console.log("Wrong public input!");
140+
emit WrongPublicInput();
143141
state.b = false;
144142
}
145143
}
@@ -216,7 +214,6 @@ contract modular_verifier_circuit3 is IModularVerifier{
216214
F_consolidated = addmod(F_consolidated, mulmod(state.F[i],transcript.get_field_challenge(tr_state, modulus), modulus), modulus);
217215
unchecked{i++;}
218216
}
219-
uint256 points_num = basic_marshalling.get_length(blob, 0xa1 + 0x20);
220217
transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59);
221218
}
222219

@@ -232,7 +229,7 @@ contract modular_verifier_circuit3 is IModularVerifier{
232229
if(!modular_commitment_scheme_circuit3.verify_eval(
233230
blob[z_offset - 0x8:], commitments, state.xi, tr_state.current_challenge
234231
)) {
235-
console.log("Error from commitment scheme!");
232+
emit WrongCommitment();
236233
state.b = false;
237234
}
238235
}
@@ -251,13 +248,16 @@ contract modular_verifier_circuit3 is IModularVerifier{
251248
unchecked{i++;}
252249
}
253250
if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) {
254-
console.log("Error. Table does't satisfy constraint system");
251+
emit ConstraintSystemNotSatisfied();
255252
state.b = false;
256253
}
257-
if(state.b) console.log("SUCCESS!"); else console.log("FAILURE!");
254+
if(state.b) {
255+
emit ProofVerified();
256+
} else {
257+
emit ProofVerificationFailed();
258+
}
258259
}
259260

260-
console.log("Gas for verification:", state.gas-gasleft());
261261
result = state.b;
262262
}
263263
}

contracts/zkllvm/circuit4/modular_verifier.sol

+9-9
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ contract modular_verifier_circuit4 is IModularVerifier{
7676
uint256 Z_at_xi;
7777
uint256 l0;
7878
uint256[f_parts] F;
79-
uint256 gas;
8079
bool b;
8180
}
8281

@@ -124,10 +123,9 @@ contract modular_verifier_circuit4 is IModularVerifier{
124123
function verify(
125124
bytes calldata blob,
126125
uint256[] calldata public_input
127-
) public view returns (bool result) {
126+
) public returns (bool result) {
128127
verifier_state memory state;
129128
state.b = true;
130-
state.gas = gasleft();
131129
state.xi = basic_marshalling.get_uint256_be(blob, 0xa1);
132130
state.Z_at_xi = addmod(field.pow_small(state.xi, rows_amount, modulus), modulus-1, modulus);
133131
state.l0 = mulmod(
@@ -139,7 +137,7 @@ contract modular_verifier_circuit4 is IModularVerifier{
139137
//0. Direct public input check
140138
if(public_input.length > 0) {
141139
if (!public_input_direct(blob[905:905+736], public_input, state)) {
142-
console.log("Wrong public input!");
140+
emit WrongPublicInput();
143141
state.b = false;
144142
}
145143
}
@@ -216,7 +214,6 @@ contract modular_verifier_circuit4 is IModularVerifier{
216214
F_consolidated = addmod(F_consolidated, mulmod(state.F[i],transcript.get_field_challenge(tr_state, modulus), modulus), modulus);
217215
unchecked{i++;}
218216
}
219-
uint256 points_num = basic_marshalling.get_length(blob, 0xa1 + 0x20);
220217
transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59);
221218
}
222219

@@ -232,7 +229,7 @@ contract modular_verifier_circuit4 is IModularVerifier{
232229
if(!modular_commitment_scheme_circuit4.verify_eval(
233230
blob[z_offset - 0x8:], commitments, state.xi, tr_state.current_challenge
234231
)) {
235-
console.log("Error from commitment scheme!");
232+
emit WrongCommitment();
236233
state.b = false;
237234
}
238235
}
@@ -251,13 +248,16 @@ contract modular_verifier_circuit4 is IModularVerifier{
251248
unchecked{i++;}
252249
}
253250
if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) {
254-
console.log("Error. Table does't satisfy constraint system");
251+
emit ConstraintSystemNotSatisfied();
255252
state.b = false;
256253
}
257-
if(state.b) console.log("SUCCESS!"); else console.log("FAILURE!");
254+
if(state.b) {
255+
emit ProofVerified();
256+
} else {
257+
emit ProofVerificationFailed();
258+
}
258259
}
259260

260-
console.log("Gas for verification:", state.gas-gasleft());
261261
result = state.b;
262262
}
263263
}

contracts/zkllvm/circuit6/modular_verifier.sol

+9-9
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ contract modular_verifier_circuit6 is IModularVerifier{
7676
uint256 Z_at_xi;
7777
uint256 l0;
7878
uint256[f_parts] F;
79-
uint256 gas;
8079
bool b;
8180
}
8281

@@ -124,10 +123,9 @@ contract modular_verifier_circuit6 is IModularVerifier{
124123
function verify(
125124
bytes calldata blob,
126125
uint256[] calldata public_input
127-
) public view returns (bool result) {
126+
) public returns (bool result) {
128127
verifier_state memory state;
129128
state.b = true;
130-
state.gas = gasleft();
131129
state.xi = basic_marshalling.get_uint256_be(blob, 0xa1);
132130
state.Z_at_xi = addmod(field.pow_small(state.xi, rows_amount, modulus), modulus-1, modulus);
133131
state.l0 = mulmod(
@@ -139,7 +137,7 @@ contract modular_verifier_circuit6 is IModularVerifier{
139137
//0. Direct public input check
140138
if(public_input.length > 0) {
141139
if (!public_input_direct(blob[905:905+736], public_input, state)) {
142-
console.log("Wrong public input!");
140+
emit WrongPublicInput();
143141
state.b = false;
144142
}
145143
}
@@ -216,7 +214,6 @@ contract modular_verifier_circuit6 is IModularVerifier{
216214
F_consolidated = addmod(F_consolidated, mulmod(state.F[i],transcript.get_field_challenge(tr_state, modulus), modulus), modulus);
217215
unchecked{i++;}
218216
}
219-
uint256 points_num = basic_marshalling.get_length(blob, 0xa1 + 0x20);
220217
transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59);
221218
}
222219

@@ -232,7 +229,7 @@ contract modular_verifier_circuit6 is IModularVerifier{
232229
if(!modular_commitment_scheme_circuit6.verify_eval(
233230
blob[z_offset - 0x8:], commitments, state.xi, tr_state.current_challenge
234231
)) {
235-
console.log("Error from commitment scheme!");
232+
emit WrongCommitment();
236233
state.b = false;
237234
}
238235
}
@@ -251,13 +248,16 @@ contract modular_verifier_circuit6 is IModularVerifier{
251248
unchecked{i++;}
252249
}
253250
if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) {
254-
console.log("Error. Table does't satisfy constraint system");
251+
emit ConstraintSystemNotSatisfied();
255252
state.b = false;
256253
}
257-
if(state.b) console.log("SUCCESS!"); else console.log("FAILURE!");
254+
if(state.b) {
255+
emit ProofVerified();
256+
} else {
257+
emit ProofVerificationFailed();
258+
}
258259
}
259260

260-
console.log("Gas for verification:", state.gas-gasleft());
261261
result = state.b;
262262
}
263263
}

0 commit comments

Comments
 (0)