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
1[dependencies]
2allenhark-slipstream = "0.3"
3tokio = { version = "1", features = ["full"] }
4solana-sdk = "1.18"Install — TypeScript
1npm install @allenhark/slipstream @solana/web3.jsInstall — Python
1pip 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 using the fastest protocol available.
Connect — Rust
1use allenhark_slipstream::{Config, SlipstreamClient};
2
3#[tokio::main]
4async fn main() -> anyhow::Result<()> {
5 let config = Config::builder()
6 .api_key("sk_live_your_key_here")
7 .build()?;
8
9 let client = SlipstreamClient::connect(config).await?;
10
11 // Check connection info
12 let info = client.connection_info();
13 println!("Connected! Session: {}, Protocol: {:?}, Region: {:?}",
14 info.session_id, info.protocol, info.region);
15
16 // Submit a transaction (raw bytes)
17 let result = client.submit_transaction(&tx_bytes).await?;
18 println!("Signature: {:?}", result.signature);
19 println!("Status: {:?}", result.status);
20 println!("Routing: {:?}", result.routing);
21
22 Ok(())
23}Connect — TypeScript
1import { SlipstreamClient, configBuilder } from "@allenhark/slipstream";
2
3const config = configBuilder()
4 .apiKey("sk_live_your_key_here")
5 .build();
6
7const client = await SlipstreamClient.connect(config);
8
9// Check connection info
10const info = client.connectionInfo();
11console.log("Connected!", info.sessionId, info.protocol, info.region);
12
13// Submit a transaction (Uint8Array)
14const result = await client.submitTransaction(txBytes);
15console.log("Signature:", result.signature);
16console.log("Status:", result.status);
17console.log("Routing:", result.routing);Connect — Python
1from allenhark_slipstream import SlipstreamClient, config_builder
2
3config = config_builder() \
4 .api_key("sk_live_your_key_here") \
5 .build()
6
7client = await SlipstreamClient.connect(config)
8
9# Check connection info
10info = client.connection_info()
11print(f"Connected! Session: {info.session_id}, Protocol: {info.protocol}, Region: {info.region}")
12
13# Submit a transaction (bytes)
14result = await client.submit_transaction(tx_bytes)
15print(f"Signature: {result.signature}")
16print(f"Status: {result.status}")
17print(f"Routing: {result.routing}")Step 4: Check Your Balance
Balance — Rust
1let balance = client.get_balance().await?;
2println!("Balance: {} SOL ({} tokens)", balance.balance_sol, balance.balance_tokens);
3println!("Tier: {:?}", balance.tier);Balance — TypeScript
1const balance = await client.getBalance();
2console.log(`Balance: ${balance.balanceSol} SOL (${balance.balanceTokens} tokens)`);
3console.log("Tier:", balance.tier);Balance — Python
1balance = await client.get_balance()
2print(f"Balance: {balance.balance_sol} SOL ({balance.balance_tokens} tokens)")
3print(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 fastest one
- 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