Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Три программы, три схемы. Farm v3, v5 и v6 — это отдельные программы с отличающейся разметкой состояния. На этой странице они документированы параллельно. На практике большинство новых интеграций ориентируются на v6; v3 и v5 используются в режиме чтения для большинства интеграторов (стейкинг там произошёл давно, и пулы находятся на завершающей стадии).

Инвентарь аккаунтов (на один ферм, любая версия)

SDK возвращает полный набор на raydium.farm.getFarmById. Для произвольных сторонних ферм конечная точка API GET https://api-v3.raydium.io/main/farms/info?ids=<FARM_ID> тоже их возвращает.

Разметка FarmState — v6

v6 — текущая версия. Её структура аккаунта наиболее универсальна.
Поля для интеграторов:
  • staking_mint, staking_vault — что ставится и где находится.
  • total_staked — текущее количество. Необходимо для подсчёта APR: reward_per_second × 86400 / total_staked.
  • reward_infos[i].emission_per_second_x64 — скорость Q64.64. Разделите на 2^64 для истинного количества токенов в секунду.
  • reward_infos[i].open_time / end_time — для отображения UI «X дней осталось».
  • reward_infos[i].reward_per_share_x64 — счётчик, на который срезается UserLedger.

Разметка FarmState — v5

Отличия от v6:
  • По слотам, не по секундам. Цикл обновления v5 работает на слотах, а не на часах. SDK нормализует это в «в секунду» для UI, но в блокчейне единица — слоты.
  • Целая скорость эмиссии. reward_per_second — это u64. Это ограничивает минимальную выражаемую скорость одним токеном в секунду, что слишком грубо для потоков с низким выпуском на 9-десятичных монетах. v6 исправила это скоростью Q64.64.
  • Нет reward_sender. В v5 владелец — неявный отправитель; только owner может пополнить.

Разметка FarmState — v3

Единственное вознаграждение. На основе слотов. Самое старое поколение программы, поддерживаемое живым для фермерских пар RAY-USDC и SOL-USDC, датирующихся задолго до v5.

UserLedger (v6) / UserStake (v5/v3)

Состояние каждого пользователя, один аккаунт на пару (ферм, пользователь). Seeded PDA:
(Строки семян — это значения, фактически используемые SDK; версии программы исторически варьировались. Проверьте источник v6 для всего, что критично для безопасности.)
Долг по каждому потоку — это смещение учёта, описанное в обзоре:
После каждой операции Deposit, Withdraw или Harvest долг переустанавливается на текущее значение deposited × reward_per_share_x64[i] / 2^64.

PDA органов управления

Все три версии получают орган управления фермой на ферму с одним семенем. Этот PDA является органом управления хранилищем стейкинга и каждым хранилищем вознаграждения. Он подписывает каждый трансфер, который делает ферма.

Хранилища

Хранилища стейкинга и вознаграждения — это стандартные аккаунты SPL Token, чей owner — PDA органа управления фермой. Адреса хранятся на FarmState — не переделывайте; читайте из состояния. Органы замораживания должны быть отключены на монете стейкинга для v5/v6 (программа проверяет). Заметки об Token-2022:
  • v3: Только SPL Token.
  • v5: Только SPL Token.
  • v6: Поддерживает Token-2022 как на монетах стейкинга, так и на монетах вознаграждения, управляется полями staking_token_program / reward_token_program. Комиссии за трансфер на монетах Token-2022 вознаграждения взимаются при выпуске (хранилище → пользователь).

Наблюдение и APR

Фермы не хранят APR в блокчейне. Для подсчёта:
Потребители обычно берут staking_mint_usd_price из пула, к которому относится LP (через api-v3.raydium.io/pools/info/ids), и reward_usd_price из любого оракула цен.

Дальше

Источники:
  • Raydium SDK v2 Farm модуль
  • Исходный код программы Farm v6 в настоящее время не опубликован как отдельный репозиторий; IDL входит в состав SDK в raydium-io/raydium-sdk-V2 под src/raydium/farm/.