Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Рента — это возвратный депозит, а не комиссия. SIMD-0437 снижает депозит, который должен держать каждый счет, в пять независимо управляемых этапов. Счета, созданные до этапа, сохраняют баланс, с которым они были профинансированы, поэтому каждый этап оставляет их переполненными. Программы SPL Token и Token-2022 могут вернуть эту разницу через
WithdrawExcessLamports без закрытия счета или изменения его баланса токенов. Ничего не истекает — избыток остается на ваших собственных счетах, пока вы не решите его переместить.Что такое рента на самом деле
Каждый счет на Solana содержит депозит SOL, размер которого зависит от занимаемого им пространства. Он не расходуется — он полностью возвращается при закрытии счета. Формула:ACCOUNT_STORAGE_OVERHEAD — это фиксированные 128 байт, которые платит каждый счет независимо от его полезной нагрузки. lamports_per_byte — это сетевая константа, которую изменяет SIMD-0437.
Стандартный 165-байтовый счет SPL token всегда стоил (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, поэтому он переполнен на: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. Счет остается открытым, сохраняет баланс своего токена и просто снижается до текущего минимума.Все остальное
Нет эквивалентной инструкции. Рента освобождается только при закрытии счета — деструктивная операция со своими предусловиями, а не очистка ренты.
Счета обернутого 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 и успешно завершается.
Построение инструкции
@solana/spl-token не экспортирует для нее построитель. По состоянию на 0.4.15 запись перечисления все еще закомментирована — и обратите внимание, что upstream пишет идентификатор WithdrawalExcessLamports с дополнительным “al”, поэтому ищите это:
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 mints и принадлежащие программе счета состояния, которые все были профинансированы по старому курсу. Эта рента принадлежит протоколу, а не LP: она была оплачена тем, кто создал счет, она не является частью резервов пула и никогда не входила в кривую. Три программы получили инструкцию администратора 2026-09-09 для возврата этого, и CLMM последовала 2026-09-30:
Адреса находятся в
reference/program-addresses. Stable AMM не имеет эквивалента.
Ничто здесь не влияет на LP или трейдера. Эти инструкции перемещают lamports и только lamports. Балансы токенов, данные счета, владельцы, статус пула, предложение LP, счетчики комиссий и кривая — все остаются нетронутыми, и ни один из них не может закрыть счет. Котировка пула для свопа идентична до и после очистки. Нет действия со стороны пользователя, нет согласия и нет крайнего срока.
Три формы счета, которые обрабатывает каждая программа
Все четыре следуют одной и той же диспетчеризации, на владельце исходного счета:- Счет токена или mint, принадлежащий PDA полномочий программы: программа CPI инструкцию
WithdrawExcessLamportsпрограммы токенов (дискриминант 38), подписываясь как этот PDA. В CLMM этот PDA — самPoolState, поэтому один вызов охватывает хранилища одного пула. - Обернутое хранилище SOL —
WithdrawExcessLamportsотказывает нативным счетам, поэтому программа сначалаSyncNative(что складывает пожертвованный избыток в обернутуюamount), измеряет ровно, насколько выросла обернутая сумма,UnwrapLamportsдля этой дельты, а затем утверждает, что обернутый баланс вернулся к своему значению до синхронизации. Если эта проверка не пройдет, вся инструкция откатывается сLamportsCalculateError. Вот почему хранилище пула на стороне SOL сохраняет свою полную ликвидность через очистку. - Счет состояния, принадлежащий программе —
AmmInfo,PoolState,AmmConfig,ObservationState,PlatformConfig, CLMMTickArrayStateи так далее. Программа может дебетовать свои собственные счета напрямую, поэтому она снижает баланс доrent.minimum_balance(data_len)без CPI вообще.
Эти пути зависят от развернутой программы токенов, а не от версии крейта. Все четыре программы вручную кодируют инструкции токенов — один байт
38 для WithdrawExcessLamports, 45 плюс COption<u64> для UnwrapLamports — и отправляют их программе токенов, которая владеет исходным счетом. Обе инструкции существуют в текущих программах SPL Token и Token-2022 на mainnet. Локальный валидатор или тестовый стенд, работающий на более старой встроенной сборке SPL Token, не реализует их, и очистка против него не удается на неизвестном дискриминаторе, а не на чем-либо в программе Raydium. Протестируйте эти пути против программы токенов, клонированной из mainnet.Что все еще не может быть возвращено на месте
Вы все еще не можете вернуть ренту позиции CLMM на месте самостоятельно. Она возвращается при закрытии позиции, как говорит таблица выше.CollectExcessLamports CLMM не проверяет, кто профинансировал счет, поэтому он может взять избыток со счета PersonalPositionState или LimitOrderState. Счет остается на своем минимуме ренты, и это минимум, который возвращает закрытие. То же самое для базового mint LaunchLab: инструкция инициализации отзывает MintTokens в том же вызове, который чеканит предложение, поэтому никакой ключ никогда не может подписать WithdrawExcessLamports для этого mint и его рента заблокирована по дизайну.
Должны ли вы возвращать сейчас или ждать?
Оба варианта хороши, и разница в любом случае небольшая:- Избыток никуда не денется. Он остается на ваших собственных счетах. Ничего не истекает, ничего не очищается, нет крайнего срока.
- Ожидание дает сложный процент. Каждый этап освобождает больше с тех же счетов, и одна очистка после этапа 5 стоит столько же в комиссиях, сколько одна очистка сегодня.
- Возврат сейчас не лишает вас более поздних этапов. Счет, который вы очищаете сегодня, просто находится на текущем минимуме; следующий этап снова делает его переполненным и вы можете его снова очистить.
Дальнейшее чтение
SIMD-0437
Само предложение — пять feature gates и обоснование пошагового сокращения.
Сокращенная рента
Страница развертывания Solana: текущий этап, расписание и что меняется для новых счетов.
Сокращение ренты: анализ на основе данных
Экономика и риск роста состояния, который пошаговое развертывание предназначено для управления.
Модель счета
Как счета Solana финансируются, владеют и закрываются — фон для всего вышеперечисленного.

