From c5c0f86b455bd6abcb0b896ba8274e58e5402b00 Mon Sep 17 00:00:00 2001 From: Aniket Prajapati Date: Wed, 4 Jan 2023 16:41:37 +0530 Subject: [PATCH] implemented request_airdrop --- src/bridge.rs | 22 ++++++++++++++++++++-- src/rpc.rs | 12 +++++++++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/bridge.rs b/src/bridge.rs index 5770bf53..ea21b611 100644 --- a/src/bridge.rs +++ b/src/bridge.rs @@ -5,7 +5,7 @@ use crate::{ workers::{BlockListener, TxSender}, }; -use std::{ops::Deref, sync::Arc}; +use std::{ops::Deref, str::FromStr, sync::Arc}; use anyhow::bail; use reqwest::Url; @@ -13,11 +13,12 @@ use reqwest::Url; use jsonrpsee::server::ServerBuilder; use solana_client::{ nonblocking::{rpc_client::RpcClient, tpu_client::TpuClient}, - rpc_config::RpcContextConfig, + rpc_config::{RpcContextConfig, RpcRequestAirdropConfig}, rpc_response::{Response as RpcResponse, RpcBlockhash, RpcResponseContext, RpcVersionInfo}, }; use solana_sdk::{ commitment_config::{CommitmentConfig, CommitmentLevel}, + pubkey::Pubkey, transaction::VersionedTransaction, }; use solana_transaction_status::TransactionStatus; @@ -191,6 +192,23 @@ impl LiteRpcServer for LiteBridge { feature_set: Some(version.feature_set), }) } + + async fn request_airdrop( + &self, + pubkey_str: String, + lamports: u64, + config: RpcRequestAirdropConfig, + ) -> crate::rpc::Result { + let pubkey = Pubkey::from_str(&pubkey_str).unwrap(); + + Ok(self + .tpu_client + .rpc_client() + .request_airdrop_with_config(&pubkey, lamports, config) + .await + .unwrap() + .to_string()) + } } impl Deref for LiteBridge { diff --git a/src/rpc.rs b/src/rpc.rs index 43bfc9bc..a4c8da8d 100644 --- a/src/rpc.rs +++ b/src/rpc.rs @@ -1,6 +1,8 @@ use jsonrpsee::core::Error; use jsonrpsee::proc_macros::rpc; -use solana_client::rpc_config::{RpcContextConfig, RpcSignatureStatusConfig}; +use solana_client::rpc_config::{ + RpcContextConfig, RpcRequestAirdropConfig, RpcSignatureStatusConfig, +}; use solana_client::rpc_response::{Response as RpcResponse, RpcBlockhash, RpcVersionInfo}; use solana_transaction_status::TransactionStatus; @@ -32,4 +34,12 @@ pub trait LiteRpc { #[method(name = "getVersion")] fn get_version(&self) -> Result; + + #[method(name = "requestAirdrop")] + async fn request_airdrop( + &self, + pubkey_str: String, + lamports: u64, + config: RpcRequestAirdropConfig, + ) -> Result; }