This post shows how to query Solana's cluster rpc endpoint using Rust. Most of the examples of how to perform this task that I ran to uses Javascript/Typescript via the Solana Web3js library, so I decided to do a quick post showing how to do same but in Rust. It uses querying for the sol balance of a Solana account as the main example of interaction with the rpc endpoint.
The task is simple: given a Solana address, we retrieve the sol balance for that address.
To get started we will need the following dependencies:
[dependencies]
solana-client = "1.14.3" // update to the current latest version
solana-sdk = "1.14.3" // update to the current latest version
The code snippet below then shows how to call the rpc endpoint and retrieve the Sol balance for an account
use solana_client::rpc_client::RpcClient;
use solana_program::pubkey::Pubkey;
use std::str::FromStr;
fn main() {
let rpc = RpcClient::new("https://api.devnet.solana.com");
let pubkey_str = "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU";
let balance = rpc
.get_account(&Pubkey::from_str(pubkey_str).unwrap())
.unwrap().lamports;
println!("Sol balance of {pubkey_str} is {balance}");
}
Solana addresses are base58 encoded strings, hence they need to be first converted into an instance of Pubkey
before they can be used in the rpc.get_account
call, which expects a &[u8]
byte array. To help with this conversion, Pubkey
implements the std::str::FromStr
trait. This wmeans, if the trait std::str::FromStr
is in scope, then it is possible to convert a string to Pubkey
, which is what was done in the code snippet above.
This post was inspired by a recent question I answered on Solana stack exchange here. The answer also mentions another verbose alternative that involves manually converting from base58 to bytes array.
Hello , have you a repo github for this code please ?
ReplyDelete