bankai_verify/bankai/
stwo.rs1use bankai_types::block::BankaiBlock;
2use cairo_air::{utils::get_verification_output, CairoProof, PreProcessedTraceVariant};
3use stwo::core::vcs::blake2_merkle::{Blake2sMerkleChannel, Blake2sMerkleHasher};
4
5use crate::VerifyError;
6
7pub fn verify_stwo_proof(
8 proof: CairoProof<Blake2sMerkleHasher>,
9) -> Result<BankaiBlock, VerifyError> {
10 let verification_output = get_verification_output(&proof.claim.public_data.public_memory);
11 let result = cairo_air::verifier::verify_cairo::<Blake2sMerkleChannel>(
12 proof,
13 PreProcessedTraceVariant::CanonicalWithoutPedersen,
14 );
15 if result.is_err() {
16 return Err(VerifyError::InvalidStwoProof);
17 }
18 let block = BankaiBlock::from_verication_output(&verification_output);
19 Ok(block)
20}