Перейти к основному содержанию

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.

Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →

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

Ферма — это автономная программа в цепи, которая распределяет один или несколько токенов вознаграждения на счета, осуществляющие ставку на токен для ставок. Токен для ставок почти всегда представляет собой 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-addresses1Самая ранняя схема. Самые старые фермы (RAY-USDC, SOL-USDC) всё ещё проходят здесь.
v5см. reference/program-addresses2Добавлен второй слот вознаграждения и пополнения в стиле AddReward.
v6см. reference/program-addresses5Текущая версия. Расширенные слоты, более чистый интерфейс администратора, поддерживает фарминг позиций 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) вместо эмиссий фермы.

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

Используйте ферму, когда вы хотите:
  • Стимулировать LP для одного из пулов CPMM или AMM v4 вашего проекта с помощью внешнего токена (токена вашего проекта, токена партнера и т.д.).
  • Запустить программу ставок на единый токен (классическая “ставка RAY, получай RAY”) без развёртывания собственного контракта.
  • Наложить дополнительные вознаграждения поверх существующего пула без необходимости доступа администратора к этому пулу.
Используйте вместо этого встроенные потоки вознаграждений CLMM, когда ваш пул — CLMM. Они имеют идентичную экономику, но участвуют в учёте роста комиссий позиции (позиции в диапазоне получают пропорционально, позиции вне диапазона — нет) и не требуют от пользователей перемещать свой NFT позиции.

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

  • accounts — полное макет состояния в цепи по версиям.
  • instructions — каждая инструкция фермы со списком счётов и предусловиями/постусловиями.
  • code-demos — примеры TypeScript для ставок, сбора урожая и создания новой фермы.

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

Источники: