bankai_sdk/fetch/bankai/
stwo.rs1use 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 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}