> ## 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.

# Farm / Staking talimatları

> CreateFarm, Deposit, Withdraw, Harvest, AddReward / SetRewards / RestartRewards, WithdrawReward — farm v3, v5 ve v6 sürümlerinde eksiksiz talimatlı yüzey.

<Info>
  **Bu sayfa yapay zekâ tarafından otomatik olarak çevrilmiştir. İngilizce sürüm esas alınır.**

  [İngilizce sürümü görüntüle →](/products/farm-staking/instructions)
</Info>

<Info>
  Farm talimatları sürüme özgüdür. v6 üzerindeki bir `Deposit` işlemi v5 farm'da veya tersi şekilde çağrılamaz. SDK, farm'ın program sahibini okuyarak gönderir; zincir üstü CPI için program ID'sini önceden seçmelisiniz.
</Info>

## Talimatlı envanter

| Amaç                                            | v3                         | v5                         | v6                      |
| ----------------------------------------------- | -------------------------- | -------------------------- | ----------------------- |
| Farm oluşturma                                  | `CreateFarm`               | `CreateFarm`               | `CreateFarm`            |
| Kullanıcı defteri ekleme (örtülü olabilir)      | `CreateUserLedger`         | `CreateAssociatedLedger`   | `Deposit` içinde örtülü |
| Stake etme                                      | `Deposit`                  | `Deposit`                  | `Deposit`               |
| Unstake yapma                                   | `Withdraw`                 | `Withdraw`                 | `Withdraw`              |
| Sadece ödülleri talep etme                      | N/A (`Deposit 0` kullanın) | N/A (`Deposit 0` kullanın) | `Harvest`               |
| Oluşturulduktan sonra ödül akışı ekleme         | N/A                        | `AddReward`                | `AddReward`             |
| Mevcut ödül akışını düzenleme                   | N/A                        | `SetRewards`               | `SetRewards`            |
| Son\_zaman'dan sonra ödülü yeniden başlatma     | N/A                        | `RestartRewards`           | `RestartRewards`        |
| Talep edilmemiş ödül bütçesini çekme (yönetici) | N/A                        | `WithdrawReward`           | `WithdrawReward`        |

v3 ve v5'te, stake'i değiştirmeden ödülleri talep etmenin kanonik yolu `Deposit`'i `amount = 0` ile çağırmaktır. Program bunu saf bir ödeme olarak işler. v6 netlik için açık bir `Harvest` sunmuştur.

SDK, tüm bunları `raydium.farm.deposit({ ... })` gibi işlemlerin arkasına alır. Aşağıdaki bölümler, talimatları manuel olarak oluşturması gereken entegratörler (agregatörler, izleme araçları, SDK uzantıları) için temel hesap listelerini belgelemektedir.

## `CreateFarm` (v6)

Yeni bir v6 farm başlatın.

**Argümanlar**

```
reward_info_count: u8               // oluşturulma sırasında ödül akışı sayısı (1..=5)
reward_infos: [
  {
    open_time:            u64,
    end_time:             u64,
    emission_per_second_x64: u128,   // Q64.64
    mint:                 Pubkey,    // ödül mint'i
    token_program:        Pubkey,    // SPL veya Token-2022
  }
]
```

**Hesaplar** (özetlenmiş, `reward_info_count = 1` için)

| #  | Ad                         | W | S | Notlar                                                         |
| -- | -------------------------- | - | - | -------------------------------------------------------------- |
| 1  | `creator`                  | W | S | Kirayı öder, farm'a sahiptir.                                  |
| 2  | `farm_state`               | W |   | Yeni `FarmState` hesabı.                                       |
| 3  | `farm_authority`           |   |   | PDA `[farm_id]`.                                               |
| 4  | `staking_mint`             |   |   |                                                                |
| 5  | `staking_vault`            | W |   | Yetkilinin ATA'sı veya bir PDA vault'u olarak oluşturulur.     |
| 6  | `staking_token_program`    |   |   |                                                                |
| 7  | `reward_mint`              |   |   |                                                                |
| 8  | `reward_vault`             | W |   | İlk bütçeyi alacaktır.                                         |
| 9  | `reward_token_program`     |   |   |                                                                |
| 10 | `reward_sender_ata`        | W |   | Ödül mint'indeki yaratıcının ATA'sı; bu talimattan boşaltılır. |
| 11 | `system_program`           |   |   |                                                                |
| 12 | `token_program`            |   |   |                                                                |
| 13 | `associated_token_program` |   |   |                                                                |
| 14 | `rent`                     |   |   |                                                                |

**Ön koşullar**

