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

> Как программа Farm в Raydium распределяет токены вознаграждений стейкерам — бухгалтерия на акцию, поколения версий фермы (v3, v5, v6) и то, как фермы соотносятся, но отличаются от AMM / CLMM пулов, рядом с которыми они находятся.

<Info>
  **Эта страница переведена с помощью ИИ. За эталон принимается английская версия.**

  [Открыть английскую версию →](/products/farm-staking/overview)
</Info>

## Что такое ферма

**Ферма** — это автономная программа в цепи, которая распределяет один или несколько **токенов вознаграждения** на счета, осуществляющие ставку на **токен для ставок**. Токен для ставок почти всегда представляет собой LP-токен, выданный CPMM, AMM v4 или пулом legacy, но также поддерживаются и используются фермы с одним активом (ставка SOL, RAY или токена проекта напрямую) для небольшого числа долгоживущих программ.

Ключевые свойства:

* **На основе эмиссии, а не комиссий.** В отличие от встроенных потоков вознаграждений CLMM, вознаграждения фермы не привязаны к объёму свопов или активности пула. Бюджет фермы вносится заранее её создателем и расходуется с постоянной скоростью в секунду, пока не закончится.
* **Независимость от пула.** Пул не знает о существовании фермы. Перемещение LP между кошельками не уведомляет ферму; пользователь должен сначала активно произвести `Withdraw` из фермы. Аналогично, `Withdraw` из пула не снимает средства из фермы.
* **Бухгалтерия по пользователю и по вознаграждению.** У каждого стейкера есть счёт `UserStake` (или "Ledger") на ферму, который отслеживает их ставку и снимок счётчика вознаграждений на акцию для каждого потока вознаграждений фермы.
* **Несколько вознаграждений.** Farm v5 поддерживает до 2 вознаграждений; v6 поддерживает до 5. Каждое вознаграждение имеет собственное хранилище, скорость в секунду, время начала и окончания.

## Три активные версии

Raydium выпустила три версии программы фермы. Все активны, и каждая имеет собственную схему PDA и набор инструкций. Интеграторы должны рассматривать их как три различные программы, которые разделяют концептуальную модель.

| Версия | Расположение Program ID                                              | Макс. вознаграждений | Важные отличия                                                                                                                                                    |
| ------ | -------------------------------------------------------------------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **v3** | см. [`reference/program-addresses`](/ru/reference/program-addresses) | 1                    | Самая ранняя схема. Самые старые фермы (RAY-USDC, SOL-USDC) всё ещё проходят здесь.                                                                               |
| **v5** | см. [`reference/program-addresses`](/ru/reference/program-addresses) | 2                    | Добавлен второй слот вознаграждения и пополнения в стиле `AddReward`.                                                                                             |
| **v6** | см. [`reference/program-addresses`](/ru/reference/program-addresses) | 5                    | Текущая версия. Расширенные слоты, более чистый интерфейс администратора, поддерживает фарминг позиций CLMM через специфичный для v6 адаптер (редко на практике). |

SDK предоставляет `raydium.farm` как единый фасад — версия определяется владельцем счёта фермы. При создании интеграций в цепи вы должны осуществлять диспетчеризацию вручную.

## Бухгалтерия "вознаграждение на акцию"

Программа фермы использует стандартный паттерн "master-chef", встречающийся во всех DeFi контрактах выхода:

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

* **`reward_per_share`** хранится в счёте фермы как счётчик с фиксированной точкой (Q64.64 в v5+, Q56.8 в v3). Он только растёт.
* **`user.reward_debt`** — это снимок `reward_per_share` при последнем взаимодействии пользователя. Это не долг, который должен пользователь; это смещение, используемое для расчёта будущих начислений.
* При `Deposit` и `Withdraw` ферма сначала рассчитывает отложенные вознаграждения (кредитуя `user.pending_reward` или отправляя прямо на ATA пользователя, в зависимости от версии), затем обновляет `user.reward_debt` на текущий счётчик.
* При `Harvest` ферма выплачивает `pending_reward` и снова делает снимок `reward_debt`.

Скорость эмиссии в секунду входит в бухгалтерию через ленивое обновление:

```
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
```

Ленивое: инструкция не выдаётся "каждую секунду". Счётчик обновляется каждый раз, когда кто-то трогает ферму (`Deposit`, `Withdraw`, `Harvest`, обновление администратора). Фермы без активности накапливают растущий разрыв, который закрывается при следующем взаимодействии.

