Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Рента — это возвратный депозит, а не комиссия. SIMD-0437 снижает депозит, который должен держать каждый счет, в пять независимо управляемых этапов. Счета, созданные до этапа, сохраняют баланс, с которым они были профинансированы, поэтому каждый этап оставляет их переполненными. Программы SPL Token и Token-2022 могут вернуть эту разницу через WithdrawExcessLamports без закрытия счета или изменения его баланса токенов. Ничего не истекает — избыток остается на ваших собственных счетах, пока вы не решите его переместить.
Прочитайте сначала Модель счета, если вы новичок в том, как финансируются счета Solana.

Что такое рента на самом деле

Каждый счет на Solana содержит депозит SOL, размер которого зависит от занимаемого им пространства. Он не расходуется — он полностью возвращается при закрытии счета. Формула:
ACCOUNT_STORAGE_OVERHEAD — это фиксированные 128 байт, которые платит каждый счет независимо от его содержимого. lamports_per_byte — это сетевая константа, которую изменяет SIMD-0437. Стандартный 165-байтовый счет SPL токена всегда стоил (128 + 165) × 6,960 = 2,039,280 lamports — примерно 0.00203928 SOL, которые вы видите при открытии связанного счета токена.

Что меняет SIMD-0437

SIMD-0437 снижает lamports_per_byte с 6,960 до 696 — сокращение на 90% — развернутое через пять отдельных feature gates, чтобы валидаторы могли поглощать эффект роста состояния по одному этапу за раз. Этап 1 активировался на mainnet 3 сентября 2026 года. Этап 2 достиг testnet в тот же день и ожидается на mainnet в середине сентября 2026 года; этапы 3–5 зарезервированы для Agave 4.4, ожидается около ноября 2026 года. Рассматривайте расписание как подлежащее изменению — Фонд заявил, что приостановит развертывание, если рост состояния будет вести себя неправильно — и читайте актуальное значение из кластера вместо того, чтобы жестко кодировать его.
SIMD-0437 зависит от SIMD-0194, который устраняет порог освобождения от ренты «чтобы избежать ненужной математики с плавающей точкой при установке параметров ренты при активации функции». На практике sysvar Rent теперь содержит lamports_per_byte_year = 6,333 с exemption_threshold = 1.0, а не старое разделение 3,480 × 2, которое давало 6,960. Не умножайте эти два поля сами — вызовите getMinimumBalanceForRentExemption и позвольте кластеру ответить.

Почему существующие счета содержат слишком много

Снижение константы меняет то, что счету нужно. Это не меняет то, что счет имеет. Счет, профинансированный при 6,960 lamports за байт, сохраняет этот баланс после активации этапа 1, поэтому он переполнен на:
Для 165-байтового счета SPL токена после этапа 1 это 293 × (6,960 − 6,333) = 183,711 lamports, или примерно 0.000184 SOL за счет. Счет Token-2022 с расширениями больше, поэтому он содержит пропорционально больше — 182-байтовый счет переполнен на 310 × 627 = 194,370 lamports. По отдельности это мелочь. Кошелек, который взаимодействовал с несколькими сотнями токенов за годы, держит значительное кратное этому, и к этапу 5 каждый 165-байтовый счет имеет 1,835,352 lamports (примерно 0.00184 SOL) выше своего минимума.

Какие счета могут это вернуть

Избыток lamports на счете, принадлежащем программе, может быть перемещен только этой программой. Можете ли вы вернуть ренту без закрытия счета, полностью зависит от того, какая программа его владеет.

SPL Token и Token-2022

Обе предоставляют WithdrawExcessLamports. Счет остается открытым, сохраняет баланс своего токена и просто снижается до текущего минимума.

Все остальное

Нет эквивалентной инструкции. Рента освобождается только при закрытии счета — деструктивная операция со своими предусловиями, а не очистка ренты.
Конкретно, для типов счетов, которые держат пользователи Raydium: Счета обёрнутого SOL — единственное исключение программы токенов: их баланс lamports является их балансом токенов, поэтому обе программы отклоняют их с TokenError::NativeNotSupported. Обе программы вместо этого предоставляют UnwrapLamports (дискриминант 45) для этого случая — он находится в spl-token-interface рядом с WithdrawExcessLamports, поэтому устаревшая программа тоже его имеет, не только Token-2022 — и @solana/spl-token поставляет createUnwrapLamportsInstruction для него начиная с версии 0.4.15. Пропустите нативные счета в простой очистке ренты и обрабатывайте их намеренно; паттерн для безопасного выполнения этого — это тот, который используют собственные программы Raydium, ниже.

