Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions canister/sol_rpc_canister.did
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Identifies a Solana cluster
type SolanaCluster = variant {
// Live production environment 
// Live production environment
Mainnet;
// Public testing and development
Devnet;
Expand All @@ -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;
};

Expand Down Expand Up @@ -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);
};
32 changes: 31 additions & 1 deletion canister/src/providers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
}
},
},
};
}
Expand Down
2 changes: 1 addition & 1 deletion integration_tests/tests/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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],
Expand Down
8 changes: 8 additions & 0 deletions libs/types/src/rpc_client/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
Expand Down