Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Кошельки, интегрирующие Raydium, обычно должны ответить на четыре вопроса для каждого пользователя: в каких пулах у этого пользователя есть LP? какие позиции (CLMM NFT) он держит? в каких фермах он застейкан? какова общая стоимость? На этой странице описывается каждый из этих вопросов.
Обнаружение позиций Raydium
Классические LP-токены (CPMM, AMM v4)
Они выглядят как любой другой SPL Token: баланс пользователя хранится в его ATA. Кошелек по умолчанию показывает это как обычный токен. Чтобы раскрыть это как позицию Raydium:- Перечислите токен-аккаунты пользователя:
connection.getParsedTokenAccountsByOwner(user, { programId: TOKEN_PROGRAM_ID }). - Для каждого минта проверьте список минтов Raydium:
GET https://api-v3.raydium.io/pools/info/lps?lps=<LP_MINT>,...(группируйте до ~50 LP-минтов за вызов). - Для совпадающих минтов API возвращает ссылку на пул. Используйте её для вычисления стоимости позиции в токенах:
CLMM позиции-NFT
CLMM позиции — это NFT. PDAPersonalPositionState каждой позиции производна от минта NFT. Для обнаружения:
- Перечислите NFT пользователя. Для устаревших Metaplex NFT: отфильтруйте токен-аккаунты по тем, у которых supply 1 и decimals 0.
- Для каждого NFT-минта попытайтесь вывести PDA PersonalPositionState:
-
Перечислите позиции кошелька с помощью
raydium.clmm.getOwnerPositionInfo({ programId })и сопоставьте поnftMint(методаgetPositionInfoнет). Каждая запись даёт вам:poolId→ получите пул для разрешения минтовtickLower,tickUpper→ отобразите диапазонliquidity,tokensOwedA/B→ вычислите стоимость позиции + ожидающие комиссииrewardInfos→ ожидающие вознаграждения за поток
-
Для позиций-NFT, выпущенных под Token-2022 (
OpenPositionWithToken22Nft), программа минта NFT — это Token-2022, а не SPL Token. Перечисляйте обе при сканировании.
Ставки в фермах
Farm v3 / v5 / v6 каждая имеет PDA реестра для каждого пользователя. Выводы:UserLedger, хешируя пользователя с курируемым списком «вероятных» ID ферм. Перечисление всех ID ферм исчерпывающе непрактично (существуют тысячи); используйте API.
Вычисление стоимости позиции
CPMM / AMM v4 LP
Три модуля не имеют одинаковой сигнатуры:liquidity.getPoolInfoFromRpc принимает { poolId }, а cpmm.getPoolInfoFromRpc и clmm.getPoolInfoFromRpc принимают позиционную строку base58.
raydium.token или ценового оракула).
CLMM позиция
- Стоимость ликвидности (текущая цена)
- Невзятые комиссии
- Ожидающие вознаграждения за каждый поток
- Диапазон:
[tickLower_price, tickUpper_price]с визуальной полосой, показывающей, находится ли текущая цена в диапазоне
Ставка в ферме
reward_per_share_x64 с помощью формулы ленивого обновления перед вычислением (прошедшее время × скорость эмиссии ÷ total_staked).
Симуляция транзакции для предпросмотра
Перед подписанием пользователем кошельки обычно показывают предпросмотр изменений баланса. ИспользуйтеsimulateTransaction:
accounts просит валидатор вернуть состояние аккаунта после симуляции для указанных адресов. Намного точнее, чем попытка предсказать изменение баланса только по форме инструкции.
Подводные камни симуляции
- CLMM свопы требуют валидные tick-массивы. Если размер ввода пользователя пересекает неинициализированный tick-массив, симуляция откатывается (как и выполнение). Ясно отобразите это в интерфейсе.
- Приоритетная комиссия. Симуляция выполняется без применённых инструкций compute-budget. Для большой транзакции, которая превысит стандартные 200k CU, симуляция не удаётся, но фактическое выполнение с явным лимитом CU успешно. Всегда устанавливайте лимит CU и на симулируемую транзакцию.
- Свежий блокхеш. Симуляция использует текущий блокхеш; если подписание занимает >60s, транзакция становится недействительной. Пересимулируйте, если пользователь колеблется.
Отображение Token-2022
Токены под программой Token-2022 должны быть помечены как таковые в списке токенов кошелька, так как они имеют разные поверхности риска:- Минты с комиссией передачи: отобразите текущий
transferFeeBasisPointsкак «Комиссия передачи: X%» рядом с балансом. Предупредите при получении — пользователи могут не понять, что получат меньше, чем отправитель отправил. - Минты с хуком передачи: отобразите ID программы хука. Вредоносный хук может заблокировать исходящие передачи; пользователи должны проверить, что хук — это тот, который они ожидают.
- Непередаваемые минты: отобразите «Непередаваемо» и отключите swap/send. Это обычно soulbound-токены или учётные данные.
- Минты с начислением процентов: баланс UI, полученный из
TokenAccount.amount, не отражает начисленные проценты. ИспользуйтеamountToUiAmountиз@solana/spl-token(который применяет коэффициент масштабирования) для отображаемого значения.
Отображение APR фермы
APR, отображаемый пользователям, должен объединять все активные потоки вознаграждений, преобразованные в USD и годовые:APR: X.Y%. Если минт ставки — это LP-токен, также вычислите базовый APR комиссии базового LP и обозначьте сумму как «Total APR» или «APR + fees».
Ссылки
products/clmm/ticks-and-positions— вывод стоимости позиции.products/farm-staking/accounts— поля состояния фермы.algorithms/token-2022-transfer-fees— семантика отображения для токенов с комиссией передачи.
- Raydium SDK v2 — помощники позиций/ферм.
- Эндпоинты позиций пользователя на
api-v3.raydium.io.

