diff --git a/canister/sol_rpc_canister.did b/canister/sol_rpc_canister.did index dde321bc..741c5ea1 100644 --- a/canister/sol_rpc_canister.did +++ b/canister/sol_rpc_canister.did @@ -1,6 +1,6 @@ // Identifies a Solana cluster type SolanaCluster = variant { - // Live production environment  + // Live production environment Mainnet; // Public testing and development Devnet; @@ -10,10 +10,14 @@ type SolanaCluster = variant { // Identifies an RPC provider for a particular Solana cluster. type SupportedProvider = variant { - AnkrMainnet; - AlchemyDevnet; AlchemyMainnet; + AlchemyDevnet; + AnkrMainnet; AnkrDevnet; + DrpcMainnet; + DrpcDevnet; + HeliusMainnet; + HeliusDevnet; PublicNodeMainnet; }; @@ -116,12 +120,12 @@ service : (InstallArgs,) -> { getProviders : () -> (vec record { SupportedProvider; RpcProvider }) query; // Update the API keys for a list of supported providers. - // + // // # Preconditions // // The caller is the controller or a principal specified in `Installargs::manage_api_keys`. updateApiKeys : (vec record { SupportedProvider; opt text }) -> (); - + // TODO XC-292: change signature getSlot : (RpcSources, opt RpcConfig) -> (nat64); }; \ No newline at end of file diff --git a/canister/src/providers/mod.rs b/canister/src/providers/mod.rs index d2a74f6a..f776f39e 100644 --- a/canister/src/providers/mod.rs +++ b/canister/src/providers/mod.rs @@ -45,11 +45,41 @@ thread_local! { public_url: Some("https://rpc.ankr.com/solana_devnet/".to_string()), } }, + SupportedRpcProviderId::DrpcMainnet => SupportedRpcProvider { + cluster: SolanaCluster::Mainnet, + access: RpcAccess::Unauthenticated { + public_url: "https://solana.drpc.org".to_string(), + }, + }, + SupportedRpcProviderId::DrpcDevnet => SupportedRpcProvider { + cluster: SolanaCluster::Mainnet, + access: RpcAccess::Unauthenticated { + public_url: "https://solana-devnet.drpc.org".to_string(), + }, + }, + SupportedRpcProviderId::HeliusMainnet => SupportedRpcProvider { + cluster: SolanaCluster::Mainnet, + access: RpcAccess::Authenticated { + auth: RpcAuth::UrlParameter { + url_pattern: "https://devnet.helius-rpc.com/?api-key={API_KEY}".to_string(), + }, + public_url: None, + }, + }, + SupportedRpcProviderId::HeliusDevnet => SupportedRpcProvider { + cluster: SolanaCluster::Mainnet, + access: RpcAccess::Authenticated { + auth: RpcAuth::UrlParameter { + url_pattern: "https://mainnet.helius-rpc.com/?api-key={API_KEY}".to_string(), + }, + public_url: None, + }, + }, SupportedRpcProviderId::PublicNodeMainnet => SupportedRpcProvider { cluster: SolanaCluster::Mainnet, access: RpcAccess::Unauthenticated { public_url: "https://solana-rpc.publicnode.com".to_string(), - } + }, }, }; } diff --git a/integration_tests/tests/tests.rs b/integration_tests/tests/tests.rs index b51070c8..ca0b90cc 100644 --- a/integration_tests/tests/tests.rs +++ b/integration_tests/tests/tests.rs @@ -11,7 +11,7 @@ mod get_provider_tests { let client = setup.client(); let providers = client.get_providers().await; - assert_eq!(providers.len(), 5); + assert_eq!(providers.len(), 9); assert_eq!( providers[0], diff --git a/libs/types/src/rpc_client/mod.rs b/libs/types/src/rpc_client/mod.rs index c6da3d46..dd66c288 100644 --- a/libs/types/src/rpc_client/mod.rs +++ b/libs/types/src/rpc_client/mod.rs @@ -92,6 +92,14 @@ pub enum SupportedRpcProviderId { AnkrMainnet, /// [Ankr](https://www.ankr.com/) provider on [Solana Devnet](https://solana.com/docs/references/clusters) AnkrDevnet, + /// [dRPC](https://drpc.org/) provider on [Solana Mainnet](https://solana.com/docs/references/clusters) + DrpcMainnet, + /// [dRPC](https://drpc.org/) provider on [Solana Devnet](https://solana.com/docs/references/clusters) + DrpcDevnet, + /// [Helius](https://www.helius.dev/) provider on [Solana Mainnet](https://solana.com/docs/references/clusters) + HeliusMainnet, + /// [Helius](https://www.helius.dev/) provider on [Solana Devnet](https://solana.com/docs/references/clusters) + HeliusDevnet, /// [PublicNode](https://www.publicnode.com/) provider on [Solana Mainnet](https://solana.com/docs/references/clusters) PublicNodeMainnet, }