Langsung ke konten utama
Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →

Lingkungan

Versi yang kompatibel saat dokumen ini ditulis:
anchorpy terkadang tertinggal dari versi anchor-lang; untuk program Raydium yang baru di-deploy, pastikan IDL dapat dikompilasi dengan anchorpy yang Anda gunakan sebelum commit.

Koneksi dan keypair

AsyncClient adalah varian async; Client sinkron tersedia untuk skrip cepat, tetapi async lebih disarankan untuk aplikasi yang mengirim beberapa request.

Membaca state pool

Kebanyakan penggunaan produksi membaca state pool yang sudah didekode dari Raydium REST API (lihat sdk-api/rest-api) daripada mendekode data on-chain secara manual — ini lebih sederhana dan latensinya dapat diterima untuk sebagian besar kasus.
Untuk bot yang memerlukan latensi serendah mungkin, dekode byte on-chain secara langsung:
Layout lengkapnya ada di src/raydium/cpmm/layout.ts (sumber TS); sesuaikan ke construct sesuai kebutuhan. anchorpy dapat melakukan ini secara otomatis berdasarkan IDL — lihat di bawah.

Membangun dan mengirim swap

Untuk kesederhanaan, gunakan endpoint server-built-transaction Raydium. Server mengembalikan transaksi yang siap ditandatangani; Anda hanya perlu menambahkan signature Anda:
Ini adalah jalur tercepat menuju bot yang berfungsi. Quote server kedaluwarsa dengan cepat (≈30 detik); jangan cache.

Membangun swap client-side (via anchorpy)

Untuk latensi lebih rendah atau ketika Anda tidak dapat menjangkau API Raydium (wilayah yang disanksi, setup air-gapped):
Derivasi PDA (observation state, pool authority) mengikuti formula yang sama seperti di bab CPMM. anchorpy tidak menderivasi mereka secara otomatis.

Arsitektur bot tipikal

Struktur bot Raydium Python yang umum:
Keputusan kunci untuk produksi:
  • RPC provider. Public mainnet RPC membatasi rate secara agresif. Gunakan provider dedicated (Helius, QuickNode, Triton) untuk lalu lintas berkelanjutan.
  • WebSocket untuk state pool. client.account_subscribe(pool_id) mengirim update pada setiap perubahan state. Jauh lebih ketat daripada polling.
  • Priority fee provider. Helius memiliki endpoint getPriorityFeeEstimate; Triton punya milik mereka sendiri. Ukur fee Anda berdasarkan persentil 75 dari fee terbaru di program target.
  • Bundle untuk trade sensitif MEV. Rute melalui block engine Jito jika Anda tidak dapat mentoleransi risiko sandwich. Library Python: jito-sdk-python (pihak ketiga, kualitas bervariasi).

Membaca state farm

.account["X"].decode(bytes) anchorpy memberikan objek Python native yang cocok dengan struct IDL.

Jebakan umum

1. Penanganan desimal

float native Python adalah IEEE-754 double; jumlah di mint 9-desimal (1 SOL = 1e9 unit) tetap akurat tetapi rasio dan produk kehilangan presisi. Gunakan int (solders mengembalikan int untuk semua amount field) dan rute melalui decimal.Decimal untuk aritmetika harga apa pun.

2. Penalaran berbasis slot vs berbasis timestamp

Beberapa versi farm menggunakan counter slot; LaunchLab menggunakan timestamp. solana-py mengembalikan slot dalam respons RPC, tetapi mengonversi slot → timestamp itu lossy (bervariasi berdasarkan leader schedule). Jika Anda memerlukan waktu wall-clock, panggil get_block_time(slot) secara eksplisit.

3. Kelelahan pool koneksi

AsyncClient membuka satu koneksi HTTP per request secara default. Di bawah beban tinggi, gunakan kembali session httpx.AsyncClient dan atur limits=httpx.Limits(max_connections=100) yang sesuai.

4. Batas ukuran transaksi

Transaksi yang dibangun Python tidak lebih kecil daripada yang dibangun TS — batas 1232 byte berlaku sama. Gunakan V0 transaction (address lookup table) untuk apa pun yang melewati lebih dari ~2 pool.

Rujukan

Sumber: