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 лампортов — примерно 0.00203928 SOL, которые вы видите при открытии связанного счета токена в кошельке.

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

SIMD-0437 снижает lamports_per_byte с 6,960 до 696 — сокращение на 90% — развернутое через пять отдельных флагов функций, чтобы валидаторы могли поглощать эффект роста состояния по одному этапу за раз. Этап 1 активировался на mainnet 3 сентября 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 лампортов на байт, сохраняет этот баланс после активации этапа 1, поэтому он переполнен на:
Для 165-байтового счета SPL токена после этапа 1 это 293 × (6,960 − 6,333) = 183,711 лампортов, или примерно 0.000184 SOL на счет. Счет Token-2022 с расширениями больше, поэтому он содержит пропорционально больше — 182-байтовый счет переполнен на 310 × 627 = 194,370 лампортов. По отдельности это мелочь. Кошелек, который взаимодействовал с несколькими сотнями токенов за годы, держит значительное кратное этому, и к этапу 5 каждый 165-байтовый счет имеет 1,835,352 лампортов (примерно 0.00184 SOL) выше своего минимума.

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

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

SPL Token и Token-2022

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

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

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

Инструкция WithdrawExcessLamports

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

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

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

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

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

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

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

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

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

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

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

Следует ли вам возвращать сейчас или ждать?

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

Дополнительное чтение

SIMD-0437

Само предложение — пять флагов функций и обоснование пошагового снижения.

Сниженная рента

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

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

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

Модель счета

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