Skip to main content

Bağlantıları Sıcak Tutun

Soğuk bir gönderimin en yavaş kısmı Apex değil, bağlantı kurulumudur. Bağlantıyı ihtiyaç duymadan önce açın ve açık tutun.
Rust istemcisi bunu sizin yerinize halleder. Apex uç noktasının 30 saniyelik boşta kalma zaman aşımına karşı her saniye ping atar, 0-RTT ile devam eder ve bir kopma fark edilir edilmez arka planda yeniden el sıkışır.
  • Gönderim başına değil, başlangıçta süreç ve Apex uç noktası başına bir istemci oluşturun. Akışlar tek bağlantı üzerinde çoğullanır.
  • İstemciyi Clone ile kopyalamak ucuzdur ve kopyalar bağlantıyı paylaşır. Her göreve bir kopya verin.
  • Kopmaları görebilmek için health(), reconnects_total() ve zero_rtt_resumptions_total() değerlerini metriklerinize aktarın.
QUIC’i kendiniz uyguluyorsanız 30 saniyelik boşta kalma zaman aşımı dolmadan epey önce bir QUIC PING gönderin ve 0-RTT için bir oturum bileti saklayın.

Apex Uç Noktasına Yakın Bir Yerden Gönderin

Göndericinizden en düşük gidiş dönüş süresine sahip Apex uç noktasını seçin ve bunu haritadan tahmin etmek yerine /ping ile ölçün. Her Apex uç noktası sıradaki liderlere en yakın doğrulayıcı istemcilerine yönlendirir, dolayısıyla sizin işiniz yalnızca uç noktaya hızlıca ulaşmaktır. Birkaç bölgede çalışıyorsanız her bölgeden kendi en yakın uç noktasına gönderin. Aynı imzalı işlemi birden fazla Apex uç noktasına göndermek güvenlidir, çünkü ağ bir imzayı bir kez yürütür, ancak her kopya hız sınırınızdan düşer.

Bahşişi Alım Satıma Göre Boyutlandırın

Taban (standart katmanda 0,001 SOL), kabul edilmek için gereken asgari tutardır, her işlem için bir öneri değildir.
  • Jito teklifinizi karşılayan şey bahşiştir: bahşişten 5.000 lamport’luk temel ücretin düşülmüş hali. Çekişmeli bir blokta taban seviyesindeki bir teklif açık artırmayı kaybedebilir. Stake ağırlıklı ve TPU yolları yine çalışır, ancak üç yolunuzdan birinden vazgeçmiş olursunuz.
  • Bahşişi yalnızca işlem bloğa girdiğinde ödersiniz, dolayısıyla önemli bir işlemdeki daha büyük bir bahşiş, işlem bloğa girmediğinde hiçbir şeye mal olmaz.
  • Bahşişi bloğa girmenin değeriyle orantılı olarak ölçeklendirin. Rutin bir transfer tabanda kalabilir. Rekabetçi bir alım satım, bloğa ilk girmenin sizin için değeriyle orantılı bir bahşiş vermelidir.
Katmanınızdan emin değilseniz tabanı ret mesajından okuyun: taban altı hatası bunu belirtir.

Her İşlemde Bir Hesaplama Bütçesi Belirleyin

Apex sizi lidere ulaştırır. Liderin zamanlayıcısı ise ardından öncelik ücretine göre sıralar. Hesaplama bütçesi olmadan kuyruğun en altında rekabet edersiniz.
  • Hesaplama birimi limiti: işlemi normal RPC’nizde simüle edin, tüketilen birimleri alın ve yaklaşık yüzde 10 ila 20 pay ekleyin. Hiçbir limit belirlemediğinizde geçerli olan varsayılan limit, çoğu işlemin ihtiyacından çok daha yüksektir ve bu da önceliğinizi boşa harcar.
  • Hesaplama birimi fiyatı: yazdığınız hesaplar için piyasayı takip edin. Yazılabilir hesaplarınızla birlikte getRecentPrioritizationFees makul bir başlangıç sinyalidir.
  • ComputeBudget talimatlarını işlemde en başa koyun.
  • Bu, legacy ve v0 işlemler için geçerlidir. Bir transaction v1 bütçesini mesajın TransactionConfig yapısında belirler ve ComputeBudget talimatları orada etkili olmaz.
Bu belgelerdeki memo işlemleri 100.000 birimlik bir limit kullanır, çünkü memo programı alışılmadık derecede pahalıdır. Kendi limitiniz için kötü bir rehberdir. Limiti kendi talimatlarınıza göre boyutlandırın.

