Add get_vote_accounts() to RPC client
This commit is contained in:
parent
5508ac6272
commit
88bb55ffd2
|
@ -2,7 +2,7 @@ use crate::client_error::ClientError;
|
||||||
use crate::generic_rpc_client_request::GenericRpcClientRequest;
|
use crate::generic_rpc_client_request::GenericRpcClientRequest;
|
||||||
use crate::mock_rpc_client_request::MockRpcClientRequest;
|
use crate::mock_rpc_client_request::MockRpcClientRequest;
|
||||||
use crate::rpc_client_request::RpcClientRequest;
|
use crate::rpc_client_request::RpcClientRequest;
|
||||||
use crate::rpc_request::{RpcEpochInfo, RpcRequest};
|
use crate::rpc_request::{RpcEpochInfo, RpcRequest, RpcVoteAccountStatus};
|
||||||
use bincode::serialize;
|
use bincode::serialize;
|
||||||
use log::*;
|
use log::*;
|
||||||
use serde_json::{json, Value};
|
use serde_json::{json, Value};
|
||||||
|
@ -100,6 +100,25 @@ impl RpcClient {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_vote_accounts(&self) -> io::Result<RpcVoteAccountStatus> {
|
||||||
|
let response = self
|
||||||
|
.client
|
||||||
|
.send(&RpcRequest::GetVoteAccounts, None, 0)
|
||||||
|
.map_err(|err| {
|
||||||
|
io::Error::new(
|
||||||
|
io::ErrorKind::Other,
|
||||||
|
format!("GetVoteAccounts request failure: {:?}", err),
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
|
||||||
|
serde_json::from_value(response).map_err(|err| {
|
||||||
|
io::Error::new(
|
||||||
|
io::ErrorKind::Other,
|
||||||
|
format!("GetVoteAccounts parse failure: {}", err),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_epoch_info(&self) -> io::Result<RpcEpochInfo> {
|
pub fn get_epoch_info(&self) -> io::Result<RpcEpochInfo> {
|
||||||
let response = self
|
let response = self
|
||||||
.client
|
.client
|
||||||
|
|
|
@ -17,6 +17,38 @@ pub struct RpcEpochInfo {
|
||||||
pub absolute_slot: u64,
|
pub absolute_slot: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct RpcVoteAccountStatus {
|
||||||
|
pub current: Vec<RpcVoteAccountInfo>,
|
||||||
|
pub delinquent: Vec<RpcVoteAccountInfo>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct RpcVoteAccountInfo {
|
||||||
|
/// Vote account pubkey as base-58 encoded string
|
||||||
|
pub vote_pubkey: String,
|
||||||
|
|
||||||
|
/// The pubkey of the node that votes using this account
|
||||||
|
pub node_pubkey: String,
|
||||||
|
|
||||||
|
/// The current stake, in lamports, delegated to this vote account
|
||||||
|
pub activated_stake: u64,
|
||||||
|
|
||||||
|
/// An 8-bit integer used as a fraction (commission/MAX_U8) for rewards payout
|
||||||
|
pub commission: u8,
|
||||||
|
|
||||||
|
/// Whether this account is staked for the current epoch
|
||||||
|
pub epoch_vote_account: bool,
|
||||||
|
|
||||||
|
/// Most recent slot voted on by this vote account (0 if no votes exist)
|
||||||
|
pub last_vote: u64,
|
||||||
|
|
||||||
|
/// Current root slot for this vote account (0 if not root slot exists)
|
||||||
|
pub root_slot: u64,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub enum RpcRequest {
|
pub enum RpcRequest {
|
||||||
ConfirmTransaction,
|
ConfirmTransaction,
|
||||||
|
|
|
@ -13,7 +13,7 @@ use crate::{
|
||||||
use bincode::{deserialize, serialize};
|
use bincode::{deserialize, serialize};
|
||||||
use jsonrpc_core::{Error, Metadata, Result};
|
use jsonrpc_core::{Error, Metadata, Result};
|
||||||
use jsonrpc_derive::rpc;
|
use jsonrpc_derive::rpc;
|
||||||
use solana_client::rpc_request::RpcEpochInfo;
|
use solana_client::rpc_request::{RpcEpochInfo, RpcVoteAccountInfo, RpcVoteAccountStatus};
|
||||||
use solana_drone::drone::request_airdrop_transaction;
|
use solana_drone::drone::request_airdrop_transaction;
|
||||||
use solana_runtime::bank::Bank;
|
use solana_runtime::bank::Bank;
|
||||||
use solana_sdk::{
|
use solana_sdk::{
|
||||||
|
@ -262,37 +262,6 @@ pub struct RpcContactInfo {
|
||||||
/// JSON RPC port
|
/// JSON RPC port
|
||||||
pub rpc: Option<SocketAddr>,
|
pub rpc: Option<SocketAddr>,
|
||||||
}
|
}
|
||||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
|
||||||
#[serde(rename_all = "camelCase")]
|
|
||||||
pub struct RpcVoteAccountStatus {
|
|
||||||
pub current: Vec<RpcVoteAccountInfo>,
|
|
||||||
pub delinquent: Vec<RpcVoteAccountInfo>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
|
||||||
#[serde(rename_all = "camelCase")]
|
|
||||||
pub struct RpcVoteAccountInfo {
|
|
||||||
/// Vote account pubkey as base-58 encoded string
|
|
||||||
pub vote_pubkey: String,
|
|
||||||
|
|
||||||
/// The pubkey of the node that votes using this account
|
|
||||||
pub node_pubkey: String,
|
|
||||||
|
|
||||||
/// The current stake, in lamports, delegated to this vote account
|
|
||||||
pub activated_stake: u64,
|
|
||||||
|
|
||||||
/// An 8-bit integer used as a fraction (commission/MAX_U8) for rewards payout
|
|
||||||
pub commission: u8,
|
|
||||||
|
|
||||||
/// Whether this account is staked for the current epoch
|
|
||||||
pub epoch_vote_account: bool,
|
|
||||||
|
|
||||||
/// Most recent slot voted on by this vote account (0 if no votes exist)
|
|
||||||
pub last_vote: u64,
|
|
||||||
|
|
||||||
/// Current root slot for this vote account (0 if not root slot exists)
|
|
||||||
pub root_slot: u64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||||
#[serde(rename_all = "kebab-case")]
|
#[serde(rename_all = "kebab-case")]
|
||||||
|
|
Loading…
Reference in New Issue