Di hutan gelap Solana, ketika Anda menerima sinyal pembaruan akun dari modul Scout, persaingan sudah memasuki beberapa milidetik terakhir. Jika Anda masih perlu mengirim transaksi kembali ke node RPC untuk 'mensimulasikan (Simulate)' agar mendapatkan penawaran, kemungkinan besar peluang telah hilang karena pesaing yang melakukan perhitungan secara lokal telah lebih dulu mengambilnya.
Seorang Searcher profesional sejati tidak pernah menunggu respons dari RPC. Mereka mempertahankan salinan cermin status AMM di memori lokal mereka, dan begitu menerima data biner, langsung menghitung harga terbaik melalui model matematis.
Artikel ini akan membongkar bagaimana membangun mesin penetapan harga lokal yang efisien untuk Raydium (CPMM) dan Orca (CLMM).
1. Prinsip inti: Perhitungan lokal vs. simulasi RPC
1.1 Mengapa memilih penetapan harga lokal?
Keterlambatan ekstrim: Simulasi RPC biasanya membutuhkan 50ms-200ms, sementara perhitungan murni lokal hanya memerlukan tingkat mikrodetik.
Kemampuan bersamaan: Perhitungan lokal tidak menghabiskan performa node RPC, dapat segera melakukan eksplore penetapan harga untuk ribuan jalur arbitrase.
Determinisme: Dengan menganalisis data akun asli (Account Data), Anda dapat memperoleh kontrol status yang lebih dalam dibandingkan simulasi.
2. Raydium (CPMM): Seni produk konstan
Kolam standar Raydium mengikuti rumus klasik x×y=k. Meskipun logika sederhana, namun dalam implementasi teknik perlu menangani akurasi dan biaya transaksi yang kecil.
2.1 Rumus penawaran inti
Dalam skenario dengan biaya transaksi, rumus versi integer untuk menghitung amount_out adalah:
Input dengan biaya: AmountInwith_fee=AmountIn×(FeeDenominator−FeeNumerator)AmountInwith_fee=AmountIn×(FeeDenominator−FeeNumerator)
Perhitungan hasil: AmountOut=AmountInwith_fee×ReserveoutReservein×FeeDenominator+AmountInwith_feeAmountOut=Reservein×FeeDenominator+AmountInwith_feeAmountInwith_fee×Reserveout
2.2 Permainan akurasi: Kebutuhan U256
Di Solana, jumlah token biasanya adalah u64. Namun, saat menghitung pembilang (Numerator) dari rumus di atas, dua u64 besar yang dikalikan akan segera menyebabkan overflow.
Solusi: Memperkenalkan U256 di lapisan perhitungan tengah. Meskipun pustaka resmi Rust tidak menyediakannya secara langsung, melalui makro uint atau pustaka primitive-types, kita dapat memastikan akurasi absolut tetap terjaga meskipun dalam volatilitas tinggi (input besar).
3. Orca Whirlpool (CLMM): Analisis presisi dari likuiditas terpusat
Dibandingkan dengan CPMM, model likuiditas terpusat (CLMM) Orca jauh lebih kompleks. Ini tidak hanya melibatkan harga tetapi juga Tick (rentang harga) dan kedalaman likuiditas.
3.1 Representasi harga: Q64.64 sqrtPrice
Orca menggunakan harga kuadrat (sqrtPrice) dan disimpan dalam format angka desimal Q64.64.
Rumus: Price=(sqrtPriceX64264)2Price=(264sqrtPriceX64)2
Saat menganalisis, kita perlu menangani bilangan bulat super besar 128 bit, dengan operasi pergeseran untuk mengekstrak harga yang sebenarnya.
3.2 Analisis cepat: Metode pemotongan Offset
Struktur akun Orca Whirlpool sangat besar (termasuk banyak kelompok hadiah, parameter biaya, dll.), jika menggunakan deserialisasi penuh (Borsh Deserialize), kehilangan performa sangat besar.
Solusi optimasi tingkat industri:
Secara langsung menentukan lokasi data biner akun dengan Offset. Karena struktur kolam tetap, kita dapat langsung membaca potongan byte kunci:
data[49..65] -> Likuiditas (Liquidity)
data[65..81] -> Harga (sqrtPrice)
data[81..85] -> Tick saat ini
Cara ini lebih cepat 10 kali lipat dibandingkan analisis lengkap.
4. Desain arsitektur: Lapisan penawaran Quote
Agar lapisan strategi (Strategy) tidak perlu khawatir tentang perbedaan matematika antara DEX yang berbeda, kita perlu membangun mesin Quote yang seragam:
flowchart LR
RawData[Data akun asli] -->|analisis| AMMState[Citral Memori AMM]
AMMState -->|Jumlah input| LocalMath[Model matematika lokal]
LocalMath -->|output| AmountOut[Penawaran terstruktur]
subgraph "Lapisan komputasi lokal"
LocalMath
AMMState
end
Mesin ini akan secara real-time memelihara saldo Vault kolam. Ketika Scout mendeteksi perubahan pada salah satu Vault, mesin Quote akan segera menghitung ulang penawaran jalur penuh untuk pasangan token tersebut.
5. Optimasi teknik: Kecepatan dari detail
Perhitungan tanpa alokasi: Selama proses perhitungan, sebisa mungkin hindari alokasi memori (Heap Allocation), gunakan tipe native di stack.
Batch RPC request: Meskipun penetapan harga bersifat lokal, saldo vault masih perlu disinkronkan. Gunakan getMultipleAccounts untuk mengambil semua status Vault yang relevan secara batch, mengurangi perjalanan jaringan.
Perhitungan awal: Untuk parameter tetap seperti tarif, selesaikan analisis di tahap cold start, jangan hitung ulang di setiap milidetik pada jalur panas.
6. Demonstrasi teknis: Logika penawaran CPMM (versi Python)
Meskipun lingkungan produksi mengejar performa ekstrem Rust, logika matematika intinya dapat ditunjukkan dengan jelas melalui Python:
# Simulasi perhitungan penawaran lokal berkinerja tinggi
def calculate_local_quote(amount_in, res_in, res_out, fee_pct=0.0025):
"""
Penawaran lokal CPMM: x * y = k
"""
# Simulasi perhitungan U256, untuk mencegah overflow
fee_numerator = int(fee_pct * 10000)
fee_denominator = 10000
# 1. Menghitung input efektif setelah biaya
amount_in_with_fee = amount_in * (fee_denominator - fee_numerator)
# 2. Menghitung hasil berdasarkan rumus
numerator = amount_in_with_fee * res_out
denominator = (res_in * fee_denominator) + amount_in_with_fee
amount_out = numerator // denominator
# 3. Menghitung dampak harga (Price Impact)
price_impact = (amount_out / res_out) if res_out > 0 else 1
return amount_out, price_impact
# Simulasi: 1 SOL menukar USDC, dengan 1000 SOL / 100,000 USDC di dalam kolam
out, impact = calculate_local_quote(1 10*9, 1000 10*9, 100000 10*6)
print(f"[*] Perkiraan hasil: {out / 10**6} USDC")
print(f"[*] Dampak harga: {impact:.4%}")
7. Kesimpulan: Kekuatan komputasi sama dengan keuntungan
Di dunia Solana MEV, kemampuan penetapan harga lokal menentukan tingkat kompetisi Anda.
Pemain pemula bergantung pada simulasi RPC, hanya bisa mengambil sisa sup.
Pemain menengah mengimplementasikan CPMM secara lokal.
Pemain tingkat tinggi dapat dengan tepat menganalisis setiap Tick dari CLMM dan menggabungkannya dengan Jito untuk melakukan arbitrase atomik.
Pengumuman langkah berikutnya
Sekarang kita memiliki "Scout" dan "Otak (AMM Math)", kini saatnya memasuki bagian yang paling menarik: bagaimana merumuskan strategi arbitrase lintas DEX? Dalam menghadapi situasi yang kompleks dengan banyak jalur dan protokol, bagaimana menemukan jalur yang paling menguntungkan?
Artikel ini ditulis oleh Levi.eth. Di Solana, setiap baris optimasi rumus matematika dapat diubah menjadi keuntungan nyata di blockchain.