Her Gönderimi Onaylayın

Yanıttaki bir imza, bloğa girdiği değil kabul edildiği anlamına gelir.
  • Durum confirmed veya finalized olana kadar bir Solana RPC üzerinde getSignatureStatuses yöntemini sorgulayın veya signatureSubscribe ile abone olun.
  • err alanını kontrol edin. Bir işlem bloğa girip yine de zincir üzerinde başarısız olabilir. Bahşiş işlemin bir parçasıdır, dolayısıyla yürütme sırasında başarısız olan bir işlem bahşiş transferini de geri alır ve yalnızca ağ ücretini ödersiniz.
  • Blockhash’in süresi dolduğunda beklemeyi bırakın. getLatestBlockhash yanıtındaki lastValidBlockHeight değerini takip edin. Zincir bu değeri geçtikten sonra işlem artık asla bloğa giremez.
Rust’ta rpc::SolanaRpc::confirm(signature, timeout) sorgulamayı yapar ve slotu, zaman aşımında None değerini veya işlem zincir üzerinde başarısız olduysa bir hata döndürür.

Önce Apex Yeniden Denesin, Sonra Yeniden Oluşturun

Apex, kabul edilmiş bir işlemi bloğa girene veya blockhash’inin süresi dolana kadar yeniden gönderir. Bunun etrafından dolanmak yerine bununla birlikte çalışın:
  • Kabul edilmiş bir işlemi döngü içinde yeniden göndermeyin. Hiçbir şey katmaz ve hız sınırınızı harcar.
  • Yeni bir blockhash kullanın. Onu imzalamadan hemen önce confirmed commitment seviyesinde alın. Zaten bir dakikalık olan bir blockhash, Apex’e çalışmak için çok az zaman bırakır.
  • Blockhash’in süresi dolduğunda yeniden oluşturun. Yeni bir blockhash alın, yeniden imzalayın ve yeni işlemi gönderin. Bunu yapmadan önce ilkinin artık bloğa giremeyeceğinden emin olun veya ikisi de yürütülürse güvenli olan bir mantık kullanın.
  • Taşıma hatalarını yeniden deneyin. Bir gönderim siz yanıt almadan önce başarısız olursa aynı baytları yeniden gönderin. Uç nokta imzaya göre tekilleştirir.
  • rate limited ve busy durumlarında geri çekilin. Hangi hataların yeniden deneneceği bölümüne bakın.
maxRetries, Apex’in bir işlemi kaç kez yeniden göndereceğini sınırlar. Bir işlemin erken vazgeçmesini istemediğiniz sürece onu varsayılan değerde bırakın, örneğin bir iki saniye sonra bayatlayan bir fiyat teklifi için.

Geri Bildirimle Entegre Edin, Onsuz Çalıştırın

Entegrasyon sırasında, bir işlemin neden reddedildiğini size söyleyen bir taşıma yöntemi kullanın: JSON-RPC, HTTP rotaları veya çift yönlü bir QUIC akışı. İşlemleriniz güvenilir biçimde kabul edilmeye başladığında sıcak yolları tek yönlü QUIC akışlarına taşıyın ve hata ayıklama için çift yönlü veya HTTP tabanlı bir gönderimi elinizin altında tutun.

Her İşlemi Benzersiz Yapın

Apex imzaya göre tekilleştirir. Talimatları, imzalayanları ve blockhash’i aynı olan iki işlem aynı imzaya sahiptir ve tek işlem sayılır. Aynı eylemi iki kez göndermeyi amaçlıyorsanız bir şeyi değiştirin, örneğin bir memo veya hesaplama birimi fiyatını bir mikro-lamport kadar.

Kontrol Listesi

  • İşlem başına bir bahşiş, üst düzey, bir imzalayan tarafından karşılanan, bahşiş hesabı statik anahtarlarda
  • Bahşiş hesabı, önbelleğe alınmış bir getTipAccounts listesinden işlem başına rastgele seçilmiş
  • Her işlemde hesaplama birimi limiti ve fiyatı
  • Blockhash imzalamadan hemen önce alınmış
  • Bağlantı başlangıçta açılmış ve ısıtılmış
  • Her gönderim onaylanmış, err alanı kontrol edilmiş
  • Hız sınırı ve meşgul durumlarında geri çekilme, geçersiz durumunda yeniden oluşturma
  • API anahtarı kodda değil, bir ortam değişkeninde veya gizli bilgi deposunda