eq_sdk/
lib.rs

1// Re-export eq-common parts
2pub use eq_common::eqs::inclusion_client::InclusionClient;
3pub use eq_common::eqs::{
4    get_keccak_inclusion_response, GetKeccakInclusionRequest, GetKeccakInclusionResponse,
5};
6pub use eq_common::{KeccakInclusionToDataRootProofInput, KeccakInclusionToDataRootProofOutput};
7
8use tonic::transport::Channel;
9use tonic::Status as TonicStatus;
10
11pub mod types;
12pub use types::BlobId;
13
14#[derive(Debug)]
15pub struct EqClient {
16    grpc_channel: Channel,
17}
18
19impl EqClient {
20    pub fn new(grpc_channel: Channel) -> Self {
21        Self { grpc_channel }
22    }
23    pub fn get_keccak_inclusion<'a>(
24        &'a self,
25        request: &'a BlobId,
26    ) -> impl std::future::Future<Output = Result<GetKeccakInclusionResponse, TonicStatus>> + Send + 'a
27    where
28        Self: Sync,
29    {
30        async {
31            let request = GetKeccakInclusionRequest {
32                commitment: request.commitment.hash().to_vec(),
33                namespace: request
34                    .namespace
35                    .id_v0()
36                    .ok_or(TonicStatus::invalid_argument("Namespace invalid"))?
37                    .to_vec(),
38                height: request.height.into(),
39            };
40            let mut client = InclusionClient::new(self.grpc_channel.clone());
41            match client.get_keccak_inclusion(request).await {
42                Ok(response) => Ok(response.into_inner()),
43                Err(e) => Err(e),
44            }
45        }
46    }
47}