* `open_time > now`, `end_time > open_time`.
* `creator` ATA'ları en az `emission_per_second_x64 × (end_time − open_time) / 2^64` ödül mint'ini tutar.
* `staking_mint` dondurma yetkinliğine sahip değildir veya dondurma yetkinliği devre dışıdır.

**Son koşullar**

* `FarmState` başlatıldı, `total_staked = 0`.
* Ödül vault'ları tam akış bütçesiyle finanse edildi.
* Yaratıcının ödül ATA'sı bu miktardan boşaltılır.

## `Deposit` (v6)

Stake etme mint'inin `amount` kadarını stake edin.

**Argümanlar**

```
amount: u64
```

**Hesaplar**

| #        | Ad                         | W | S |
| -------- | -------------------------- | - | - |
| 1        | `user`                     | W | S |
| 2        | `user_ledger`              | W |   |
| 3        | `farm_state`               | W |   |
| 4        | `farm_authority`           |   |   |
| 5        | `staking_vault`            | W |   |
| 6        | `user_staking_ata`         | W |   |
| 7..(7+n) | `reward_vault_{i}`         | W |   |
| ...      | `user_reward_ata_{i}`      | W |   |
| son−2    | `system_program`           |   |   |
| son−1    | `token_program`            |   |   |
| son      | `associated_token_program` |   |   |

`user_ledger` yoksa, SDK bir `CreateAccount` tarzı ix'i başa ekler; v6 programı sistem programı hesabı verildiğinde bunu tembelce oluşturabilir. Kalan hesaplar deseni: her canlı ödül için `(reward_vault, user_reward_ata)` ekleyin, böylece ödeme yapılabilir.

**Etki**

1. Her canlı ödül akışı için tembel güncelleme formülünü kullanarak `reward_per_share_x64[i]`'ı yenileyin.
2. `pending_i = user_ledger.deposited × reward_per_share_x64[i] / 2^64 − user_ledger.reward_debts[i]` hesaplayın.
3. `pending_i`'ı `reward_vault_{i}`'dan `user_reward_ata_{i}`'ye aktarın.
4. `amount` stake etme mint'ini `user_staking_ata`'dan `staking_vault`'a aktarın.
5. `user_ledger.deposited += amount`'ı güncelleyin ve `reward_debts[i]`'ı yeniden görüntüleyin.
6. `farm_state.total_staked += amount`'ı güncelleyin.

**Ön koşullar**

