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.- QUIC
- HTTP
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
Cloneile kopyalamak ucuzdur ve kopyalar bağlantıyı paylaşır. Her göreve bir kopya verin. - Kopmaları görebilmek için
health(),reconnects_total()vezero_rtt_resumptions_total()değerlerini metriklerinize aktarı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.
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
getRecentPrioritizationFeesmakul 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
TransactionConfigyapısında belirler ve ComputeBudget talimatları orada etkili olmaz.
Her Gönderimi Onaylayın
Yanıttaki bir imza, bloğa girdiği değil kabul edildiği anlamına gelir.- Durum
confirmedveyafinalizedolana kadar bir Solana RPC üzerindegetSignatureStatusesyöntemini sorgulayın veyasignatureSubscribeile abone olun. erralanı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.
getLatestBlockhashyanıtındakilastValidBlockHeightdeğerini takip edin. Zincir bu değeri geçtikten sonra işlem artık asla bloğa giremez.
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
confirmedcommitment 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 limitedvebusydurumları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
Canlıya geçmeden önce
Canlıya geçmeden önce
- İş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
getTipAccountslistesinden 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ış,
erralanı 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