feat: add ping,get_latest_blockhash,get_block_height,get_slot for yellowstone-grpc-client

This commit is contained in:
cairo 2023-05-23 00:58:59 +08:00 committed by GitHub
parent 58120e7c7a
commit 02a94d926a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 56 additions and 5 deletions

View File

@ -9,10 +9,17 @@ use {
yellowstone_grpc_proto::prelude::{
subscribe_request_filter_accounts_filter::Filter as AccountsFilterDataOneof,
subscribe_request_filter_accounts_filter_memcmp::Data as AccountsFilterMemcmpOneof,
subscribe_update::UpdateOneof, SubscribeRequest, SubscribeRequestFilterAccounts,
SubscribeRequestFilterAccountsFilter, SubscribeRequestFilterAccountsFilterMemcmp,
SubscribeRequestFilterBlocks, SubscribeRequestFilterBlocksMeta,
SubscribeRequestFilterSlots, SubscribeRequestFilterTransactions, SubscribeUpdateAccount,
subscribe_update::UpdateOneof,
SubscribeRequest,
SubscribeRequestFilterAccounts,
SubscribeRequestFilterAccountsFilter,
SubscribeRequestFilterAccountsFilterMemcmp,
SubscribeRequestFilterBlocks,
SubscribeRequestFilterBlocksMeta,
SubscribeRequestFilterSlots,
SubscribeRequestFilterTransactions,
SubscribeUpdateAccount,
// PingRequest,
},
};
@ -288,3 +295,17 @@ async fn main() -> anyhow::Result<()> {
.await
.map_err(Into::into)
}
// unary method
// #[tokio::main]
// async fn main() -> anyhow::Result<()> {
// std::env::set_var("RUST_LOG", "info");
// env_logger::init();
//
// let args = Args::parse();
// let (endpoint, x_token) = (args.endpoint.clone(), args.x_token.clone());
// let mut client = GeyserGrpcClient::connect(endpoint, x_token, None)?;
// let response = client.ping(200).await;
// dbg!(&response);
// Ok(())
// }

View File

@ -1,3 +1,5 @@
use yellowstone_grpc_proto::geyser::{GetSlotResponse, PongResponse};
use yellowstone_grpc_proto::prelude::{GetBlockHeightResponse, GetLatestBlockhashResponse};
use {
bytes::Bytes,
futures::{
@ -15,7 +17,8 @@ use {
Request, Response, Status,
},
yellowstone_grpc_proto::prelude::{
geyser_client::GeyserClient, SubscribeRequest, SubscribeRequestFilterAccounts,
geyser_client::GeyserClient, GetBlockHeightRequest, GetLatestBlockhashRequest,
GetSlotRequest, PingRequest, SubscribeRequest, SubscribeRequestFilterAccounts,
SubscribeRequestFilterBlocks, SubscribeRequestFilterBlocksMeta,
SubscribeRequestFilterSlots, SubscribeRequestFilterTransactions, SubscribeUpdate,
},
@ -117,6 +120,33 @@ impl<F: Interceptor> GeyserGrpcClient<F> {
.await?;
Ok(response)
}
pub async fn ping(&mut self, count: i32) -> GeyserGrpcClientResult<PongResponse> {
let message = PingRequest { count };
let request = tonic::Request::new(message);
let response = self.client.ping(request).await?;
Ok(response.into_inner())
}
pub async fn get_latest_blockhash(
&mut self,
) -> GeyserGrpcClientResult<GetLatestBlockhashResponse> {
let request = tonic::Request::new(GetLatestBlockhashRequest {});
let response = self.client.get_latest_blockhash(request).await?;
Ok(response.into_inner())
}
pub async fn get_block_height(&mut self) -> GeyserGrpcClientResult<GetBlockHeightResponse> {
let request = tonic::Request::new(GetBlockHeightRequest {});
let response = self.client.get_block_height(request).await?;
Ok(response.into_inner())
}
pub async fn get_slot(&mut self) -> GeyserGrpcClientResult<GetSlotResponse> {
let request = tonic::Request::new(GetSlotRequest {});
let response = self.client.get_slot(request).await?;
Ok(response.into_inner())
}
}
#[cfg(test)]