quicknode/
quicknode.rs

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/// Example of creating a client with the QuickNode's free-tier configuration.
7///
8/// Info at:
9/// - https://www.quicknode.com/pricing
10/// - https://www.quicknode.com/api-credits/sol
11#[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            // Credits / month limits.
20            .add_limit(
21                SolanaClientRateLimit::new(
22                    30 * 24 * 60 * 60 * 1000, /* 30 days */
23                    10_000_000,               /* credits per month */
24                    1,                        /* default cost in credits for endpoints */
25                )
26                // List of all endpoints whose credits are different than the default value.
27                .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            // Requests / second limit.
49            .add_limit(SolanaClientRateLimit::new(
50                1000, /* 1 second */
51                25,   /* 25 requests per second */
52                1,    /* all requests count the same */
53            )),
54    );
55
56    let version = client.get_version().await.unwrap();
57
58    println!("Cluster version: {}", version.solana_core);
59}