> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Ringkasan Farm / Staking

> Bagaimana program farm Raydium mendistribusikan token reward kepada para staker — akuntansi per-share, generasi farm-version (v3, v5, v6), dan bagaimana farm berhubungan tetapi berbeda dari pool AMM / CLMM yang berada di sampingnya.

<Info>
  **Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.**

  [Lihat versi bahasa Inggris →](/products/farm-staking/overview)
</Info>

## Apa itu farm

Sebuah **farm** adalah program on-chain yang berdiri sendiri dan mendistribusikan satu atau lebih **reward mint** kepada akun yang melakukan stake pada sebuah **staking mint**. Staking mint hampir selalu adalah token LP yang dikeluarkan oleh CPMM, AMM v4, atau pool pair legacy, tetapi farm single-asset (melakukan stake SOL, RAY, atau project token secara langsung) didukung dan digunakan untuk sejumlah kecil program yang berjalan lama.

Properti utama:

* **Berbasis emisi, bukan berbasis fee.** Tidak seperti reward stream built-in CLMM, reward farm tidak terikat pada volume swap atau aktivitas pool. Budget farm disimpan di awal oleh pembuat dan dipancarkan pada tingkat per-detik yang konstan sampai habis.
* **Independen dari pool.** Pool tidak mengetahui bahwa farm ada. Memindahkan LP antar wallet tidak memberitahu farm; pengguna harus secara aktif melakukan `Withdraw` dari farm terlebih dahulu. Demikian pula, `Withdraw` dari pool tidak mengeluarkan dana dari farm.
* **Ledger per-pengguna, per-reward.** Setiap staker memiliki akun `UserStake` (atau "Ledger") per farm yang melacak jumlah stake mereka dan snapshot dari counter reward-per-share untuk setiap reward stream farm.
* **Multi-reward.** Farm v5 mendukung hingga 2 reward; v6 mendukung hingga 5. Setiap reward memiliki vault, tingkat per-detik, waktu mulai, dan waktu akhir sendiri.

## Tiga versi yang aktif

Raydium telah mengeluarkan tiga versi program farm. Semuanya aktif, dan masing-masing membawa skema PDA dan instruction set sendiri. Para integrator harus memperlakukan mereka sebagai tiga program berbeda yang berbagi model konseptual.

| Versi  | Lokasi Program ID                                                      | Max rewards | Perbedaan Utama                                                                                                                              |
| ------ | ---------------------------------------------------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| **v3** | lihat [`reference/program-addresses`](/id/reference/program-addresses) | 1           | Skema paling awal. Farm tertua (RAY-USDC, SOL-USDC) masih melewati di sini.                                                                  |
| **v5** | lihat [`reference/program-addresses`](/id/reference/program-addresses) | 2           | Menambahkan slot reward kedua dan top-up gaya `AddReward`.                                                                                   |
| **v6** | lihat [`reference/program-addresses`](/id/reference/program-addresses) | 5           | Versi saat ini. Slot yang diperluas, admin lebih bersih, mendukung farming CLMM-position melalui adapter spesifik v6 (jarang dalam praktik). |

SDK mengekspos `raydium.farm` sebagai single facade — versi disimpulkan dari pemilik akun farm. Saat membangun integrasi on-chain Anda harus melakukan dispatch secara manual.

## Akuntansi reward-per-share

Program farm menggunakan pola standar "master-chef" yang terlihat di seluruh kontrak DeFi yield:

```
reward_per_share := total_rewards_distributed_by_stream / total_staked
pending(user)    := user.staked × (reward_per_share − user.reward_debt)
```

* **`reward_per_share`** disimpan pada akun farm sebagai counter fixed-point (Q64.64 di v5+, Q56.8 di v3). Hanya bertambah.
* **`user.reward_debt`** adalah snapshot dari `reward_per_share` saat interaksi terakhir pengguna. Bukan utang yang dimiliki pengguna; ini adalah offset yang digunakan untuk menghitung akrual masa depan.
* Pada `Deposit` dan `Withdraw`, farm terlebih dahulu menyelesaikan reward yang tertunda (mengkreditkan `user.pending_reward` atau mengirim langsung ke ATA pengguna, tergantung versi), kemudian memperbarui `user.reward_debt` ke counter saat ini.
* Pada `Harvest`, farm membayarkan `pending_reward` dan snapshot `reward_debt` lagi.

Tingkat emisi per-detik memasuki akuntansi melalui lazy update:

```
elapsed        := min(now, reward.end_time) − reward.last_update_time
new_emissions  := reward.per_second × elapsed
if total_staked > 0:
    reward_per_share += new_emissions / total_staked
reward.last_update_time := now
```

