Quick Start
Get your first transaction submitted through Slipstream in 5 minutes.
Prerequisites
- An AllenHark account with an API key (
sk_live_*) - A funded Solana wallet for token deposits
- Rust 1.70+, Node.js 18+, or Python 3.10+
Step 1: Install the SDK
Install — Rust
[dependencies]
allenhark-slipstream = "0.3"
tokio = { version = "1", features = ["full"] }
solana-sdk = "1.18"Install — TypeScript
npm install @allenhark/slipstream @solana/web3.jsInstall — Python
pip install AllenHarkSlipstream solanaStep 2: Get Your API Key
- Log in to the AllenHark Console
- Navigate to Slipstream → API Keys
- Create a new key — it will start with
sk_live_ - Copy the key securely; it won't be shown again
Step 3: Connect and Submit
The SDK auto-discovers the nearest region via the discovery service, probes latency to all available workers, and connects over the first protocol in the fallback chain that answers (QUIC, then gRPC, WebSocket, HTTP).
Connect — Rust
use allenhark_slipstream::{Config, SlipstreamClient};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let config = Config::builder()
.api_key("sk_live_your_key_here")
.build()?;
let client = SlipstreamClient::connect(config).await?;
// Check connection info
let info = client.connection_info();
println!("Connected! Session: {}, Protocol: {:?}, Region: {:?}",
info.session_id, info.protocol, info.region);
// Submit a transaction (raw bytes)
let result = client.submit_transaction(&tx_bytes).await?;
println!("Signature: {:?}", result.signature);
println!("Status: {:?}", result.status);
println!("Routing: {:?}", result.routing);
Ok(())
}Connect — TypeScript
import { SlipstreamClient, configBuilder } from "@allenhark/slipstream";
const config = configBuilder()
.apiKey("sk_live_your_key_here")
.build();
const client = await SlipstreamClient.connect(config);
// Check connection info
const info = client.connectionInfo();
console.log("Connected!", info.sessionId, info.protocol, info.region);
// Submit a transaction (Uint8Array)
const result = await client.submitTransaction(txBytes);
console.log("Signature:", result.signature);
console.log("Status:", result.status);
console.log("Routing:", result.routing);Connect — Python
from allenhark_slipstream import SlipstreamClient, config_builder
config = config_builder() \
.api_key("sk_live_your_key_here") \
.build()
client = await SlipstreamClient.connect(config)
# Check connection info
info = client.connection_info()
print(f"Connected! Session: {info.session_id}, Protocol: {info.protocol}, Region: {info.region}")
# Submit a transaction (bytes)
result = await client.submit_transaction(tx_bytes)
print(f"Signature: {result.signature}")
print(f"Status: {result.status}")
print(f"Routing: {result.routing}")Step 4: Check Your Balance
Balance — Rust
let balance = client.get_balance().await?;
println!("Balance: {} SOL ({} tokens)", balance.balance_sol, balance.balance_tokens);
println!("Tier: {:?}", balance.tier);Balance — TypeScript
const balance = await client.getBalance();
console.log(`Balance: ${balance.balanceSol} SOL (${balance.balanceTokens} tokens)`);
console.log("Tier:", balance.tier);Balance — Python
balance = await client.get_balance()
print(f"Balance: {balance.balance_sol} SOL ({balance.balance_tokens} tokens)")
print(f"Tier: {balance.tier}")What Happened?
- The SDK queried the discovery service at
https://discovery.allenhark.networkto find available regions and workers - It probed latency to each worker and connected to the one with the lowest measured round trip
- Protocol fallback chain was used: QUIC (2s) → gRPC (3s) → WebSocket (3s) → HTTP (5s)
- Your transaction was routed to the sender closest to the current slot leader
- 1 token (0.00005 SOL / 50,000 lamports) was deducted from your balance
Next Steps
- Configuration — Customize protocol, timeouts, and preferences
- Transactions — Advanced transaction options
- Bundles — Submit atomic transaction bundles
- Real-Time Streams — Subscribe to leader hints and more
