lite-rpc/src/rpc.rs

56 lines
1.8 KiB
Rust

use jsonrpsee::proc_macros::rpc;
use solana_client::rpc_config::{
RpcContextConfig, RpcRequestAirdropConfig, RpcSignatureStatusConfig,
};
use solana_client::rpc_response::{Response as RpcResponse, RpcBlockhash, RpcVersionInfo};
use solana_sdk::commitment_config::CommitmentConfig;
use solana_transaction_status::TransactionStatus;
use crate::configs::{IsBlockHashValidConfig, SendTransactionConfig};
pub type Result<T> = std::result::Result<T, jsonrpsee::core::Error>;
#[rpc(server)]
pub trait LiteRpc {
#[method(name = "sendTransaction")]
async fn send_transaction(
&self,
tx: String,
send_transaction_config: Option<SendTransactionConfig>,
) -> Result<String>;
#[method(name = "getLatestBlockhash")]
async fn get_latest_blockhash(
&self,
config: Option<RpcContextConfig>,
) -> Result<RpcResponse<RpcBlockhash>>;
#[method(name = "isBlockhashValid")]
async fn is_blockhash_valid(
&self,
blockhash: String,
config: Option<IsBlockHashValidConfig>,
) -> Result<RpcResponse<bool>>;
#[method(name = "getSignatureStatuses")]
async fn get_signature_statuses(
&self,
signature_strs: Vec<String>,
config: Option<RpcSignatureStatusConfig>,
) -> Result<RpcResponse<Vec<Option<TransactionStatus>>>>;
#[method(name = "getVersion")]
fn get_version(&self) -> Result<RpcVersionInfo>;
#[method(name = "requestAirdrop")]
async fn request_airdrop(
&self,
pubkey_str: String,
lamports: u64,
config: Option<RpcRequestAirdropConfig>,
) -> Result<String>;
#[subscription(name = "signatureSubscribe" => "signatureNotification", unsubscribe="signatureUnsubscribe", item=RpcResponse<serde_json::Value>)]
fn signature_subscribe(&self, signature: String, commitment_config: CommitmentConfig);
}