data_anchor_client/client/
proof_client.rs1use anchor_lang::solana_program::clock::Slot;
2use data_anchor_api::{CustomerElf, ProofRpcClient, RequestStatus};
3use solana_signer::Signer;
4
5use super::BloberIdentifier;
6use crate::{DataAnchorClient, DataAnchorClientResult};
7
8#[derive(thiserror::Error, Debug)]
9pub enum ProofError {
10 #[error(
12 "Failed to read checkpoint proof for blober {0} and slot {1} with {2} via indexer client: {3}"
13 )]
14 ZKProof(String, u64, CustomerElf, String),
15 #[error("Failed to get proof request status for request ID {0}: {1}")]
17 ProofRequestStatus(String, String),
18}
19
20impl DataAnchorClient {
21 pub async fn checkpoint_custom_proof(
23 &self,
24 slot: Slot,
25 identifier: BloberIdentifier,
26 customer_elf: CustomerElf,
27 ) -> DataAnchorClientResult<String> {
28 let blober = identifier.to_blober_address(self.program_id, self.payer.pubkey());
29
30 self.proof()
31 .checkpoint_proof(blober.into(), slot, customer_elf)
32 .await
33 .map_err(|e| {
34 ProofError::ZKProof(blober.to_string(), slot, customer_elf, e.to_string()).into()
35 })
36 }
37
38 pub async fn get_proof_request_status(
40 &self,
41 request_id: String,
42 ) -> DataAnchorClientResult<RequestStatus> {
43 self.proof()
44 .get_proof_request_status(request_id.clone())
45 .await
46 .map_err(|e| ProofError::ProofRequestStatus(request_id, e.to_string()).into())
47 }
48}