From 9a78ec8f64da5dc48d5889258eaffb29725c41f9 Mon Sep 17 00:00:00 2001 From: gabrielbosio Date: Wed, 4 Sep 2024 19:00:46 -0300 Subject: [PATCH 1/2] Measure Mina state proof size --- operator/mina/lib/src/lib.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/operator/mina/lib/src/lib.rs b/operator/mina/lib/src/lib.rs index 957bbc278..3edfec7c0 100644 --- a/operator/mina/lib/src/lib.rs +++ b/operator/mina/lib/src/lib.rs @@ -7,6 +7,7 @@ use consensus_state::{select_longer_chain, LongerChainResult}; use kimchi::mina_curves::pasta::{Fp, PallasParameters}; use kimchi::verifier_index::VerifierIndex; use lazy_static::lazy_static; +use mina_p2p_messages::binprot::BinProtSize; use mina_p2p_messages::hash::MinaHash; use mina_p2p_messages::v2::{MinaStateProtocolStateValueStableV2, StateHash}; use mina_tree::proofs::verification::verify_block; @@ -64,13 +65,14 @@ pub extern "C" fn verify_mina_state_ffi( // Consensus check: Short fork rule let longer_chain = select_longer_chain(&candidate_tip_state, &bridge_tip_state); - if longer_chain == LongerChainResult::Bridge { - eprintln!("Failed consensus checks for candidate tip state against bridge's tip"); - return false; - } + // if longer_chain == LongerChainResult::Bridge { + // eprintln!("Failed consensus checks for candidate tip state against bridge's tip"); + // return false; + // } // Verify the tip block (and thanks to Pickles recursion all the previous states are verified // as well) + println!("proof size: {}", proof.candidate_tip_proof.binprot_size()); verify_block( &proof.candidate_tip_proof, candidate_tip_state_hash, From 61898a4a1ff0a69b5424bc0e27bc615e0bfa8bed Mon Sep 17 00:00:00 2001 From: gabrielbosio Date: Fri, 6 Sep 2024 17:28:06 -0300 Subject: [PATCH 2/2] Put back consensus check and measure SRS computation --- operator/mina/lib/src/lib.rs | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/operator/mina/lib/src/lib.rs b/operator/mina/lib/src/lib.rs index 3edfec7c0..955990dda 100644 --- a/operator/mina/lib/src/lib.rs +++ b/operator/mina/lib/src/lib.rs @@ -1,5 +1,7 @@ mod consensus_state; +use std::time::SystemTime; + use mina_bridge_core::proof::state_proof::{MinaStateProof, MinaStatePubInputs}; use ark_ec::short_weierstrass_jacobian::GroupAffine; @@ -39,6 +41,7 @@ pub extern "C" fn verify_mina_state_ffi( return false; } }; + let pub_inputs: MinaStatePubInputs = match bincode::deserialize(&pub_input_buffer[..pub_input_len]) { Ok(pub_inputs) => pub_inputs, @@ -58,27 +61,41 @@ pub extern "C" fn verify_mina_state_ffi( } }; + let srs_computation_start_time = SystemTime::now(); // TODO(xqft): srs should be a static, but can't make it so because it doesn't have all its // parameters initialized. let srs = get_srs::(); let srs = srs.lock().unwrap(); + println!( + "SRS computation time: {} ms", + srs_computation_start_time.elapsed().unwrap().as_millis() + ); // Consensus check: Short fork rule let longer_chain = select_longer_chain(&candidate_tip_state, &bridge_tip_state); - // if longer_chain == LongerChainResult::Bridge { - // eprintln!("Failed consensus checks for candidate tip state against bridge's tip"); - // return false; - // } + if longer_chain == LongerChainResult::Bridge { + eprintln!("Failed consensus checks for candidate tip state against bridge's tip"); + return false; + } // Verify the tip block (and thanks to Pickles recursion all the previous states are verified // as well) - println!("proof size: {}", proof.candidate_tip_proof.binprot_size()); - verify_block( + println!( + "proof size: {} bytes", + proof.candidate_tip_proof.binprot_size() + ); + let block_verification_start_time = SystemTime::now(); + let ret = verify_block( &proof.candidate_tip_proof, candidate_tip_state_hash, &VERIFIER_INDEX, &srs, - ) + ); + println!( + "OpenMina block verification time: {} ms", + block_verification_start_time.elapsed().unwrap().as_millis() + ); + ret } /// Checks public inputs against the proof data, making sure the inputs correspond to the proofs