velocity-exchange
drift-rs
Rust

rust sdk to interact with drift v2

Last updated Jun 28, 2026
53
Stars
44
Forks
5
Issues
0
Stars/day
Attention Score
81
Language breakdown
Rust 100.0%
Shell 0.0%
Files click to expand
README

drift-rs

Crates.io Docs Discord Chat License

drift-rs

Experimental, high performance Rust SDK for building offchain clients for Drift V2 protocol.

See the official docs

Install

drift-rs = { git = "https://github.com/velocity-exchange/drift-rs", tag = "v1.0.0" }
* crates.io requires libdrift is installed and linked locally

Use

The DriftClient struct provides methods for reading drift program accounts and crafting transactions. It is built on a subscription model where live account updates are transparently cached and made accessible via accessor methods. The client may be subscribed either via Ws or gRPC.
use drift_rs::{AccountFilter, DriftClient, Wallet, grpc::GrpcSubscribeOpts};
use solana_sdk::signature::Keypair;

async fn main() { let client = DriftClient::new( Context::MainNet, RpcClient::new("https://rpc-provider.com"), Keypair::new().into(), ) .await .expect("connects");

// Subscribe via WebSocket // // 1) Ws-based live market and price changes let markets = [MarketId::spot(1), MarketId::perp(0)]; client.subscribe_markets(&markets).await.unwrap(); client.subscribe_oracles(&markets).await.unwrap(); client.subscribeaccount("SUBACCOUNT1");

// OR 2) subscribe via gRPC (advanced) // gRPC automatically subscribes to all markets and oracles client.grpc_subscribe( "https://grpc.example.com".into(), "API-X-TOKEN".into(), GrpcSubscribeOpts::default() .useraccounts("SUBACCOUNT1", "SUBACCOUNT2") .onslot(move |newslot| { // do something on slot }) .on_account( AccountFilter::partial().with_discriminator(User::DISCRIMINATOR), move |account| { // do something on user account updates }) ).await;

// // Fetch latest values /// let solperpprice = client.oracle_price(MarketId::perp(0)); let subaccount1: User = client.trygetaccount("SUBACCOUNT1"));

Setup

Mac

Install rosetta (m-series only) and configure Rust toolchain for x86_64 ⚠️ 1.76.0-x86_64 must also be installed alongside latest stable rust

softwareupdate --install-rosetta

replace '1.85.0' with preferred latest stable version

rustup install 1.85.0-x8664-apple-darwin 1.76.0-x8664-apple-darwin --force-non-host

rustup override set 1.85.0-x86_64-apple-darwin

Linux

# replace '1.85.0' with preferred latest stable version
rustup install 1.85.0-x8664-unknown-linux-gnu 1.76.0-x8664-unknown-linux-gnu --force-non-host

rustup override set 1.85.0-x86_64-unknown-linux-gnu

⚠️ the non-x86_64 toolchains are incompatible due to memory layout differences between solana program (BPF) and aarch64 and will fail at runtime with deserialization errors like: InvalidSize.

Local Development

drift-rs links to the drift program crate via FFI, build from source (default) by cloning git submodule or dynamically link with a version from drift-ffi-sys

clone repo and submodules

git clone https://github.com/velocity-exchange/drift-rs &&\ cd drift-rs &&\ git submodule update --init --recursive

build

# Build from source (default) CARGODRIFTFFI_STATIC=1

Provide a prebuilt driftffisys lib

CARGODRIFTFFIPATH="/path/to/libdriftffi_sys"

Development

Release

git tag v<MAJOR.MINOR.PATCH> && git push

Updating IDL types

from repo root dir:
./scripts/idl-update.sh
cargo check # build new IDL types

commit changes...

© 2026 GitRepoTrend · velocity-exchange/drift-rs · Updated daily from GitHub