Skip to content

Commit

Permalink
feat: introduce accounts_data
Browse files Browse the repository at this point in the history
  • Loading branch information
lgalabru committed Feb 3, 2025
1 parent ede5e41 commit 1d8b53f
Show file tree
Hide file tree
Showing 3 changed files with 141 additions and 2 deletions.
137 changes: 137 additions & 0 deletions crates/core/src/rpc/accounts_data.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
use super::utils::decode_and_deserialize;
use jsonrpc_core::BoxFuture;
use jsonrpc_core::{Error, Result};
use jsonrpc_derive::rpc;
use solana_account_decoder::parse_token::UiTokenAmount;
use solana_account_decoder::UiAccount;
use solana_client::rpc_config::RpcAccountInfoConfig;
use solana_client::rpc_custom_error::RpcCustomError;
use solana_client::rpc_response::{RpcApiVersion, RpcBlockCommitment};
use solana_client::rpc_response::RpcResponseContext;
use solana_client::{
rpc_config::{
RpcBlockConfig, RpcBlocksConfigWrapper, RpcEncodingConfigWrapper, RpcEpochConfig,
RpcRequestAirdropConfig, RpcSendTransactionConfig, RpcSignatureStatusConfig,
RpcSignaturesForAddressConfig, RpcSimulateTransactionConfig, RpcTransactionConfig,
},
rpc_response::{
RpcBlockhash, RpcConfirmedTransactionStatusWithSignature, RpcContactInfo,
RpcInflationReward, RpcPerfSample, RpcPrioritizationFee, RpcSimulateTransactionResult,
},
};
use solana_rpc_client_api::response::Response as RpcResponse;
use solana_runtime::commitment::BlockCommitmentArray;
use solana_sdk::clock::UnixTimestamp;
use solana_sdk::transaction::VersionedTransaction;
use solana_send_transaction_service::send_transaction_service::TransactionInfo;
use solana_transaction_status::UiTransactionEncoding;
use solana_transaction_status::{
EncodedConfirmedTransactionWithStatusMeta, TransactionStatus, UiConfirmedBlock,
};

use {
super::*,
solana_sdk::message::{SanitizedVersionedMessage, VersionedMessage},
solana_transaction_status::parse_ui_inner_instructions,
};

#[rpc]
pub trait AccountsData {
type Metadata;

#[rpc(meta, name = "getAccountInfo")]
fn get_account_info(
&self,
meta: Self::Metadata,
pubkey_str: String,
config: Option<RpcAccountInfoConfig>,
) -> BoxFuture<Result<RpcResponse<Option<UiAccount>>>>;

#[rpc(meta, name = "getMultipleAccounts")]
fn get_multiple_accounts(
&self,
meta: Self::Metadata,
pubkey_strs: Vec<String>,
config: Option<RpcAccountInfoConfig>,
) -> BoxFuture<Result<RpcResponse<Vec<Option<UiAccount>>>>>;

#[rpc(meta, name = "getBlockCommitment")]
fn get_block_commitment(
&self,
meta: Self::Metadata,
block: Slot,
) -> Result<RpcBlockCommitment<BlockCommitmentArray>>;

// SPL Token-specific RPC endpoints
// See https://github.com/solana-labs/solana-program-library/releases/tag/token-v2.0.0 for
// program details

#[rpc(meta, name = "getTokenAccountBalance")]
fn get_token_account_balance(
&self,
meta: Self::Metadata,
pubkey_str: String,
commitment: Option<CommitmentConfig>,
) -> Result<RpcResponse<UiTokenAmount>>;

#[rpc(meta, name = "getTokenSupply")]
fn get_token_supply(
&self,
meta: Self::Metadata,
mint_str: String,
commitment: Option<CommitmentConfig>,
) -> Result<RpcResponse<UiTokenAmount>>;
}

pub struct SurfpoolAccountsDataRpc;
impl AccountsData for SurfpoolAccountsDataRpc {
type Metadata = Option<RunloopContext>;

fn get_account_info(
&self,
meta: Self::Metadata,
pubkey_str: String,
config: Option<RpcAccountInfoConfig>,
) -> BoxFuture<Result<RpcResponse<Option<UiAccount>>>> {
unimplemented!()
}

fn get_multiple_accounts(
&self,
meta: Self::Metadata,
pubkey_strs: Vec<String>,
config: Option<RpcAccountInfoConfig>,
) -> BoxFuture<Result<RpcResponse<Vec<Option<UiAccount>>>>> {
unimplemented!()
}

fn get_block_commitment(
&self,
meta: Self::Metadata,
block: Slot,
) -> Result<RpcBlockCommitment<BlockCommitmentArray>> {
unimplemented!()
}

// SPL Token-specific RPC endpoints
// See https://github.com/solana-labs/solana-program-library/releases/tag/token-v2.0.0 for
// program details

fn get_token_account_balance(
&self,
meta: Self::Metadata,
pubkey_str: String,
commitment: Option<CommitmentConfig>,
) -> Result<RpcResponse<UiTokenAmount>> {
unimplemented!()
}

fn get_token_supply(
&self,
meta: Self::Metadata,
mint_str: String,
commitment: Option<CommitmentConfig>,
) -> Result<RpcResponse<UiTokenAmount>> {
unimplemented!()
}
}
3 changes: 2 additions & 1 deletion crates/core/src/rpc/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@ use serde_derive::{Deserialize, Serialize};
use solana_sdk::{
clock::Slot,
commitment_config::CommitmentLevel,
transaction::{Transaction, VersionedTransaction},
transaction::VersionedTransaction,
};
use tokio::sync::broadcast;

pub mod full;
pub mod minimal;
pub mod accounts_data;
pub mod utils;

#[derive(Default, Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
Expand Down
3 changes: 2 additions & 1 deletion crates/core/src/simnet/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use std::{
};
use tokio::sync::broadcast;

use crate::rpc::{self, full::Full, minimal::Minimal, Config, SurfpoolMiddleware};
use crate::rpc::{self, full::Full, minimal::Minimal, accounts_data::AccountsData, Config, SurfpoolMiddleware};

const DEFAULT_SLOT_TIME: u64 = 400;

Expand Down Expand Up @@ -65,6 +65,7 @@ pub async fn start(
let mut io = MetaIoHandler::with_middleware(middleware);
io.extend_with(rpc::minimal::SurfpoolMinimalRpc.to_delegate());
io.extend_with(rpc::full::SurfpoolFullRpc.to_delegate());
io.extend_with(rpc::accounts_data::SurfpoolAccountsDataRpc.to_delegate());
let res = ServerBuilder::new(io)
.cors(DomainsValidation::Disabled)
.start_http(&"127.0.0.1:8899".parse().unwrap());
Expand Down

0 comments on commit 1d8b53f

Please sign in to comment.