/helius-rust-sdk

Asynchronous Helius Rust SDK

Primary LanguageRustMIT LicenseMIT

Helius SDK

An asynchronous Helius Rust SDK for building the future of Solana

Documentation

The latest documentation can be found here on docs.rs

Contributions

Interested in contributing to the Helius Rust SDK? Read the following contributions guide before opening up a pull request!

Installation

To start using the Helius Rust SDK in your project, add it as a dependency via cargo. Open your project's Cargo.toml and add the following line under [dependencies]:

helius = "x.y.z"

where x.y.z is your desired version. Alternatively, use cargo add helius to add the dependency directly via the command line. This will automatically find the latest version compatible with your project and add it to your Cargo.toml.

Remember to run cargo update regularly to fetch the latest version of the SDK.

TLS Options

The Helius Rust SDK uses the native TLS implementation by default via:

[dependencies]
helius = "x.y.z"

However, the SDK also supports rustls. Add the following to your Cargo.toml to use rustls instead of the native TLS implementation:

[dependencies]
helius = { version = "x.y.z", default-features = false, features = ["rustls"] }

Using rustls may be preferred in environments where OpenSSL is not available or when a pure Rust TLS implementation is desired. However, it may not support all the same features as the native TLS implementation

Usage

Helius

The SDK provides a Helius instance that can be configured with an API key and a given Solana cluster. Developers can generate a new API key on the Helius Developer Dashboard. This instance acts as the main entry point for interacting with the SDK by providing methods to access different Solana and RPC client functionalities. The following code is an example of how to use the SDK to fetch info on Mad Lad #8420:

use helius::error::Result;
use helius::types::{Cluster, DisplayOptions, GetAssetRequest, GetAssetResponseForAsset};

#[tokio::main]
async fn main() -> Result<()> {
    let api_key: &str = "YOUR_API_KEY";
    let cluster: Cluster = Cluster::MainnetBeta;

    let helius: Helius = Helius::new(api_key, cluster).unwrap();

    let request: GetAssetRequest = GetAssetRequest {
        id: "F9Lw3ki3hJ7PF9HQXsBzoY8GyE6sPoEZZdXJBsTTD2rk".to_string(),
        display_options: None,
    };

    let response: Result<Option<GetAssetResponseForAsset>> = helius.rpc().get_asset(request).await;

    match response {
        Ok(Some(asset)) => {
            println!("Asset: {:?}", asset);
        },
        Ok(None) => println!("No asset found."),
        Err(e) => println!("Error retrieving asset: {:?}", e),
    }

    Ok(())
}

HeliusFactory

The SDK also comes equipped with HeliusFactory, a factory for creating instances of Helius. This factory allows for a centralized configuration and creation of Helius clients so work can be done across multiple clusters at the same time. Using a factory simplifies client code and enhances maintainability by ensuring that all Helius clients are configured consistently. It has the following functionality:

  • A new method used to create a new HeliusFactory capable of producing Helius clients. Note this method does not create a reqwest client
  • A with_client method used to provide a given HeliusFactory created with the new method its own reqwest client
  • A create method used to create multiple Helius clients in a thread-safe manner

Embedded Solana Client

The Helius client has an embedded Solana client that can be accessed via helius.connection().request_name() where request_name() is a given RPC method. A full list of all Solana RPC HTTP methods can be found here.

Note that this Solana client is synchronous by default. An asynchronous client can be created using the new_with_async_solana method in place of the new method. The asynchronous client can be accessed via helius.async_connection()?.some_async_method().await? where some_async_method() is a given async RPC method.

Enhanced WebSockets

The Helius client can also be created with the new_with_ws() method in place of the new method. This will create a WebSocket client, adding support for the Geyser Enhanced WebSocket methods transactionSubscribe and accountSubscribe

Examples

More examples of how to use the SDK can be found in the examples directory.

Error Handling

Common Error Codes

You may encounter several error codes when working with the Helius Rust SDK. Below is a table detailing some of the common error codes along with additional information to aid with troubleshooting:

Error Code Error Message More Information
401 Unauthorized This occurs when an invalid API key is provided or access is restricted
429 Too Many Requests This indicates that the user has exceeded the request limit in a given timeframe or is out of credits
5XX Internal Server Error This is a generic error message for server-side issues. Please contact Helius support for assistance

If you encounter any of these errors:

  • Refer to errors.rs for a list of all possible errors returned by the Helius client
  • Refer to the Helius documentation for further guidance
  • Reach out to the Helius support team for more detailed assistance

Result Type Alias

The SDK also has a handy type alias for Result where Result<(some type), HeliusError> and be simplified to Result<(some type)>

Methods

Our SDK is designed to provide a seamless developer experience when building on Solana. We've separated the core functionality into various segments:

DAS API

Mint API

Enhanced Transactions API

Webhooks

Smart Transactions

Jito Smart Transactions and Helper Methods

Helper Methods