bankai_verify/bankai/
stwo.rs

1use 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}