add gate count metrics (#238)

* add gate count metrics

* tweak params

* move metrics to its own file
This commit is contained in:
Eduard S. 2025-05-21 12:45:51 +02:00 committed by GitHub
parent de9b206852
commit c3c9e7f99c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 222 additions and 18 deletions

View file

@ -30,6 +30,7 @@ use crate::{
error::Result,
primitives::merkletree::MerkleClaimAndProof,
},
measure_gates_begin, measure_gates_end,
middleware::{EMPTY_HASH, EMPTY_VALUE, F, HASH_SIZE},
};
@ -59,6 +60,7 @@ pub struct MerkleClaimAndProofTarget {
impl MerkleProofGadget {
/// creates the targets and defines the logic of the circuit
pub fn eval(&self, builder: &mut CircuitBuilder<F, D>) -> Result<MerkleClaimAndProofTarget> {
let measure = measure_gates_begin!(builder, format!("MerkleProof_{}", self.max_depth));
let enabled = builder.add_virtual_bool_target_safe();
let root = builder.add_virtual_hash();
let key = builder.add_virtual_value();
@ -139,6 +141,7 @@ impl MerkleProofGadget {
for j in 0..HASH_SIZE {
builder.connect(computed_root[j], expected_root[j]);
}
measure_gates_end!(builder, measure);
Ok(MerkleClaimAndProofTarget {
max_depth: self.max_depth,
@ -221,6 +224,8 @@ pub struct MerkleProofExistenceTarget {
impl MerkleProofExistenceGadget {
/// creates the targets and defines the logic of the circuit
pub fn eval(&self, builder: &mut CircuitBuilder<F, D>) -> Result<MerkleProofExistenceTarget> {
let measure =
measure_gates_begin!(builder, format!("MerkleProofExistence_{}", self.max_depth));
let enabled = builder.add_virtual_bool_target_safe();
let root = builder.add_virtual_hash();
let key = builder.add_virtual_value();
@ -249,6 +254,7 @@ impl MerkleProofExistenceGadget {
for j in 0..HASH_SIZE {
builder.connect(computed_root[j], expected_root[j]);
}
measure_gates_end!(builder, measure);
Ok(MerkleProofExistenceTarget {
max_depth: self.max_depth,
@ -494,6 +500,7 @@ pub mod tests {
for max_depth in [10, 16, 32, 40, 64, 128, 130, 250, 256] {
test_merkleproof_verify_opt(max_depth, true)?;
}
crate::measure_gates_print!();
Ok(())
}

View file

@ -30,6 +30,7 @@ use crate::{
PublicKey, SecretKey, Signature, DUMMY_PUBLIC_INPUTS, DUMMY_SIGNATURE, VP,
},
},
measure_gates_begin, measure_gates_end,
middleware::{Hash, RawValue, EMPTY_HASH, EMPTY_VALUE, F, VALUE_SIZE},
};
@ -65,6 +66,7 @@ impl SignatureVerifyGadget {
impl SignatureVerifyGadget {
/// creates the targets and defines the logic of the circuit
pub fn eval(&self, builder: &mut CircuitBuilder<F, D>) -> Result<SignatureVerifyTarget> {
let measure = measure_gates_begin!(builder, "SignatureVerify");
let enabled = builder.add_virtual_bool_target_safe();
let common_data = VP.0.common.clone();
@ -115,6 +117,7 @@ impl SignatureVerifyGadget {
builder.verify_proof::<C>(&proof_targ, &verifier_data_targ, &common_data);
measure_gates_end!(builder, measure);
Ok(SignatureVerifyTarget {
verifier_data_targ,
enabled,