Jika modul Inventory adalah 'memori' robot, maka modul Scout adalah 'mata'nya. Dalam turbulensi perubahan status sebanyak puluhan ribu per detik di Solana, tugas Scout adalah menyaring, menyaring, dan mendekode sinyal yang benar-benar bermakna bagi strategi arbitrase dengan kecepatan tinggi.
Di dunia MEV, kecepatan bukan segalanya, tetapi tanpa kecepatan tidak ada apa-apa. Artikel ini akan menggali lebih dalam tentang bagaimana membangun sistem pendengaran dan pemrosesan transaksi yang rendah latensi dan berperforma tinggi.
1. Filosofi Mendengarkan: Pisau Bedah vs. Jaring Ikan Besar
Di Solana, kita biasanya menghadapi dua kebutuhan pendengaran yang sangat berbeda, yang sesuai dengan jalur teknologi yang berbeda:
1.1 accountSubscribe: Pisau bedah yang akurat (mode Arb)
Untuk arbitrase lintas protokol (Arbitrage), kita sudah mengunci pool tertentu melalui Inventory. Saat ini, kita tidak perlu memantau seluruh jaringan, cukup memantau perubahan pada bidang Data dari akun-akun pool ini.
Mekanisme: Saat saldo atau harga token dalam pool berubah, node RPC akan langsung mengirimkan data akun terbaru.
Keunggulan: Sinyal sangat langsung, melewati parsing transaksi yang rumit, merupakan jalur tercepat untuk arbitrase frekuensi tinggi.
1.2 logsSubscribe: Jaringan besar yang mencakup seluruh jaringan (mode Sniper)
Untuk menembak pool baru (Sniping), kita tidak bisa memprediksi alamat pool, hanya bisa mendeteksi sinyal perintah 'membuat pool baru' atau 'penyuntikan likuiditas awal' melalui Program Logs protokol tertentu (seperti Raydium atau Orca).
Mekanisme: Memindai kata kunci tertentu dalam log (seperti initialize2).
Tantangan: Noise sangat besar, dan setelah terpicu biasanya memerlukan pemrosesan 'jalur lambat' (seperti meminta getTransaction) untuk melengkapi informasi token pool.
2. Arsitektur Inti: Aliran Multiplexing
Dalam sistem yang matang, Anda mungkin perlu berlangganan pembaruan dari ratusan pool secara bersamaan. Jika setiap langganan dibuka dalam thread terpisah, beban sistem akan meledak dalam sekejap.
2.1 Penggabungan aliran asinkron (Select All)
Kami menggunakan ekosistem asinkron Rust (Tokio + Futures), menggunakan select_all untuk menggabungkan ratusan bahkan ribuan aliran WebSocket menjadi satu aliran acara tunggal. Ini seperti menggabungkan gambar dari ratusan kamera pengawas ke dalam satu layar, yang kemudian diproses dan didistribusikan oleh satu loop utama (Event Loop).
2.2 Model thread dan pemisahan 'jalur lambat'
Kecepatan respons loop utama menentukan batas atas latensi sistem.
Jalur cepat (Hot Path): Terima data -\u003e Dekode memori -\u003e Memicu perhitungan.
Jalur lambat (Long Path): Jika perlu meminta informasi RPC tambahan untuk melengkapi (seperti mode Sniper), harus langsung dipindahkan ke tugas latar belakang menggunakan tokio::spawn, dilarang menghambat loop utama pemantauan.
3. Pemrosesan Ekstrem: Lewati informasi yang tidak perlu
Data akun Solana (Account Data) biasanya berupa buffer biner. Pendekatan yang tidak efisien adalah mendekode ulang menjadi objek lengkap, sedangkan pendekatan ekstrem adalah 'parsing sesuai kebutuhan'.
3.1 Zero-copy dan penentuan offset
Misalnya, saat memantau Orca Whirlpool, kita mungkin hanya membutuhkan sqrt_price dan tick_current_index.
Kita tidak perlu menganalisis seluruh status pool (ratusan byte), cukup membaca langsung 16 byte pada offset tertentu dalam aliran data.
Di Rust, dengan bantuan bytemuck atau offset pointer sederhana, ekstraksi parameter harga kunci dapat dilakukan dalam mikrodetik.
3.2 Seni Filter
Pada tahap logsSubscribe, gunakan filter mentions yang disediakan RPC untuk menyaring 90% log yang tidak relevan di sisi node, secara signifikan mengurangi beban IO jaringan di sisi Searcher.
4. Titik Optimalisasi Kinerja: Dari implementasi teknik, dapatkan milidetik
Langganan terbagi (Sharding): Mengatasi batasan koneksi node RPC umum, Scout secara otomatis membagi pool dalam daftar putih menjadi beberapa bagian, menerima data secara paralel melalui beberapa koneksi WebSocket, menghindari backpressure pada koneksi tunggal.
Mekanisme penekanan noise: Untuk pool yang berubah secara frekuensi tinggi, menerapkan logika sederhana seperti mengabaikan paket atau menggabungkan (Coalescing). Jika satu pool menghasilkan beberapa pembaruan dalam waktu 1ms, hanya status terakhir yang diproses, untuk menghemat sumber daya perhitungan di lapisan strategi.
Indeks pra-baca: Saat menganalisis log, informasi Decimals untuk token umum dimuat terlebih dahulu, menghindari permintaan tambahan saat menghitung selisih harga.
5. Demonstrasi Teknis: Logika Penggabungan Aliran Acara Multiplex (Simulasi Python)
Meskipun inti performa tinggi berada di Rust, logika penggabungan dan distribusi 'banyak ke satu' ini dapat diekspresikan sempurna menggunakan asyncio:
import asyncio
import random
async def pool_monitor(pool_id: str):
"""Meniru aliran langganan akun independen"""
while True:
await asyncio.sleep(random.uniform(0.01, 0.1)) # Meniru pengiriman acak
yield {"pool": pool_id, "data": random.random()}
async def main_scout_loop():
# Meniru daftar pemantauan yang diambil dari Inventory
watchlist = ["Pool_A", "Pool_B", "Pool_C"]
# Menggabungkan semua aliran ke dalam satu antrian
queue = asyncio.Queue()
async def producer(pool_id):
async for update in pool_monitor(pool_id):
await queue.put(update)
# Mulai semua tugas produsen
for p in watchlist:
asyncio.create_task(producer(p))
print("[*] Mesin Scout telah berjalan, sedang mendengarkan sinyal multiplex...")
# Siklus konsumsi inti: distribusi strategi
while True:
event = await queue.get()
# Saat ini langsung memicu perhitungan asinkron lapisan strategi
asyncio.create_task(execute_strategy(event))
async def execute_strategy(event):
print(f"⚡️ Menangkap sinyal: {event['pool']} -\u003e Memicu perhitungan model harga")
if name == "__main__":
asyncio.run(main_scout_loop())
6. Kesimpulan: Radar paling peka
Tingkat desain modul Scout langsung menentukan 'kecepatan start' robot. Scout yang baik harus:
Cukup luas: Dapat menangkap peluang baru melalui log.
Cukup akurat: Dapat mengunci fluktuasi harga melalui langganan akun.
Cukup cepat: Menggunakan arsitektur asinkron dan parsing biner, menekan latensi hingga tingkat mikrodetik.
Pengumuman langkah selanjutnya
Sinyal telah ditangkap, data mentah telah diperoleh, langkah selanjutnya apa? Kita perlu mengubah data biner menjadi harga aset nyata. Di artikel berikutnya, kita akan masuk ke modul AMM, mengungkap bagaimana rumus produk konstan Raydium dan model matematika likuiditas terkonsentrasi Orca berjalan sangat cepat di memori.
Artikel ini ditulis oleh Levi.eth, bertujuan untuk berbagi seni teknik ekstrem di bidang Solana MEV.
\u003cc-331/\u003e\u003cc-332/\u003e

