Kurulum
İstemciyi oluşturma
Tüm seçenekleri ayarlanmış bir istemci:ORBITFLARE_GRPC_URL ortam değişkenine düşer.
Builder yöntemleri
.URL(url) - Birincil gRPC uç noktası. ORBITFLARE_GRPC_URL’e düşer. Düz metin HTTP/2 için http://, TLS için https:// kullanın.
.URLs(urls...) - Birincil + yedekler tek çağrıda. İlk eleman birincildir.
.FallbackURL(url) / .FallbackURLs(urls...) - Yedek uç noktalar ekler. Bağlantı başarısız olduğunda SDK aralarında döner.
.Retry(policy) - Yeniden bağlanma backoff’unu denetler. Bağlantı koptuğunda SDK InitialDelay bekler, sonra her denemede gecikmeyi çarpar (MaxDelay ile sınırlı). MaxAttempts 0 ise sonsuz yeniden deneme. Varsayılan: 100 ms başlangıç, 30 s maksimum, 2x çarpan, sonsuz.
.Timeout(duration) - Bağlantı/çevirme zaman aşımı. Varsayılan 30 s.
.Keepalive(duration) - TCP/HTTP2 keepalive aralığı; ölü bağlantıları taşıma katmanında tespit etmek için kullanılır. Varsayılan 60 s.
.PingInterval(duration) - SDK’nın sunucuya protokol düzeyinde Ping mesajlarını ne sıklıkta gönderdiği. Sunucu Pong ile yanıt vermelidir. Varsayılan 10 s.
.MaxMissedPongs(n) - SDK bağlantıyı ölü sayıp yeniden bağlanmadan önce kaç ardışık ping’in yanıtsız kalabileceği. Varsayılan 3. Varsayılanlarla ölü bir bağlantı 30 saniye içinde tespit edilir.
.ChannelCapacity(n) - Arka plan goroutine’i ile kodunuz arasındaki sınırlı kanal. Kodunuz olayları yavaş tüketiyorsa, bu dolduğunda arka plan goroutine’i sınırsız bellek tüketmek yerine bloklanır. Varsayılan 4096.
.Logger(logger) - Bağlantı yaşam döngüsü olayları için bir *slog.Logger. Ayarlanmazsa ORBITFLARE_LOG ile denetlenir.
Abonelik oluşturma
Filtreler,SubscribeRequestBuilder ve tiplenmiş filtre türleriyle programatik olarak oluşturulur. Bir işlem, herhangi bir AccountInclude adresini içeriyorsa eşleşir; AccountExclude eşleşmeleri çıkarır; AccountRequired listelenen tüm adreslerin bulunmasını gerektirir.
Filtre türleri
NewTransactionFilter()-Vote(bool),Failed(bool),Signature(string),AccountInclude(...),AccountExclude(...),AccountRequired(...).NewAccountFilter()-Account(...),Owner(...),Datasize(uint64),TokenAccountState(bool),Memcmp(...),Lamports(...),NonemptyTxnSignature(bool).NewSlotFilter()-FilterByCommitment(bool),InterslotUpdates(bool).NewBlockFilter()-AccountInclude(...),IncludeTransactions(bool),IncludeAccounts(bool),IncludeEntries(bool).NewDeshredTransactionFilter()-Vote(bool),AccountInclude(...),AccountExclude(...),AccountRequired(...).
Memcmp; geyser.MemcmpBytes(offset, []byte), geyser.MemcmpBase58(offset, string) veya geyser.MemcmpBase64(offset, string) ile oluşturulur. Lamports; geyser.LamportsEq/Ne/Lt/Gt(uint64) ile. Commitment; geyser.Processed, geyser.Confirmed, geyser.Finalized değerlerinden biridir.
Elle oluşturmayı tercih ederseniz Subscribe, ham bir *geyser.SubscribeRequest’i (proto türünün yeniden dışa aktarımı) da kabul eder.
Akışı okuma
Subscribe, bir *geyser.Stream döndürür. Sonraki güncellemeyi almak için Next(ctx) çağırın:
Next(ctx), bir olay gelene kadar bloklanır. Akış bittiğinde (Close sonrası dahil) io.EOF döner; diğer her nil olmayan hata o akış için ölümcüldür. Context iptal edilirse ayrıca ctx.Err() döner. Pong mesajları içeride tüketilir ve akışınızda asla görünmez.
Kapatma
client.Close(), istemcinin başlattığı her akışı durdurur.