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 ws
İstemciyi oluşturma
use orbitflare_sdk::{WsClientBuilder, RetryPolicy, Result};
use std::time::Duration;
let client = WsClientBuilder::new()
.url("ws://ny.rpc.orbitflare.com")
.fallback_url("ws://fra.rpc.orbitflare.com")
.api_key("ORBIT-XXXXXX-NNNNNN-NNNNNN")
.retry(RetryPolicy {
initial_delay: Duration::from_millis(100),
max_delay: Duration::from_secs(30),
multiplier: 2.0,
max_attempts: 0,
})
.ping_interval_secs(10)
.max_missed_pongs(3)
.build()
.await?;
Minimal:
let client = WsClientBuilder::new()
.url("ws://ny.rpc.orbitflare.com")
.build()
.await?;
.build() öğesinin eşzamanlı olduğuna dikkat edin — döndürmeden önce WebSocket bağlantısını kurar. Bağlantı başarısız olursa hatayı hemen alırsınız.
Builder yöntemleri
.url(url) — Birincil WebSocket uç noktası. ORBITFLARE_WS_URL ortam değişkenine düşer.
.url("ws://ny.rpc.orbitflare.com")
.urls(&[...]) — Tek çağrıda birincil + yedekler.
.urls(&["ws://ny.rpc.orbitflare.com", "ws://fra.rpc.orbitflare.com"])
.fallback_url(url) / .fallback_urls(&[...]) — Yedek uç noktalar ekler. Yeniden bağlanırken SDK aralarında döner.
.fallback_url("ws://fra.rpc.orbitflare.com")
.api_key(key) — Lisans anahtarı. ORBITFLARE_LICENSE_KEY ortam değişkenine düşer.
.api_key("ORBIT-XXXXXX-NNNNNN-NNNNNN")
.retry(policy) — Yeniden bağlanma geri çekilmesi. Varsayılan: 100 ms başlangıç, 30 sn üst sınır, 2x çarpan, sonsuz deneme.
.retry(RetryPolicy {
initial_delay: Duration::from_millis(200),
max_delay: Duration::from_secs(15),
multiplier: 2.0,
max_attempts: 0,
})
.ping_interval_secs(n) — SDK’nın WebSocket Ping çerçevelerini gönderme sıklığı. Varsayılan: 10.
.max_missed_pongs(n) — Bağlantıyı sonlandırmadan önce yanıtsız ping sayısı. Varsayılan: 3.
Kullanılabilir abonelikler
slot_subscribe()
Bir slot işlendiğinde, onaylandığında veya finalize edildiğinde tetiklenir.
let mut sub = client.slot_subscribe().await?;
Her olay slot, parent ve root alanlarına sahip bir JSON değeridir:
{"slot": 413014740, "parent": 413014739, "root": 413014708}
account_subscribe(address, commitment)
Belirtilen hesabın verisi değiştiğinde tetiklenir.
let mut sub = client.account_subscribe(
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"confirmed",
).await?;
Lamport, owner ve çalıştırılabilir bayrağı ile base64 kodlanmış hesap verisini döndürür.
logs_subscribe(mentions, commitment)
Verilen adresleri anan işlemler için tetiklenir. Tüm işlemler için boş dilim geçin.
let mut sub = client.logs_subscribe(
&["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"],
"confirmed",
).await?;
Tüm günlükler:
let mut sub = client.logs_subscribe(&[], "confirmed").await?;
signature_subscribe(signature, commitment)
Bir işlem verilen taahhüt düzeyine ulaştığında bir kez tetiklenir. Az önce gönderdiğiniz bir işlemi onaylamak için kullanışlıdır.
let mut sub = client.signature_subscribe("5K8F2j...", "confirmed").await?;
Olayları okuma
Tüm abonelikler bir WsSubscription döndürür. Sonraki olay için .next() çağırın:
while let Some(event) = sub.next().await {
println!("{event}");
}
.next() Option<serde_json::Value> döndürür. None, aboneliğin kapatıldığı anlamına gelir.
Abonelikten çıkma
Sunucuya abonelikten çıkma iletisi gönderir. Bunu çağırmadan aboneliği düşürürseniz SDK yetimi tespit eder ve abonelikten çıkmayı otomatik gönderir.
Birden çok abonelik
Tüm abonelikler tek WebSocket bağlantısında çalışır. SDK bildirimleri doğru aboneliğe dahili olarak yönlendirir.
let mut slots = client.slot_subscribe().await?;
let mut usdc = client.account_subscribe("EPjFWdd5...", "confirmed").await?;
let mut logs = client.logs_subscribe(&["6EF8r..."], "confirmed").await?;
Mevcut abonelikler çalışırken istediğiniz zaman yeni abonelik ekleyebilirsiniz.
Yeniden bağlanma
Bağlantı koparsa arka plan görevi üstel geri çekilme ile yeniden bağlanır ve her şeyi otomatik yeniden abone eder. .next() çağrılarınız çalışmaya devam eder — bağlantı geri gelince olaylar sürer.
Tam örnek
Slot güncellemelerine ve USDC için hesap değişikliklerine abone olan, canlı bir akış yazan bir izleme betiği.
use orbitflare_sdk::{WsClientBuilder, Result};
#[tokio::main]
async fn main() -> Result<()> {
let client = WsClientBuilder::new()
.url("ws://ny.rpc.orbitflare.com")
.build()
.await?;
let mut slots = client.slot_subscribe().await?;
let mut usdc = client.account_subscribe(
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"confirmed",
).await?;
println!("watching slots and USDC mint account...");
loop {
tokio::select! {
Some(slot) = slots.next() => {
let s = slot["slot"].as_u64().unwrap_or(0);
let parent = slot["parent"].as_u64().unwrap_or(0);
println!("slot {s} (parent {parent})");
}
Some(acct) = usdc.next() => {
let lamports = acct["lamports"].as_u64().unwrap_or(0);
let data_len = acct["data"][0]
.as_str()
.map(|s| s.len())
.unwrap_or(0);
println!("USDC mint updated: {lamports} lamports, {data_len} bytes");
}
}
}
}