* `amount > 0` gerçek bir stake için (v6 `amount = 0`'ı yasaklar — sadece talep için `Harvest` kullanın).
* `user_staking_ata` en az `amount` tutar.
* Her canlı ödül vault'u bu kullanıcıya en az borçlu olunan tutarı tutar.

## `Withdraw` (v6)

`amount` kadar unstake yapın.

**Argümanlar**

```
amount: u64
```

**Hesaplar** — `Deposit` ile aynı.

**Etki** — `Deposit` ile aynı ödeme, ardından stake etme mint'ini kullanıcıya geri taşıyın: `staking_vault → user_staking_ata`. `total_staked` ve `user_ledger.deposited` her ikisi de azalır.

**Ön koşullar**

* `amount ≤ user_ledger.deposited`.
* Farm duraklatılmamış.

## `Harvest` (v6)

Stake değiştirilmeden beklemede olan ödülleri talep edin.

**Argümanlar** — hiçbiri.

**Hesaplar** — `Deposit` ile aynı, stake tarafında hareket yok.

**Etki** — `reward_per_share_x64[i]`'ı yenileyin, `pending_i` ödeyin, `reward_debts[i]`'ı yeniden görüntüleyin. `total_staked` veya `deposited` değişmez.

## `AddReward` (v5/v6)

Kullanmamış bir slot'a sahip mevcut farm'a yeni bir ödül akışı ekleyin.

**Argümanlar**

```
reward_info: {
  open_time:            u64,
  end_time:             u64,
  emission_per_second_x64: u128,
  mint:                 Pubkey,
  token_program:        Pubkey,
}
```

**Ön koşullar**

* Boş bir slot mevcuttur (v6'de `reward_info_count < 5`, v5'te `< 2`).
* `open_time ≥ now` (gelecekte olabilir) veya `open_time < now` yalnızca program sürümü izin verirse — v6 verir, v5 vermez.

**Son koşullar**

* Yeni akış `reward_info_count` dizininde başlatıldı, `reward_info_count++`.
* Ödül vault'u arayanın ATA'sından tam akış bütçesiyle kredilendi.

**Genel hata** — mint, mevcut bir slot'la çakışıyorsa `RewardAlreadyExists`.

## `SetRewards` (v5/v6)

Mevcut bir ödül akışını uzatın veya güçlendirin. Mint'i değiştiremez; `end_time`'ı kısaltamaz; çalışmaya başladıktan sonra `emission_per_second_x64`'ü düşüremez.

**Argümanlar**

```
reward_index:         u8
new_open_time:        u64,
new_end_time:         u64,
new_emission_per_second_x64: u128,
```

**Ön koşullar**

* Akış hala çalışıyor (`reward_state == 1`).
* `new_end_time ≥ geçerli end_time`.
* Gerekli ek bütçe `(yeni_emisyon × yeni_süre − zaten_emitlenmiş)` gönderenin ATA'sında mevcuttur ve talimattan ödül vault'una aktarılır.

v5'te, eşdeğer çağrı daha küçük bir argüman seti ile `SetRewards`'tir (canlı akışlarda saniye başına değişiklik yok).

## `RestartRewards` (v5/v6)

`end_time`'ı geçtikten sonra bir akışı yeniden başlatın. Kavramsal olarak zaten bir slot'a sahip olan mint için `AddReward` ile aynı.

**Argümanlar** — `AddReward` ile aynı şekil, o indekste.

**Ön koşullar**

* `reward_state == 2` (sona erdi).
* Arayanı slot'un `reward_sender`'ı (v6) veya farm `owner`'ı (v5).

## `WithdrawReward` (v5/v6)

Bir akış sona erdikten ve tüm stake edenler hasat etme şansı bulduktan sonra talep edilmemiş ödül vault bakiyesinin yönetici tarafından temizlenmesi.

**Argümanlar**

```
reward_index: u8
```

**Ön koşullar**

* Akış sona erdi (`reward_state == 2`).
* `reward_total_emissioned == reward_claimed + vault_balance` (şu anda hiç bir şey borçlu değil).

**Etki** — kalanı `reward_sender_ata`'ya taşır. Program, stake edenler hala beklemede talepleri varken çekmeyi engellemez; yönetici beklemede kalan stake edenler adına ilk olarak hasat etmesi beklenir (veya onların hasat etmesine izin verir). Erken temizlerseniz, kullanıcılar talep edilmemiş ödüllerine erişim kaybeder. **Bunu erken çağırmayın.**

## v5 varyasyonları

* `Deposit` / `Withdraw` v6 ile aynı şekle sahiptir ancak 2 adede kadar ödül slot'u kullanır ve `reward_per_share` `u128`'dir (farklı bir radiks ile sabit nokta).
* `CreateAssociatedLedger` ilk `Deposit`'ten önce gerekli bir ayrı çağrıdır; v6 bunu birleştirdi.
* `AddReward` mevcuttur, `Harvest` değildir (`Deposit 0` kullanın).

## v3 varyasyonları

* Tek ödül akışı. `AddReward` yok, ikinci slot yok.
* `Deposit 0` talep etmenin tek yoludur.
* `CreateUserLedger` ilk `Deposit`'ten önce çağrılmalıdır.

## Durum değişikliği matrisi

| Talimatlı        | `total_staked` | `user.deposited` | `reward_per_share` | Ödül vault'ları                    |
| ---------------- | -------------- | ---------------- | ------------------ | ---------------------------------- |
| `CreateFarm`     | 0              | —                | 0                  | yaratıcı tarafından finanse edildi |
| `Deposit(n)`     | +n             | +n               | yenilendi          | −pending (ödeme yapıldı)           |
| `Withdraw(n)`    | −n             | −n               | yenilendi          | −pending                           |
| `Harvest`        | —              | —                | yenilendi          | −pending                           |
| `AddReward`      | —              | —                | —                  | +yeni bütçe                        |
| `SetRewards`     | —              | —                | —                  | +delta bütçe                       |
| `RestartRewards` | —              | —                | —                  | +bütçe                             |
| `WithdrawReward` | —              | —                | —                  | −kalan                             |

## Sonraki adım nereye

* [`products/farm-staking/code-demos`](/tr/products/farm-staking/code-demos) — TypeScript örnekleri.
* [`products/farm-staking/accounts`](/tr/products/farm-staking/accounts) — `FarmState` / `UserLedger` / `UserStake` düzenleri.
* [`reference/error-codes`](/tr/reference/error-codes) — farm hata enumı.

Kaynaklar:

* [Raydium SDK v2 `Farm` modülü](https://github.com/raydium-io/raydium-sdk-V2)
* Raydium farm programı kaynak kodu (v3 / v5 / v6)
