orbitflare-apex, Apex için referans istemcidir. Apex uç noktası başına tek bir kalıcı QUIC bağlantısı tutar, API anahtarınızdan türetilen bir istemci sertifikasıyla kimlik doğrular, akış başına bir serileştirilmiş işlem gönderir ve bağlantı koptuğunda 0-RTT ile yeniden bağlanır.
Kurulum
Crate,orbitflare-apex adıyla crates.io’da yayınlanmıştır; kaynak kodu GitHub’dadır:
rpc özelliği HTTP yardımcılarını ekler: getTipAccounts, JSON-RPC sendTransaction, ikili rotalar ve herhangi bir Solana RPC için bir blockhash ve onay yardımcısı. QUIC yolunun tek başına HTTP bağımlılığı yoktur, dolayısıyla yalnızca QUIC’e ihtiyacınız varsa özelliği kapalı bırakın.
Bir işlem oluşturmak ve göndermek için ihtiyaç duyduğunuz tek bağımlılık budur. Crate, Solana türlerini orbitflare_apex::prelude üzerinden, uç noktanın birlikte gönderdiği sürümlere sabitlenmiş biçimde yeniden dışa aktarır; dolayısıyla herhangi bir solana-* crate’ini kendiniz eklemeniz veya sürümünü eşleştirmeniz gerekmez.
Crate, Rust 1.92 veya daha yenisini gerektirir.
Hızlı Başlangıç
Cargo.toml içeren eksiksiz bir program için Hızlı başlangıç sayfasının Rust sekmesine bakın.
Bölgeler
Region her Apex uç noktasını adlandırır. Region::parse("fra") ve Region::code() kısa kodlarla karşılıklı eşleme yapar, Region::ALL ise bunları listeler.
region.quic_endpoint() <code>.apex.orbitflare.com:7001 döndürür ve region.rpc_url() http://<code>.apex.orbitflare.com döndürür. Uç noktalar ve bölgeler sayfasına bakın.
Taşıma Yöntemleri
Taşıma yöntemi önceliği veya yönlendirmeyi değiştirmez. Bunu bahşiş belirler.
API
İstemciyi
Clone ile kopyalamak ucuzdur ve kopyalar tek bir bağlantıyı paylaşır. Onu bir kez oluşturun ve kopyalarını görevlerinize dağıtın.
Paketleri
rpc::RpcClient::send_bundle(&[&[u8]]) ile gönderin; bu, bir BundleAccepted (bundle_id ve signatures) döndürür. BundleStatus (state, landed_slot) için bundle_statuses(&[&str]) çağrısını yoklayın. En fazla MAX_BUNDLE (4) üye, tam olarak biri bahşişli.Prelude
use orbitflare_apex::prelude::*;, bahşişli bir işlemi oluşturmak, imzalamak ve göndermek için gereken her şeyi içeri alır, dolayısıyla istemciyi kullanan bir program hiçbir solana-* crate’ine doğrudan bağımlı olmaz. Her tür, uç noktanın birlikte gönderdiği sürümde yeniden dışa aktarılır; bu da aksi halde derlemeyi bozan sürüm eşleştirmesini ortadan kaldırır (Solana crate’leri ara sürümler arasında wincode 0.5 ve 0.6’yı karıştırır).
Genel API türleri (
VersionedTransaction, Instruction, Keypair, Pubkey, Signature, Hash) crate kökünde de bulunur. İşlemleri kendi Solana crate’lerinizle oluşturmayı tercih ederseniz, onları kendiniz serileştirin ve baytları send_transaction_bytes ile gönderin; bu, istemcinin bağımlılık grafiğinin hiçbirini paylaşmaz.
Seçenekler
ClientOptions, Default uygular, dolayısıyla yalnızca ihtiyacınız olanı ayarlayın:
Canlı Tutma ve Yeniden Bağlanmalar
Bağlantı, Apex uç noktasındaki 30 saniyelik boşta kalma zaman aşımına karşı her saniye gönderilen bir QUIC PING ile açık kalır. Sıcak bir bağlantıda bir gönderim, bir akış açma ve bir yazmadan ibarettir. Bağlantı koparsa:- Bir arka plan görevi bunu fark eder ve hemen yeniden el sıkışır (
proactive_reconnect), böylece bir sonraki gönderim genellikle canlı bir bağlantı bulur. - Yeniden bağlanma, önbelleğe alınmış bir oturum bileti kullanır ve bekleyen işlemi el sıkışmanın ilk uçuşunda gönderir (0-RTT). Uç nokta erken veriyi reddederse istemci onu el sıkışmadan sonra yeniden gönderir.
- Bağlantı gittiği için başarısız olan bir gönderim yeniden bağlanır ve bir kez yeniden dener (
auto_reconnect). Bunu kendiniz ele almak içinfalseolarak ayarlayın. - Her yeniden bağlanmada ana bilgisayar adı yeniden çözümlenir; böylece
Region::Globalkullanan bir istemci, kendi uç noktası düştüğünde yeniden başlatılmadan yük dengeleyiciyi izleyerek bir sonraki en yakın uç noktaya geçer. Çözümleme gönderim sırasında değil, arka plandaki yeniden bağlanmada yapılır; başarısız olursa veya iki saniyeden uzun sürerse istemci elindeki adresi korur. IP adresi olarak verilen bir uç nokta hiçbir zaman çözümlenmez.
health(), reconnects_total() ve zero_rtt_resumptions_total() ne olduğunu gösterir. Bunları metriklerinize aktarın.
Hatalar
HTTP yardımcıları
rpc::RpcError döndürür: taşıma hataları için Http, bir JSON-RPC veya düz HTTP reddi için Rpc { code, message } ve BadResponse.
Depodaki Örnekler
Tüm örneklerAPEX_API_KEY, KEYPAIR_PATH (varsayılan payer.json), SOLANA_RPC_URL ve isteğe bağlı olarak APEX_REGION, APEX_QUIC, APEX_RPC, TIP_LAMPORTS, APEX_TX_VERSION (legacy veya v1), APEX_MEMO_BYTES ve APEX_CU_LIMIT değişkenlerini okur. Her biri bahşişli bir memo gönderir ve bloğa girdiği slotu bildirir.
İstemcinin Yapmadıkları
- İşlem oluşturmak veya imzalamak ya da öncelik ücretinizi seçmek.
- Simülasyon yapmak veya preflight kontrolleri çalıştırmak. Sizinle lider arasındaki hiçbir şey bunu yapmaz.