Skip to main content

Bir Taşıma Yöntemi Seçin

Tüm taşıma yöntemleri aynı bahşiş kuralını, aynı doğrulamayı ve aynı yönlendirmeyi uygular. Taşıma yöntemi yalnızca baytların Apex uç noktasına nasıl ulaştığını değiştirir. İşlem boyutu sınırları her yerde aynıdır: legacy ve v0 işlemler 1232 bayta kadar, transaction v1 4096 bayta kadar.

Bahşişli ve imzalı bir işlem oluşturun

Bu sayfadaki örnekler dil başına tek bir yardımcıyı paylaşır. Yardımcı, hesaplama bütçesi ve bahşiş içeren bir memo işlemi oluşturur, onu imzalar ve bir imzayı onaylayabilir. İmzalı bir işlemi base64 olarak yazdırmak için doğrudan çalıştırın. cURL örnekleri bunu kullanır. Önce ortamı ayarlayın:
cURL örnekleri için her gönderimden önce yeni bir işlem imzalayın:
Bir işlem yalnızca blockhash’i geçerli olduğu sürece, yani kabaca 60 ila 90 saniye boyunca geçerlidir, bu yüzden göndermeden hemen önce imzalayın.

JSON-RPC sendTransaction

Apex uç noktasının köküne POST yapın. Bu, standart Solana sendTransaction biçimidir, dolayısıyla mevcut kod URL’yi değiştirip API anahtarını ekleyerek taşınır.
Yanıt:
Apex simülasyon yapmaz ve preflight kontrolleri çalıştırmaz. skipPreflight ve preflightCommitment etkisizdir. Simülasyon istiyorsanız göndermeden önce normal RPC’nizde simulateTransaction yöntemini çağırın.

Düz HTTP Rotaları

Bu rotalar aynı ana makine ve portta JSON-RPC’nin yanında yer alır ve JSON-RPC zarfını atlar. İkili rotalarda seçenekler sorgu bayrakları olarak iletilir: ?mev_protect=1 ve &max_retries=N. Hatalar, bir HTTP durumuyla birlikte JSON olarak gelir: {"error": "<label>", "message": "..."}. Hatalar ve hız sınırları sayfasına bakın.

POST /send

POST /send-bin

En ucuz HTTP yolu: girişte base64 ve JSON yoktur. Gövde, bayt bayt serileştirilmiş işlemin kendisidir.

POST /send-batch

Tek bir istekte en fazla 16 bağımsız işlem gönderin. Gövde bir çerçeve dizisidir:
Her işlem kendi başına kabul edilir. Toplu gönderim atomik değildir: bazı çerçeveler kabul edilirken diğerleri reddedilebilir. Ya hep ya hiç yürütme için Paketler kullanın.
İsteğin kendisi geçerli olduğunda yanıt her zaman HTTP 200’dür ve çerçeve sırasıyla, çerçeve başına bir sonuç içerir:

GET /ping

pong döndürür. API anahtarı gerektirmez. Bir HTTP bağlantısını ihtiyaç duymadan önce açıp ısıtmak ve boşta kalan bir bağlantıyı canlı tutmak için kullanın. En iyi uygulamalar sayfasına bakın.

CORS

Her HTTP yanıtı Access-Control-Allow-Origin: * taşır ve OPTIONS ön kontrol istekleri yanıtlanır, dolayısıyla yukarıdaki tüm rotalar tarayıcı kodundan çalışır. Bir anahtarı bir ön yüze koymadan önce tarayıcı notlarına bakın.

QUIC

QUIC, içeri girmenin en hızlı yoludur. Apex uç noktasına, API anahtarınızdan türetilen bir istemci sertifikasıyla bir kez doğrulanan tek bir kalıcı bağlantı tutar ve işlem başına bir akış açarsınız. Sıcak bir bağlantıda bir gönderim, bir akış açma ve bir yazmadan ibarettir, yani istemci tarafında birkaç mikrosaniye sürer. İki tür akış vardır:

Rust

apex-sender-client crate’i taşıma yönteminin tamamını uygular: sertifika, canlı tutma, 0-RTT ile devam ettirme ve yeniden bağlanmalar. Bu program her akış türünde bir işlem gönderir. Hızlı başlangıç ile aynı Cargo.toml dosyasını kullanır.

Kabul Kodları

Çift yönlü bir akış şunlardan biriyle yanıt verir: Bir ret, o veri paketi için kesindir. Yanıt gelmeden önce oluşan bir taşıma hatasını yeniden denemek güvenlidir, çünkü uç nokta imzaya göre tekilleştirir.

Diğer Dillerden QUIC

Taşıma yöntemini, istemci sertifikalarını destekleyen bir QUIC kütüphanesi olan herhangi bir dilde uygulayabilirsiniz. Bağlantı
  • TLS 1.3 ve ALPN solana-tpu ile QUIC (RFC 9000).
  • Sunucu sertifikası, kendinden imzalı bir yer tutucudur. Onu doğrulamayın.
  • İstemci, API anahtarınızdan türetilen sertifikayı sunmalıdır.
  • Apex uç noktası başına tek bir bağlantıyı açık tutun. Düzenli olarak QUIC PING gönderin (Rust istemcisi her saniye ping atar). Uç noktanın boşta kalma zaman aşımı 30 saniyedir. 0-RTT etkindir.
İşlem veri paketi Bir akış açın, tam olarak bir veri paketi yazın ve akışı sonlandırın:
Bu, bincode’un varsayılan sabit tamsayı little-endian seçenekleriyle { wire_transaction: Vec<u8>, mev_protect: bool, max_retry: Option<u16> } yapısının tam olarak bincode karşılığıdır. Veri paketinin tamamı en fazla 4160 bayt olmalıdır. Kabul çerçevesi (yalnızca çift yönlü akışlar)
Rust’ta wire::encode_packet ve wire::decode_admission her iki çerçevenin referans uygulamasıdır.