Documentation Index
Fetch the complete documentation index at: https://docs.orbitflare.com/llms.txt
Use this file to discover all available pages before exploring further.
Kurulum
cargo add orbitflare-sdk --features jetstream
İstemciyi oluşturma
use orbitflare_sdk::{JetstreamClientBuilder, RetryPolicy, Result};
use std::time::Duration;
let client = JetstreamClientBuilder::new()
.url("http://ny.jetstream.orbitflare.com")
.fallback_url("http://fra.jetstream.orbitflare.com")
.retry(RetryPolicy {
initial_delay: Duration::from_millis(100),
max_delay: Duration::from_secs(30),
multiplier: 2.0,
max_attempts: 0,
})
.timeout_secs(30)
.keepalive_secs(60)
.ping_interval_secs(10)
.max_missed_pongs(3)
.channel_capacity(4096)
.build()?;
Minimal:
let client = JetstreamClientBuilder::new()
.url("http://ny.jetstream.orbitflare.com")
.build()?;
URL, ayarlanmazsa ORBITFLARE_JETSTREAM_URL ortam değişkenine düşer. Tüm builder yöntemleri gRPC istemcisi ile aynıdır — aynı varsayılanlar, aynı davranış.
YAML yapılandırması yazma
JetStream işlem ve hesap filtrelerini destekler. Slot, blok veya taahhüt yok — bunlar Yellowstone’a özgüdür.
# jetstream.yml
transactions:
raydium:
account_include:
- "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"
pumpfun:
account_include:
- "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"
accounts:
my_wallet:
account:
- "YOUR_WALLET_ADDRESS"
owner:
- "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
YAML filtre referansı
transactions — adlı filtreler. account_include, bu adresleri içeren işlemlerle eşleşir. account_exclude eşleşmeleri çıkarır. account_required listelenen tüm adreslerin görünmesini gerektirir.
accounts — account ile belirli adresleri veya owner ile bir programa ait tüm hesapları izleyin.
${ENV_VAR} genişletmesini destekler.
Olaylara abone olma ve okuma
YAML’dan
let mut stream = client.subscribe_yaml("jetstream.yml")?;
Programatik olarak
use std::collections::HashMap;
use orbitflare_sdk::proto::jetstream::*;
let mut filters = HashMap::new();
filters.insert("target".into(), SubscribeRequestFilterTransactions {
account_include: vec![some_address.to_string()],
account_exclude: vec![],
account_required: vec![],
});
let request = SubscribeRequest {
transactions: filters,
accounts: HashMap::new(),
ping: Some(SubscribeRequestPing { id: 1 }),
};
let mut stream = client.subscribe(request);
Akışı okuma
use orbitflare_sdk::proto::jetstream::subscribe_update::UpdateOneof;
while let Some(update) = stream.next().await {
let update = update?;
match update.update_oneof {
Some(UpdateOneof::Transaction(tx)) => {
// tx.slot - the slot number
// tx.transaction - transaction info with signature, account_keys,
// instructions, address_table_lookups
}
Some(UpdateOneof::Account(acct)) => {
// acct.slot - the slot
// acct.account - account info (pubkey, lamports, owner, data)
// acct.is_startup - true during initial snapshot
}
_ => {}
}
}
Kapatma, birden çok akış, yeniden bağlanma ve ping/pong, gRPC istemcisi ile birebir aynı şekilde çalışır.
Tam örnek
Raydium AMM takaslarını izleyen ve her işlemin imzası ile talimat sayısını yazdıran bir akış.
use orbitflare_sdk::{JetstreamClientBuilder, Result};
use orbitflare_sdk::proto::jetstream::subscribe_update::UpdateOneof;
#[tokio::main]
async fn main() -> Result<()> {
let client = JetstreamClientBuilder::new()
.url("http://ny.jetstream.orbitflare.com")
.build()?;
let mut stream = client.subscribe_yaml("jetstream.yml")?;
let mut count: u64 = 0;
println!("streaming raydium txs...");
while let Some(update) = stream.next().await {
let update = update?;
if let Some(UpdateOneof::Transaction(tx)) = update.update_oneof {
count += 1;
if let Some(info) = &tx.transaction {
let sig = bs58::encode(&info.signature).into_string();
let num_ix = info.instructions.len();
let num_accounts = info.account_keys.len();
println!(
"#{count} slot={} sig={}... ix={num_ix} accounts={num_accounts}",
tx.slot,
&sig[..16],
);
}
}
}
Ok(())
}
Bu jetstream.yml ile:
transactions:
raydium:
account_include:
- "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"