Инструкция WithdrawExcessLamports

Дискриминант 38 в перечислениях инструкций обеих программ токенов. Из spl-token-interface:
Три свойства делают её безопасной для использования на каждом счете в кошельке:
  • Она не принимает сумму. Программа сама вычисляет source.lamports − rent.minimum_balance(source.data_len()), поэтому она никогда не может опустить счет ниже текущего минимума, и она остается корректной при активации последующих этапов.
  • Она ничего не закрывает. Счет сохраняет свои данные, своего владельца и баланс своего токена.
  • Она идемпотентна. Запуск её на счете, уже находящемся на минимуме, перемещает нулевые lamports и успешно завершается.
Замороженный счет токена по-прежнему имеет право: замораживание ограничивает движение токенов, а не lamports.

Построение инструкции

@solana/spl-token не экспортирует для неё построитель. По состоянию на 0.4.15 запись перечисления всё ещё закомментирована — и учтите, что в апстриме идентификатор записан как WithdrawalExcessLamports, с лишним «al», поэтому искать grep-ом нужно именно его:
Закодируйте её напрямую. Полезная нагрузка — это один байт дискриминанта:
Передайте programId каждого счета. Инструкции SPL Token и Token-2022 могут находиться в одной транзакции, но каждая должна быть адресована программе, которая владеет её исходным счетом. Измеренная на mainnet, инструкция стоит 270 compute units на программе SPL Token и 1,414 на Token-2022 — в любом случае незначительно. Реальное ограничение — размер транзакции, а не вычисления.

Поиск счетов, подлежащих возврату

Не выводите избыток из жестко закодированного курса. Спросите кластер, что каждому счету нужно прямо сейчас, чтобы один и тот же код продолжал работать через все пять этапов:
getMinimumBalanceForRentExemption(0) — это полезный побочный канал: он возвращает ровно 128 × lamports_per_byte, поэтому деление на 128 говорит вам, на каком этапе развертывания находится кластер, без разбора sysvar Rent.

Группировка: сколько поместится в одну транзакцию

Каждая инструкция WithdrawExcessLamports вносит один уникальный ключ записываемого счета — 32 байта в скомпилированном сообщении — плюс примерно 7 байт кодирования инструкции. Назначение, полномочия и плательщик комиссии — все один и тот же кошелек, поэтому они стоят один ключ между ними. Против лимита транзакции в 1,232 байта примерно 25 инструкций поместятся после учета инструкций бюджета вычислений и хеша блока. Двадцать на транзакцию — это безопасное рабочее число, и это то, что использует собственная реализация Raydium. Кошелек со 116 счетами, подлежащими возврату, поэтому очищает в шести транзакциях, по одной базовой комиссии 5,000 lamports каждая. Обратите внимание на экономику: комиссия взимается за транзакцию, а не за счет. Возврат меньшего количества счетов не стоит меньше, поэтому частичная очистка редко стоит дополнительных круговых поездок.

Возврат через Raydium

Страница raydium.io/reclaim-rent сканирует счета SPL Token и Token-2022 подключенного кошелька, показывает общую сумму, разделенную по программам, и очищает все в пакетных транзакциях. Сканирование только для чтения — никакой подписи до нажатия Reclaim all rent. Страница намеренно охватывает только счета токенов. Типы счетов, которые могут освобождать ренту только путем закрытия, исключены, а не указаны как недоступные, потому что закрытие счета — это другое, деструктивное действие.

Возврат из демонстрации SDK

Баннер версии. Эти демонстрации нацелены на @raydium-io/raydium-sdk-v2@0.2.64-alpha против Solana mainnet-beta, проверено в сентябре 2026 года; сам репозиторий raydium-sdk-V2-demo в настоящее время устанавливает 0.2.62-alpha, и эти две версии взаимозаменяемы здесь. WithdrawExcessLamports кодируется вручную и независим от версии SDK — SDK используется только для построения и группировки транзакций.
Два скрипта в raydium-sdk-V2-demo/src/rent:
reclaimRent.ts группирует по 20 счетов на транзакцию и подписывает все пакеты за один раз:
Симулируйте перед отправкой. simulateTransaction с accounts.addresses возвращает балансы lamports после выполнения, что является самым дешевым способом подтвердить, что арифметика совпадает с тем, что кластер действительно сделает.

Что программы Raydium очищают со своей стороны

