bankai_sdk/fetch/bankai/
stwo.rs

1use crate::errors::SdkResult;
2use crate::fetch::clients::bankai_api::ApiClient;
3use cairo_air::CairoProof;
4use serde_json::Value;
5use starknet_ff::FieldElement;
6use stwo::core::vcs::blake2_merkle::Blake2sMerkleHasher;
7use stwo_cairo_serialize::deserialize::CairoDeserialize;
8
9pub fn parse_block_proof_value(
10    value: serde_json::Value,
11) -> SdkResult<CairoProof<Blake2sMerkleHasher>> {
12    // Try JSON struct first
13    if let Ok(parsed) = serde_json::from_value::<CairoProof<Blake2sMerkleHasher>>(value.clone()) {
14        Ok(parsed)
15    } else {
16        let data: Vec<FieldElement> = value
17            .as_array()
18            .unwrap()
19            .iter()
20            .map(|v| v.as_str().unwrap().parse().unwrap())
21            .collect();
22        let res = CairoProof::<Blake2sMerkleHasher>::deserialize(&mut data.iter());
23        Ok(res)
24    }
25}
26
27#[allow(dead_code)]
28pub async fn fetch_block_proof(
29    client: &ApiClient,
30    block_number: u64,
31) -> SdkResult<CairoProof<Blake2sMerkleHasher>> {
32    let proof = client.get_block_proof(block_number).await?;
33    let value: Value = proof.proof;
34    parse_block_proof_value(value)
35}