## Токен для ставок vs токен вознаграждения

**Токен для ставок хранится под опекой, а не сжигается.** Когда пользователь ставит 100 LP, ферма перемещает 100 LP из ATA пользователя в хранилище ставок фермы. При `Withdraw` ферма перемещает 100 LP обратно. Ферма никогда не вызывает пул.

**Токены вознаграждения выплачиваются из хранилищ, предварительно финансируемых создателем.** Когда создатель запускает ферму, он вносит полный бюджет вознаграждения (скажем, 1 000 000 RAY + 500 000 USDC) в два хранилища вознаграждений. Программа фермы не выпускает новые токены; она просто распределяет то, что находится в хранилище, в течение периода потока. Если хранилище исчерпано до `end_time`, эмиссия останавливается.

## Расписания эмиссии

Каждый поток вознаграждения имеет три временных параметра:

* **`start_time`** — UNIX-временная метка, в которую начинается эмиссия. До этого нет начисления.
* **`end_time`** — временная метка, в которую эмиссия останавливается. После этого `reward_per_share` перестаёт расти от этого потока.
* **`per_second`** — скорость эмиссии, пока `start_time ≤ now < end_time`.

Вознаграждение можно продлить (переместить `end_time` вперёд, пополнить хранилище) через `AddReward` / `SetRewards` на v5 / v6. Его можно перезапустить после `end_time` через `RestartRewards`. Его нельзя сократить без участия администратора.

## Что фермы не являются

* **Не распределитель комиссий.** CPMM и CLMM собирают комиссии за торговлю непосредственно в состояние пула. Фермы не трогают комиссии пула. Единственный путь от комиссий пула к держателю токена — это погашение LP или `CollectFee` CLMM.
* **Не автоматические.** LP должны быть явно внесены в ставку, чтобы получать награды фермы. Держатели LP, которые оставляют свои токены в кошельке, не получают ничего от фермы.
* **Не взаимозаменяемые.** Каждый счёт `UserStake` привязан к одной паре `(farm, user)`. Вы не можете передать свою ставку на другой кошелёк без предварительного вывода.
* **Не совместимы с позициями CLMM напрямую.** Farm v6 представил адаптер CLMM, но на практике пулы CLMM используют свои встроенные потоки вознаграждений (см. [`products/clmm/fees`](/ru/products/clmm/fees)) вместо эмиссий фермы.

## Когда фермы — правильный выбор

Используйте ферму, когда вы хотите:

* Стимулировать LP для одного из пулов CPMM или AMM v4 вашего проекта с помощью внешнего токена (токена вашего проекта, токена партнера и т.д.).
* Запустить программу ставок на единый токен (классическая "ставка RAY, получай RAY") без развёртывания собственного контракта.
* Наложить дополнительные вознаграждения поверх существующего пула без необходимости доступа администратора к этому пулу.

Используйте вместо этого встроенные потоки вознаграждений CLMM, когда ваш пул — CLMM. Они имеют идентичную экономику, но участвуют в учёте роста комиссий позиции (позиции в диапазоне получают пропорционально, позиции вне диапазона — нет) и не требуют от пользователей перемещать свой NFT позиции.

## Содержание главы

* [`accounts`](/ru/products/farm-staking/accounts) — полное макет состояния в цепи по версиям.
* [`instructions`](/ru/products/farm-staking/instructions) — каждая инструкция фермы со списком счётов и предусловиями/постусловиями.
* [`code-demos`](/ru/products/farm-staking/code-demos) — примеры TypeScript для ставок, сбора урожая и создания новой фермы.

## Куда идти дальше

* [`products/clmm/fees`](/ru/products/clmm/fees) — сравните эмиссии фермы с встроенной моделью вознаграждений CLMM.
* [`reference/program-addresses`](/ru/reference/program-addresses) — три идентификатора программы фермы.
* [`protocol-overview/versions-and-migration`](/ru/protocol-overview/versions-and-migration) — когда использовать каждую версию фермы.

Источники:

* Farm v6 IDL в составе SDK: [`raydium-io/raydium-sdk-V2`](https://github.com/raydium-io/raydium-sdk-V2) в `src/raydium/farm/`.
* [Модуль `Farm` Raydium SDK v2](https://github.com/raydium-io/raydium-sdk-V2)