Ваш кошелек — не единственное место, где сокращение освобождает lamports. Каждый пул тоже держит ренту — хранилища, LP миинты и принадлежащие программе счета состояния, которые все были профинансированы по старому курсу. Эта рента принадлежит протоколу, а не LP: она была оплачена тем, кто создал счет, она не является частью резервов пула, и она никогда не входила в кривую. Три программы получили инструкцию администратора 2026-09-09 для её возврата: Адреса находятся в reference/program-addresses. CLMM и Stable AMM не были частью этого выпуска. Ничего здесь не влияет на LP или трейдера. Эти инструкции перемещают lamports и только lamports. Балансы токенов, данные счета, владельцы, статус пула, предложение LP, счетчики комиссий и кривая все остаются нетронутыми, и ни один из них не может закрыть счет. Котировка пула для свопа идентична до и после очистки. Нет действия со стороны пользователя, нет согласия и нет крайнего срока.

Три формы счета, которые обрабатывает каждая программа

Все три следуют одной и той же диспетчеризации, на владельце исходного счета:
  • Счет токена или минт, принадлежащий PDA полномочий программы — программа CPI инструкцию WithdrawExcessLamports программы токенов (дискриминант 38), подписываясь как этот PDA.
  • Хранилище обёрнутого SOL — WithdrawExcessLamports отказывает нативным счетам, поэтому программа сначала SyncNative (что складывает пожертвованный избыток в обёрнутый amount), измеряет ровно, насколько вырос обёрнутый amount, UnwrapLamports для этой дельты, а затем утверждает, что обёрнутый баланс вернулся к своему значению до синхронизации. Если эта проверка не пройдет, вся инструкция откатывается с LamportsCalculateError. Вот почему хранилище пула на стороне SOL сохраняет свою полную ликвидность через очистку.
  • Счет состояния, принадлежащий программе — AmmInfo, PoolState, AmmConfig, ObservationState, PlatformConfig и так далее. Программа может дебетовать свои собственные счета напрямую, поэтому она опускает баланс до rent.minimum_balance(data_len) без CPI вообще.
Счета, принадлежащие чему-либо другому, пропускаются молча, поэтому передача несвязанного счета безвредна, а не фатальна. Последовательность обёрнутого SOL стоит скопировать, если вы держите нативные счета самостоятельно: это единственный способ снять избыток со счета wSOL без изменения того, что счет сообщает как его баланс токена.
Эти пути зависят от развернутой программы токенов, а не от версии крейта. Все три программы вручную кодируют инструкции токенов — один байт 38 для WithdrawExcessLamports, 45 плюс COption<u64> для UnwrapLamports — и отправляют их в программу токенов, которая владеет исходным счетом. Обе инструкции существуют в текущих программах SPL Token и Token-2022 на mainnet. Локальный валидатор или тестовый стенд, работающий со старой встроенной сборкой SPL Token, не реализует их, и очистка против него не удается на неизвестном дискриминаторе, а не на чем-либо в программе Raydium. Протестируйте эти пути против программы токенов, клонированной из mainnet.

Что всё ещё не может быть возвращено на месте

Рента позиции CLMM не изменяется всем этим — она возвращается при закрытии позиции, как говорит таблица выше. То же самое для базового минта LaunchLab: инструкция инициализации отзывает MintTokens в том же вызове, который чеканит предложение, поэтому никакой ключ никогда не может подписать WithdrawExcessLamports для этого минта и его рента заблокирована по дизайну.

Должны ли вы возвращать сейчас или ждать?

Оба варианта хороши, и разница в любом случае небольшая:
  • Избыток никуда не денется. Он остается на ваших собственных счетах. Ничего не истекает, ничего не очищается, нет крайнего срока.
  • Ожидание дает сложный процент. Каждый этап освобождает больше от одних и тех же счетов, и одна очистка после этапа 5 стоит столько же в комиссиях, сколько одна очистка сегодня.
  • Возврат сейчас не лишает вас последующих этапов. Счет, который вы очищаете сегодня, просто находится на текущем минимуме; следующий этап делает его переполненным снова и вы можете его очистить снова.
Единственная реальная стоимость раннего возврата — это базовая комиссия, и единственная реальная стоимость ожидания — это то, что lamports остаются неподвижными немного дольше.

Дальнейшее чтение

SIMD-0437

Само предложение — пять feature gates и обоснование пошагового сокращения.

Сокращённая рента

Страница развертывания Solana: текущий этап, расписание и что меняется для новых счетов.

Сокращение ренты: анализ на основе данных

Экономика и риск роста состояния, который пошаговое развертывание предназначено для управления.

Модель счета

Как финансируются, владеют и закрываются счета Solana — фон для всего вышеперечисленного.