Mevcut Uç Noktalar
Jetstream, tüm OrbitFlare bölgelerinde kullanılabilir. En düşük gecikme için altyapınıza en yakın bölgeye bağlanın.
Şehir Bölge Kodu Uç Nokta New York nyhttp://ny.jetstream.orbitflare.comSalt Lake City slchttp://slc.jetstream.orbitflare.comAshburn ashhttp://ash.jetstream.orbitflare.comLos Angeles lahttp://la.jetstream.orbitflare.com
Şehir Bölge Kodu Uç Nokta Frankfurt frahttp://fra.jetstream.orbitflare.comAmsterdam amshttp://ams.jetstream.orbitflare.comLondon lonhttp://lon.jetstream.orbitflare.comDublin dubhttp://dub.jetstream.orbitflare.comSiauliai, Lithuania siauhttp://siau.jetstream.orbitflare.com
Şehir Bölge Kodu Uç Nokta Tokyo jphttp://jp.jetstream.orbitflare.comSingapore sgphttp://sgp.jetstream.orbitflare.com
Jetstream, gRPC bağlantıları için düz http:// kullanır (https:// değil). gRPC, HTTP/2 üzerinde kendi taşıma güvenliği müzakeresini kullanır. https:// yalnızca özel düğümünüz bunu açıkça gerektiriyorsa kullanın.
Protocol Buffer Belirtimi
Bu belge, OrbitFlare Jetstream tarafından kullanılan Protocol Buffer (protobuf) belirtimini özetlemektedir. Tam belirtim GitHub depomuzdaki belgede bulunabilir.
Hizmet Tanımı
syntax = "proto3" ;
import "google/protobuf/timestamp.proto" ;
package jetstream ;
// ============= Service Definition =============
service Jetstream {
// Subscribe to data streams with filtering support
rpc Subscribe ( stream SubscribeRequest ) returns ( stream SubscribeUpdate ) {}
// Subscribe to data streams with filtering support and parsed instructions
rpc SubscribeParsed ( stream SubscribeParsedRequest ) returns ( stream SubscribeUpdateParsedTransaction ) {}
// Basic ping/pong for connection testing
rpc Ping ( PingRequest ) returns ( PongResponse ) {}
// Get information about current state
rpc GetVersion ( GetVersionRequest ) returns ( GetVersionResponse ) {}
}
İstek Mesajları
SubscribeRequest
Veri güncellemelerine abone olmak için ana istek mesajı:
message SubscribeRequest {
map < string , SubscribeRequestFilterTransactions > transactions = 1 ;
map < string , SubscribeRequestFilterAccounts > accounts = 2 ;
optional SubscribeRequestPing ping = 4 ;
}
İşlem Filtreleme
message SubscribeRequestFilterTransactions {
repeated string account_include = 1 ;
repeated string account_exclude = 2 ;
repeated string account_required = 3 ;
}
Hesap Filtreleme
message SubscribeRequestFilterAccounts {
repeated string account = 1 ;
repeated string owner = 2 ;
repeated SubscribeRequestFilterAccountsFilter filters = 3 ;
}
message SubscribeRequestFilterAccountsFilter {
oneof filter {
SubscribeRequestFilterAccountsFilterMemcmp memcmp = 1 ;
uint64 datasize = 2 ;
SubscribeRequestFilterAccountsFilterLamports lamports = 3 ;
}
}
message SubscribeRequestFilterAccountsFilterMemcmp {
uint64 offset = 1 ;
oneof data {
bytes bytes = 2 ;
string base58 = 3 ;
string base64 = 4 ;
}
}
message SubscribeRequestFilterAccountsFilterLamports {
oneof cmp {
uint64 eq = 1 ;
uint64 ne = 2 ;
uint64 lt = 3 ;
uint64 gt = 4 ;
}
}
Ping İsteği
message SubscribeRequestPing {
int32 id = 1 ;
}
Yanıt Mesajları
SubscribeUpdate
Güncellemeleri içeren ana yanıt mesajı:
message SubscribeUpdate {
repeated string filters = 1 ;
google.protobuf.Timestamp created_at = 2 ;
oneof update_oneof {
SubscribeUpdateTransaction transaction = 3 ;
SubscribeUpdateAccount account = 4 ;
SubscribeUpdatePing ping = 5 ;
SubscribeUpdatePong pong = 6 ;
}
}
İşlem Güncellemesi
message SubscribeUpdateTransaction {
SubscribeUpdateTransactionInfo transaction = 1 ;
uint64 slot = 2 ;
}
message SubscribeUpdateTransactionInfo {
bytes signature = 1 ;
uint64 slot = 2 ;
uint32 num_required_signatures = 3 ;
uint32 num_readonly_signed_accounts = 4 ;
uint32 num_readonly_unsigned_accounts = 5 ;
bytes recent_blockhash = 6 ;
repeated bytes signatures = 7 ;
repeated bytes account_keys = 8 ;
repeated CompiledInstruction instructions = 9 ;
repeated MessageAddressTableLookup address_table_lookups = 10 ;
}
Hesap Güncellemesi
message SubscribeUpdateAccount {
SubscribeUpdateAccountInfo account = 1 ;
uint64 slot = 2 ;
bool is_startup = 3 ;
}
message SubscribeUpdateAccountInfo {
bytes pubkey = 1 ;
uint64 lamports = 2 ;
bytes owner = 3 ;
bool executable = 4 ;
uint64 rent_epoch = 5 ;
bytes data = 6 ;
uint64 write_version = 7 ;
optional bytes txn_signature = 8 ;
}
Ping/Pong Güncellemeleri
message SubscribeUpdatePing {}
message SubscribeUpdatePong {
int32 id = 1 ;
}
Paylaşılan Türler
message MessageAddressTableLookup {
bytes account_key = 1 ;
bytes writable_indexes = 2 ;
bytes readonly_indexes = 3 ;
}
message CompiledInstruction {
uint32 program_id_index = 1 ;
bytes accounts = 2 ;
bytes data = 3 ;
}
Ayrıştırılmış Talimat Desteği
Ayrıştırılmış İstek
message SubscribeParsedRequest {
optional SubscribeRequestPing ping = 1 ;
}
Ayrıştırılmış İşlem Güncellemesi
message SubscribeUpdateParsedTransaction {
bytes signature = 1 ;
uint64 slot = 2 ;
SubscribeUpdateAccount account = 3 ;
bytes recent_blockhash = 4 ;
repeated bytes signatures = 5 ;
repeated Instruction instructions = 6 ;
}
Talimat Türleri
message Instruction {
oneof instruction_oneof {
Initialize initialize = 1 ;
SetParams set_params = 2 ;
Create create = 3 ;
Buy buy = 4 ;
Sell sell = 5 ;
Withdraw withdraw = 6 ;
}
}
message Initialize {}
message SetParams {
bytes fee_recipient = 1 ;
uint64 initial_virtual_token_reserves = 2 ;
uint64 initial_virtual_sol_reserves = 3 ;
uint64 initial_real_token_reserves = 4 ;
uint64 token_total_supply = 5 ;
uint64 fee_basis_points = 6 ;
}
message Create {
string name = 1 ;
string symbol = 2 ;
string uri = 3 ;
}
message Buy {
uint64 amount = 1 ;
uint64 max_sol_cost = 2 ;
}
message Sell {
uint64 amount = 1 ;
uint64 min_sol_output = 2 ;
}
message Withdraw {}
Akışsız Metotlar
message PingRequest {
int32 count = 1 ;
}
message PongResponse {
int32 count = 1 ;
}
message GetVersionRequest {}
message GetVersionResponse {
string version = 1 ;
}
message GetSlotResponse {
uint64 slot = 1 ;
}
Protokolü Kullanma
Jetstream için bir istemci uygularken şunları yapmanız gerekecektir:
Protobuf tanımından istemci kodu oluşturma
Veri akışı için Subscribe RPC metodunu uygulama
Ayrıştırılmış talimat desteği için SubscribeParsed kullanma
Bağlantı sağlık kontrolleri için Ping/Pong kullanma
Sunucu uyumluluğunu kontrol etmek için GetVersion kullanma
Farklı türdeki güncellemeleri işleme (işlemler, hesaplar, pong’lar)
Kod Oluşturma
TypeScript/JavaScript için:
protoc --plugin=protoc-gen-ts_proto=./node_modules/.bin/protoc-gen-ts_proto \
--ts_proto_out=. \
--ts_proto_opt=esModuleInterop=true \
jetstream.proto
Rust için:
protoc --rust_out=. jetstream.proto
En İyi Uygulamalar
Sürüm Uyumluluğu
Protokol uyumluluğunu kontrol etmek için GetVersion kullanın
Beta sürümlerindeki kırıcı değişiklikler için izleyin
Yükseltme yaparken kapsamlı test yapın
Hata İşleme
Tüm mesaj türleri için uygun hata işleme uygulayın
Bağlantı hatalarını zarif bir şekilde yönetin
İşlemeden önce mesaj alanlarını doğrulayın
Bağlantı Yönetimi
Bağlantı sağlık kontrolleri için Ping/Pong kullanın
Otomatik yeniden bağlanma mantığı uygulayın
Uygun zaman aşımı değerleri belirleyin
Performans
Gereksiz veriyi en aza indirmek için uygun filtreler kullanın
Büyük veri kümeleri için hesap filtrelemesini düşünün
Özellikle hesap aboneliklerinde kaynak kullanımını izleyin
Gerektiğinde ayrıştırılmış talimat desteği için SubscribeParsed kullanın
Ayrıca Bakınız
Jetstream Genel Bakış Başlangıç kılavuzu, örnekler ve filtreleme belgeleri.
Değişiklik Günlüğü Sürüm geçmişi ve protokol güncellemeleri.
Destek
Protokol belirtimi veya uygulama ayrıntıları hakkındaki teknik sorularınız için GitHub depomuzu ziyaret edin veya Discord topluluğumuza katılın.