Lazy: tidak ada instruction yang dipancarkan "setiap detik." Counter disegarkan setiap kali seseorang menyentuh farm (`Deposit`, `Withdraw`, `Harvest`, admin update). Farm tanpa aktivitas mengumpulkan kesenjangan yang terus bertambah yang ditutup pada interaksi berikutnya.

## Staking mint vs reward mint

**Staking mint dipegang di escrow, bukan dibakar.** Ketika pengguna melakukan stake 100 LP, farm memindahkan 100 LP dari ATA pengguna ke vault staking farm. Pada `Withdraw`, farm memindahkan 100 LP kembali. Farm tidak pernah memanggil pool.

**Reward mint dibayarkan dari vault yang didanai sebelumnya oleh pembuat.** Ketika pembuat memulai farm, mereka menyetor budget reward penuh (misalnya, 1.000.000 RAY + 500.000 USDC) ke dua vault reward. Program farm tidak membuat token baru; program hanya mendistribusikan apa yang ada di vault selama durasi stream. Jika vault habis sebelum `end_time`, emisi berhenti.

## Jadwal emisi

Setiap reward stream memiliki tiga parameter waktu:

* **`start_time`** — timestamp UNIX di mana emisi dimulai. Sebelum ini, tidak ada akrual.
* **`end_time`** — timestamp di mana emisi berhenti. Setelah ini, `reward_per_share` tidak lagi tumbuh dari stream ini.
* **`per_second`** — tingkat emisi saat `start_time ≤ now < end_time`.

Reward dapat diperpanjang (dorong `end_time` ke depan, isi vault) melalui `AddReward` / `SetRewards` pada v5 / v6. Dapat dimulai ulang setelah `end_time` melalui `RestartRewards`. Tidak dapat diperpendek tanpa kerjasama admin.

## Apa yang bukan farm

* **Bukan distributor fee.** CPMM dan CLMM mengumpulkan trade fee langsung ke state pool. Farm tidak menyentuh pool fee. Satu-satunya jalur dari pool fee ke pemegang token adalah LP-redemption atau CLMM's `CollectFee`.
* **Bukan otomatis.** LP harus secara eksplisit di-stake untuk mendapatkan reward farm. Pemegang LP yang meninggalkan token mereka di wallet tidak mendapatkan apa pun dari farm.
* **Bukan fungible.** Setiap akun `UserStake` terikat pada satu pasangan `(farm, user)`. Anda tidak dapat mentransfer stake Anda ke wallet lain tanpa unstaking terlebih dahulu.
* **Tidak kompatibel dengan posisi CLMM secara langsung.** Farm v6 memperkenalkan adapter CLMM, tetapi dalam praktik pool CLMM menggunakan reward stream built-in mereka sendiri (lihat [`products/clmm/fees`](/id/products/clmm/fees)) daripada emisi farm.

## Kapan farm adalah alat yang tepat

Gunakan farm ketika Anda ingin:

* Memberikan insentif LP untuk salah satu pool CPMM atau AMM v4 proyek Anda dengan token eksternal (token proyek Anda, token mitra, dll.).
* Menjalankan program staking pada mint single-asset (klasik "stake RAY, earn RAY") tanpa menggunakan kontrak Anda sendiri.
* Menambahkan reward tambahan di atas pool yang sudah ada tanpa memerlukan akses admin ke pool tersebut.

Gunakan reward stream built-in CLMM sebagai gantinya ketika pool Anda adalah CLMM. Mereka memiliki ekonomi yang identik tetapi berpartisipasi dalam akuntansi fee-growth-inside posisi (posisi in-range mendapatkan pro rata, posisi out-of-range tidak) dan tidak memerlukan pengguna untuk memindahkan NFT posisi mereka.

## Isi bab

* [`accounts`](/id/products/farm-staking/accounts) — layout state on-chain lengkap per versi.
* [`instructions`](/id/products/farm-staking/instructions) — setiap farm instruction dengan daftar akun dan pre/postcondition.
* [`code-demos`](/id/products/farm-staking/code-demos) — contoh TypeScript untuk staking, harvesting, dan membuat farm baru.

## Ke mana selanjutnya

* [`products/clmm/fees`](/id/products/clmm/fees) — bandingkan emisi farm dengan model reward built-in CLMM.
* [`reference/program-addresses`](/id/reference/program-addresses) — tiga program ID farm.
* [`protocol-overview/versions-and-migration`](/id/protocol-overview/versions-and-migration) — kapan menggunakan setiap versi farm.

Sumber:

* Farm v6 IDL bundled dalam SDK: [`raydium-io/raydium-sdk-V2`](https://github.com/raydium-io/raydium-sdk-V2) di bawah `src/raydium/farm/`.
* [Modul `Farm` SDK Raydium v2](https://github.com/raydium-io/raydium-sdk-V2)
