1use solana_balanced_client::{SolanaClient, SolanaClientRateLimit, SolanaClientRpc};
2use solana_client::nonblocking::rpc_client::RpcClient;
3use solana_client::rpc_request::RpcRequest;
4use std::sync::Arc;
5
6#[tokio::main]
12async fn main() {
13 let default_rpc = Arc::new(RpcClient::new(
14 "https://api.mainnet-beta.solana.com".to_string(),
15 ));
16 let quicknode_rpc = Arc::new(RpcClient::new("<your-quicknode-rpc-url>".to_string()));
17 let client = SolanaClient::new_with_default(default_rpc).add_rpc(
18 SolanaClientRpc::new(quicknode_rpc)
19 .add_limit(
21 SolanaClientRateLimit::new(
22 30 * 24 * 60 * 60 * 1000, 10_000_000, 1, )
26 .add_endpoint_amount(RpcRequest::GetAccountInfo, 2)
28 .add_endpoint_amount(RpcRequest::GetBlockTime, 2)
29 .add_endpoint_amount(RpcRequest::GetClusterNodes, 2)
30 .add_endpoint_amount(RpcRequest::GetBlock, 23)
31 .add_endpoint_amount(RpcRequest::GetEpochInfo, 2)
32 .add_endpoint_amount(RpcRequest::GetFirstAvailableBlock, 3)
33 .add_endpoint_amount(RpcRequest::GetHealth, 2)
34 .add_endpoint_amount(RpcRequest::GetHighestSnapshotSlot, 2)
35 .add_endpoint_amount(RpcRequest::GetInflationGovernor, 2)
36 .add_endpoint_amount(RpcRequest::GetLatestBlockhash, 2)
37 .add_endpoint_amount(RpcRequest::GetMinimumBalanceForRentExemption, 3)
38 .add_endpoint_amount(RpcRequest::GetProgramAccounts, 35)
39 .add_endpoint_amount(RpcRequest::GetRecentPerformanceSamples, 4)
40 .add_endpoint_amount(RpcRequest::GetSignaturesForAddress, 3)
41 .add_endpoint_amount(RpcRequest::GetTokenSupply, 2)
42 .add_endpoint_amount(RpcRequest::GetTransaction, 3)
43 .add_endpoint_amount(RpcRequest::GetVersion, 2)
44 .add_endpoint_amount(RpcRequest::SimulateTransaction, 4)
45 .add_endpoint_amount(RpcRequest::GetMultipleAccounts, 10)
46 .add_endpoint_amount(RpcRequest::GetLargestAccounts, 259),
47 )
48 .add_limit(SolanaClientRateLimit::new(
50 1000, 25, 1, )),
54 );
55
56 let version = client.get_version().await.unwrap();
57
58 println!("Cluster version: {}", version.solana_core);
59}