Skip to main content
orbitflare-apex-go, Apex için Go istemcisidir. 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. Rust istemcisi ile aynı özelliklere sahiptir ve istemci sertifikası Rust istemcisininkiyle bayt düzeyinde aynıdır.

Kurulum

Modül github.com/orbitflare/orbitflare-apex-go adını taşır; kaynak kodu GitHub’dadır:
Modülün iki paketi vardır: İşlemler, legacy, v0 ve v1 mesajlarını kapsayan solana-go ile oluşturulur. QUIC yolu rpc paketine bağımlı değildir. Modül, Go 1.26 veya daha yenisini gerektirir.

Hızlı Başlangıç

Eksiksiz bir program. Hesaplama bütçesi ve bahşiş içeren bir memo işlemi oluşturur, onu QUIC üzerinden gönderir ve onayı bekler. Hızlı başlangıç ile aynı ortam değişkenlerini okur: APEX_API_KEY, KEYPAIR_PATH ve SOLANA_RPC_URL.
main.go
SendTransaction, işlem akışa yazılır yazılmaz, mikrosaniyeler içinde ve herhangi bir onay almadan döner. Aşağıdaki kod parçaları bu programın içine yerleşir: programın ctx, client, apiKey, payer, tipAccount, blockhash, solanaRPC ve tx değişkenlerini yeniden kullanırlar. Bir kod parçasının kullandığı errors, encoding/base64 veya sync gibi standart kütüphane içe aktarmalarını ekleyin.

Yanıtla Gönderme

Çift yönlü akış, dönmeden önce Apex’in yanıtını okur: işlem kabul edildiğinde imzayı, aksi halde kabul kodu ve mesajla birlikte bir *apex.RejectedError döndürür. Bir ek gidiş dönüşe mal olur, dolayısıyla onu entegrasyon sırasında veya nedeni satır içinde görmeniz gerektiğinde kullanın.
SendWithResponse(ctx, wire) aynısını elinizde zaten bulunan baytlarla yapar ve ham apex.Admission değerini (Accepted, Signature, Code, Message) döndürür.

v1 İşlemleri

v1 işlemleri 4096 bayta kadar çıkabilir. Hesaplama bütçesi ComputeBudget talimatları yerine mesajın solana.TransactionConfig alanında yer alır ve ayarlanmamış her sınır 0 olur; dolayısıyla hesaplama birimi sınırını, yüklenen hesap verisi boyutu sınırını ve öncelik için ücreti ayarlayın. Transaction v1 sayfasına bakın.

Ham Baytlar

İşleminiz zaten serileştirilmişse (başka bir imzalayıcıdan, başka bir süreçten veya bir dosyadan), baytları olduğu gibi gönderin. Hiçbir şey onları yeniden kodlamaz.
apex.EncodePacket(wire, mevProtect, maxRetries), istemcinin akışa yazdığı veri paketinin tam halini döndürür: 8 baytlık bir uzunluk, işlem ve 3 baytlık bir kuyruk. Diğer diller için referans budur.

HTTP

rpc paketi, Apex uç noktasındaki her HTTP rotasını kapsar. Anahtarı x-api-key başlığı olarak gönderir.
SendTransaction, mevcut koda doğrudan eklenebilen JSON-RPC sendTransaction çağrısıdır. SendTransactionBinary ham baytları en ucuz HTTP yolu olan /send-bin rotasına gönderir. Son iki argüman mevProtect ve maxRetries değerleridir; nil, uç noktanın varsayılan yeniden deneme bütçesini kullanır.

Toplu Gönderimler

SendBatch tek bir istekte en fazla 16 işlem gönderir. Her biri ayrı ayrı kabul edilir ve sonuç hangilerinin kabul edildiğini söyler.

Paketler

SendBundle, sırayla ve ya hep ya hiç biçiminde bloğa giren, tam olarak biri bahşişli bir ila dört işlem gönderir. Paket bloğa girene veya başarısız olana kadar BundleStatuses çağrısını yoklayın. Paketler sayfasına bakın.

Eşzamanlı Gönderimler

Bir *apex.Client eşzamanlı kullanım için güvenlidir ve her gönderim tek bağlantı üzerinde kendi akışını alır. İstemciyi bir kez oluşturun ve istediğiniz kadar goroutine’den gönderin.

Bölgeler

Her Apex uç noktası bir apex.Region sabitidir. apex.ParseRegion bir kod veya şehir adı kabul eder, apex.AllRegions ise bunları listeler.
QUICEndpoint() <code>.apex.orbitflare.com:7001 döndürür ve RPCURL() 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

Ağa dokunan her çağrı bir context.Context alır, böylece bir gönderimi iptal edebilir veya ona bir son tarih verebilirsiniz. İşiniz bittiğinde Close çağırın; arka plandaki yeniden bağlanmayı durdurur ve soketi kapatır.

Seçenekler

Her alanın sıfır değeri size varsayılanları verir, 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 goroutine’i bunu fark eder ve hemen yeniden el sıkışır, böylece bir sonraki gönderim genellikle canlı bir bağlantı bulur. Bağlantıyı uç noktanın kendisi kapattıysa (bilinmeyen bir anahtar, çok fazla bağlantı), goroutine sert biçimde yeniden denemek yerine her denemeden sonra bekleme süresini 30 saniyeye kadar ikiye katlar.
  • 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. Bunu kendiniz ele almak için DisableAutoReconnect ayarlayın.
  • Her yeniden bağlanmada ana bilgisayar adı yeniden çözümlenir; böylece apex.Global kullanan 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.
Bağlantı durumunu metriklerinize aktarın:

Hatalar

Hatalar bir sentinel değeri sarar; böylece errors.Is hangi aşamanın başarısız olduğunu söyler, errors.As ise türlü hataları verir.
rpc paketi, bir JSON-RPC veya düz HTTP reddi için kod ve mesaj içeren *rpc.Error, okuyamadığı bir yanıt için ise rpc.ErrBadResponse döndürür. Düz HTTP reddinin kodu 0’dır ve mesajı label: message biçimindedir; etiketler Hatalar ve hız sınırları sayfasında listelenmiştir.

Anahtarınızı Kontrol Edin

API anahtarınızın türettiği sertifika anahtarını yazdırın. Gösterge panelinizde anahtarın yanında gösterilen istemci açık anahtarıyla eşleşmelidir; eşleşmiyorsa anahtar yanlış kopyalanmıştır.

Depodaki Örnekler

Tüm örnekler APEX_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.