#solana #drift #api-bindings #sdk #dex

drift-rs

Rust SDK for Drift V2 Protocol on the Solana blockchain

3 releases

1.0.0-alpha.3 Oct 24, 2024
1.0.0-alpha.2 Oct 22, 2024
1.0.0-alpha.1 Oct 4, 2024

#944 in Magic Beans

Download history 143/week @ 2024-09-30 15/week @ 2024-10-07 6/week @ 2024-10-14 286/week @ 2024-10-21 16/week @ 2024-10-28

331 downloads per month

Apache-2.0

1MB
27K SLoC

drift-rs

Crates.io Docs Discord Chat License

drift-rs

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

Install

# crates.io*
drift-rs = "1.0.0-alpha.3"

# build from source (also builds and links 'libdrift_ffi_sys'
drift-rs = { git = "https://github.com/drift-labs/drift-rs", tag = "v1.0.0-alpha.3" }

*drift-rs uses drift program over ffi. ensure libdrift_ffi_sys is installed when using via crates.io.

Use

use drift_rs::{DriftClient, Wallet};
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 to Ws-based live prices, blockhashes, and oracle updates
    let markets = [MarketId::spot(1), MarketId::perp(0)];
    client.subscribe_markets(&markets).await.unwrap();
}

Setup

Mac (m-series)

Install rosetta and configure Rust toolchain for x86_64

softwareupdate --install-rosetta
# replace `1.81.0` with preferred stable version
rustup install 1.81.0-x86_64-apple-darwin
rustup override set 1.81.0-x86_64-apple-darwin

⚠️ the default toolchain is 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 or optionally install from drift-ffi-sys

# Build from source
CARGO_DRIFT_FFI_STATIC=1
# Provide a prebuilt drift_ffi_sys lib 
CARGO_DRIFT_FFI_PATH="/path/to/libdrift_ffi_sys"

Dependencies

~80MB
~1.5M SLoC