Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Эта запись охватывает предстоящее обновление программы AMM v4. Она была проверена на локальной ветке релиза перед развёртыванием. Перед использованием новой инструкции подтвердите развёрнутую программу.
solana-program =2.1.0 с момента обновления 2.1, и эта привязка была блокирующей. Помощники системной программы переместились в собственный крейт solana-system-interface в Solana 3.0, spl-token достиг версии 9.0, а spl-associated-token-account — версии 8.0. Этот релиз берёт все три.
Вторая — это деньги, которые причитаются протоколу. SIMD-0437 снижает минимум, освобождаемый от rent, на 90% в пять этапов, и этап 1 приземлился на mainnet 3 сентября 2026 года. Каждый аккаунт, созданный AMM v4 до этого момента — сотни пулов-хранилищ, LP-минтов, аккаунтов AmmInfo и TargetOrders — теперь переполнен, а lamports в аккаунте, принадлежащем программе, могут быть перемещены только этой программой. Отсюда новая инструкция.
TL;DR для интеграторов
- Ничего из того, что вызывают трейдеры или LP, не изменилось.
Initialize2,Deposit,Withdraw,SwapBaseIn,SwapBaseOut,SwapBaseInV2,SwapBaseOutV2,WithdrawPnlиSetParamsсохраняют свои списки аккаунтов, макеты аргументов и математику. Ни один макет аккаунта не изменился. Ни один существующий код ошибки не переместился. - Добавлена одна инструкция:
WithdrawExcessLamports, тег18. Только для администратора, без аргументов, вариативный список аккаунтов. Она возвращает lamports выше минимума, освобождаемого от rent, из аккаунтов, контролируемых AMM v4, и ничего больше не трогает. См.products/amm-v4/instructions. - Добавлен один код ошибки:
60LamportsCalculateError.AmmErrorне нумеруется по Anchor — начинается с0— поэтому этоcustom program error: 0x3c. Коды0–59не изменены. CreateConfigAccount(тег 14) перестал читать rent sysvar и теперь документирован как инструкция с 4 аккаунтами. Ничего в этом релизе не ломается, это включено: аккаунт был последним в списке, и обработчик читает позиционно без проверки длины, поэтому инструментарий администратора, который всё ещё передаёт его, продолжает работать.- Требуется обновление IDL, если вы генерируете из него клиентов. Одна новая инструкция, один новый вариант ошибки, один изменённый список аккаунтов.
WithdrawExcessLamports
Инструкция принимает кошелёк для сбора lamports в качестве единственного подписанта и получателя, PDA-авторитет AMM v4, программу SPL Token, а затем любое количество исходных аккаунтов. Она распределяет по владельцу каждого исходного аккаунта:
Ветка wSOL — интересная. Баланс lamports обёрнутого-SOL аккаунта является его балансом токена, поэтому программа token отклоняет
WithdrawExcessLamports на нём полностью. Круговой путь через SyncNative и UnwrapLamports размером с дельту извлекает только пожертвованный избыток и оставляет обёрнутый баланс ровно там, где он был — что проверяется после, с LamportsCalculateError, если арифметика не согласна. Хранилище пула на стороне SOL поэтому сохраняет полную ликвидность при очистке, и ни один LP не видит изменения цены при очистке.
Подписанта — это выделенный ключ на кластер, жёстко закодированный в том же модуле config_feature, что и существующие адреса владельца AMM и комиссии за создание пула. В отличие от CPMM и LaunchLab, AMM v4 принимает только этот кошелёк — нет резервного администратора. Адреса находятся в reference/program-addresses.
CreateConfigAccount перестал читать rent sysvar
Solana 3.0 — это то, что делает Rent::get() естественным способом чтения параметров rent, поэтому релиз заменил все четыре вызова Rent::from_account_info(...) в программе. В трёх из них — помощники, которые создают аккаунты токенов пула, LP-минт и PDA-аккаунты во время Initialize2 — аккаунт sysvar всё ещё передаётся и всё ещё пересылается в CPI программы token, поэтому ничего об этом списке аккаунтов не меняется. В CreateConfigAccount sysvar не имел другой цели и был последним аккаунтом в списке, поэтому он вышел из документированного списка:
Отправка старого списка из пяти аккаунтов всё ещё работает. Удалённый аккаунт был последним, и
process_create_config читает свои четыре аккаунта позиционно через next_account_info без проверки общего количества, поэтому trailing rent-аккаунт никогда не просматривается. Инструментарий администратора должен быть обновлён для ясности, не срочности. Ни один конструктор, обращённый к пользователю, вообще не строит эту инструкцию.
Initialize2 — это случай, когда не следует переполнять: он также перестал вызывать Rent::from_account_info, но его rent-аккаунт остаётся в позиции 3 и всё ещё действительно используется — программа пересылает его в CPI spl_token::initialize_account и initialize_mint, которые создают хранилища пула и LP-минт. Удаление его из этого списка аккаунтов сломает создание пула.
Изменения зависимостей
Части системной программы, которые использует программа —
system_instruction::create_account, transfer, allocate, assign и сам ID программы — теперь поступают из solana-system-interface вместо solana_program::system_program и solana_program::system_instruction. ID программы идентичен по байтам, поэтому это перемещение на этапе компиляции без последствий на цепи, включая проверки InvalidSysProgramAddress, которые сравнивают с ним.
Два мёртвых модуля также были удалены: srm_token и msrm_token, объявления минтов Serum/MSRM, оставшиеся от удаления OpenBook. Ничего на них не ссылалось.
Что не изменилось
- Каждый макет аккаунта.
AmmInfo,StateData,TargetOrders,AmmConfig— те же размеры, те же смещения полей. Ни один индексатор или декодер не меняется. - Коды ошибок
0–59.LamportsCalculateErrorдобавлен в60, поэтому ничего не сдвигается. - PDA-авторитет AMM. По-прежнему один PDA для всей программы, seed
["amm authority"], nonce254. - Комиссии, учёт PnL и кривая. Не тронуты.
WithdrawExcessLamportsперемещает lamports, которые никогда не были частью резервов какого-либо пула. - Token-2022. По-прежнему не поддерживается. Новая инструкция говорит только с программой legacy SPL Token.
- ID программы. Не изменён — см.
reference/program-addresses.
Обновлённые страницы
products/amm-v4/instructions— добавленWithdrawExcessLamportsсо своим списком аккаунтов и таблицей распределения по владельцам; новый разделCreateConfigAccount/UpdateConfigAccount, охватывающий удаление rent-sysvar; добавлены строки таблицы инвентаризации и матрицы изменения состояния.products/amm-v4/overview— баннер релиза.reference/error-codes— новый раздел “AMM v4:AmmErrorне нумеруется по Anchor”, документирующий код60и нумерацию, начинающуюся с0.reference/program-addresses— новый раздел “Кошельки для сбора избыточных lamports”.solana-fundamentals/rent-and-reclaimable-rent— новый раздел “Что программы Raydium очищают на своей стороне”; примечание о обёрнутом-SOL исправлено, чтобы сказать, что обе программы token предоставляютUnwrapLamports.solana-fundamentals/toolchain— Agave 3.1.10,release.anza.xyz, Rust 1.91.0.

