Ana içeriğe atla

Kurulum

İstemciyi oluşturma

Tüm seçenekleri ayarlanmış bir istemci:
Minimal kurulum:
gRPC için API anahtarı gerekmez. URL, 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

Arka plan goroutine’ini hemen durdurur. client.Close(), istemcinin başlattığı her akışı durdurur.

Birden çok akış

Bir istemci aynı anda birçok akış yürütebilir. Her biri kendi arka plan bağlantısına sahiptir:
Uç nokta sağlık durumunu paylaşırlar: bir akış başarısız bir uç noktayı karantinaya alırsa, diğerleri bir sonraki yeniden bağlanmada onu atlar. Ancak bağlantıları ve yaşam döngüleri tamamen bağımsızdır. İstediğiniz zaman yeni akışlar başlatabilirsiniz.

Tam örnek

pump.fun işlemlerini izleyip her biri için bir özet yazdıran bir akış.