Skip to main content
Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Dompet yang mengintegrasikan Raydium biasanya perlu menjawab empat pertanyaan per pengguna: pool LP apa yang dimiliki pengguna ini? posisi apa (NFT CLMM) yang mereka pegang? farm apa yang mereka taruhkan? berapa nilai semuanya? Halaman ini mendokumentasikan masing-masing.

Mendeteksi posisi Raydium

Token LP klasik (CPMM, AMM v4)

Token ini terlihat seperti SPL Token lainnya: ATA pengguna memegang saldo. Dompet menampilkan ini sebagai token lain secara default. Untuk mengungkapnya sebagai posisi LP Raydium:
  1. Enumerasi akun token pengguna: connection.getParsedTokenAccountsByOwner(user, { programId: TOKEN_PROGRAM_ID }).
  2. Untuk setiap mint, periksa daftar mint Raydium: GET https://api-v3.raydium.io/pools/info/lps?lps=<LP_MINT>,... (batch hingga ~50 LP mint per panggilan).
  3. Untuk mint yang cocok, API mengembalikan referensi pool. Gunakan untuk menghitung nilai posisi yang dinyatakan dalam token:
Tampilkan baik saldo LP maupun jumlah yang dibuka — pengguna berpikir dalam token dasar, bukan unit LP.

NFT posisi CLMM

Posisi CLMM adalah NFT. PDA PersonalPositionState setiap posisi diturunkan dari mint NFT. Untuk mendeteksi:
  1. Enumerasi NFT pengguna. Untuk NFT Metaplex warisan: filter akun token ke yang memiliki supply 1 dan desimal 0.
  2. Untuk setiap mint NFT, coba turunkan PDA PersonalPositionState:
  1. Enumerasi posisi dompet dengan raydium.clmm.getOwnerPositionInfo({ programId }) dan cocokkan pada nftMint (tidak ada getPositionInfo). Setiap entri memberi Anda:
    • poolId → ambil pool untuk menyelesaikan mint
    • tickLower, tickUpper → tampilkan rentang
    • liquidity, tokensOwedA/B → hitung nilai posisi + biaya yang tertunda
    • rewardInfos → reward per-stream yang tertunda
  2. Untuk NFT posisi yang dikeluarkan di bawah Token-2022 (OpenPositionWithToken22Nft), program mint NFT adalah Token-2022 bukan SPL Token. Enumerasi keduanya saat memindai.

Taruhan farm

Farm v3 / v5 / v6 masing-masing memiliki PDA ledger per-pengguna. Penurunan:
Untuk dompet yang lebih suka deteksi sepenuhnya on-chain: iterasi PDA UserLedger yang mungkin dengan hash pengguna dengan daftar farm ID yang dikurasi “kemungkinan”. Menumerasi semua farm ID secara lengkap tidak praktis (ribuan ada); gunakan API.

Menghitung nilai posisi

LP CPMM / AMM v4

Ketiga modul tidak berbagi tanda tangan: liquidity.getPoolInfoFromRpc mengambil { poolId }, sementara cpmm.getPoolInfoFromRpc dan clmm.getPoolInfoFromRpc mengambil string base58 posisional.
Kemudian kalikan masing-masing dengan harga USD mint (dari raydium.token atau oracle harga).

Posisi CLMM

Render sebagai:
  • Nilai likuiditas (harga saat ini)
  • Biaya yang tidak dikumpulkan
  • Reward yang tertunda per aliran
  • Rentang: [tickLower_price, tickUpper_price] dengan batang visual yang menunjukkan apakah harga saat ini dalam rentang

Taruhan farm

Untuk perhitungan on-chain, cerminkan akuntansi farm:
Pastikan untuk menyegarkan reward_per_share_x64 dengan formula pembaruan malas sebelum menghitung (waktu yang telah berlalu × tingkat emisi ÷ total_staked).

Simulasi transaksi untuk pratinjau

Sebelum pengguna menandatangani, dompet biasanya menampilkan pratinjau perubahan saldo. Gunakan simulateTransaction:
Parameter accounts meminta validator untuk mengembalikan status akun pasca-simulasi untuk alamat yang terdaftar. Jauh lebih akurat daripada mencoba memprediksi perubahan saldo dari bentuk instruksi saja.

Jebakan simulasi

  • Swap CLMM memerlukan array tick yang valid. Jika ukuran input pengguna akan memasuki array tick yang tidak diinisialisasi, simulasi kembali (sama seperti eksekusi). Tampilkan ini dengan jelas di UI.
  • Biaya prioritas. Simulasi berjalan tanpa instruksi compute-budget yang diterapkan. Untuk transaksi besar yang akan melebihi 200k CU default, simulasi gagal tetapi eksekusi aktual dengan batas CU eksplisit berhasil. Selalu atur batas CU pada tx yang disimulasikan juga.
  • Blockhash segar. Simulasi menggunakan blockhash saat ini; jika penandatanganan memakan waktu >60 detik tx menjadi tidak valid. Simulasi ulang jika pengguna ragu.

Tampilan Token-2022

Token di bawah program Token-2022 harus diberi label sebagai demikian dalam daftar token dompet, karena mereka memiliki permukaan risiko yang berbeda:
  • Mint dengan biaya transfer: tampilkan transferFeeBasisPoints saat ini sebagai “Biaya transfer: X%” di sebelah saldo. Peringatkan saat menerima — pengguna mungkin tidak menyadari mereka akan menerima lebih sedikit dari yang dikirim pengirim.
  • Mint dengan transfer-hook: tampilkan ID program hook. Hook yang berbahaya dapat memblokir transfer keluar; pengguna harus memverifikasi hook adalah yang mereka harapkan.
  • Mint yang tidak dapat ditransfer: tampilkan “Tidak dapat ditransfer” dan nonaktifkan swap/kirim. Ini biasanya token terikat jiwa atau kredensial.
  • Mint yang menghasilkan bunga: saldo UI yang diturunkan dari TokenAccount.amount tidak mencerminkan bunga yang terkumpul. Gunakan amountToUiAmount dari @solana/spl-token (yang menerapkan faktor penskalaan) untuk nilai yang ditampilkan.

Tampilan APR Farm

APR yang ditampilkan kepada pengguna harus menggabungkan semua aliran reward langsung, dikonversi ke USD, dan tahunan:
Tampilkan sebagai APR: X.Y%. Jika mint staking adalah token LP, juga hitung APR biaya dasar LP yang mendasar dan beri label jumlahnya sebagai “Total APR” atau “APR + biaya”.

Penunjuk

Sumber:
  • Raydium SDK v2 — pembantu posisi/farm.
  • Endpoint posisi-pengguna di api-v3.raydium.io.