Материал проверен 7 ноября 2026?
БК

ГЛАВНАЯ / ИНСТРУКЦИИ / ТРАНЗАКЦИИ SOLANA LEGACY, V0 И V1: ФОРМАТЫ СООБЩЕНИЯ И ADDRESS LOOKUP TABLE

Транзакции Solana legacy, v0 и v1: форматы сообщения и Address Lookup Table

В Solana сосуществуют legacy, v0 и v1. Формат v0 добавляет Address Lookup Tables (ALT), чтобы передавать часть адресов через однобайтовые индексы. По актуальной документации Solana, v1 активен в кластерах, увеличивает лимит размера и задаёт часть ресурсов в сообщении, но ALT не использует. Поэтому парсеру недостаточно считать каждую versioned transaction сообщением v0.

Версии сообщения

Legacy, v0 и v1 задают разные правила сериализации

Legacy использует компактный исторический формат без version prefix. V0 – версионированное сообщение, где перечень аккаунтов может включать Address Lookup Tables. V1 вводит отдельную структуру и конфигурацию ресурсов. Текущая официальная документация отмечает v1 как активный в mainnet, devnet и testnet, но отправка v1 остаётся выбором приложения и требует совместимых библиотек, сериализаторов и RPC-клиентов.

Не делайте вывод о версии только по тому, что API вернул объект VersionedTransaction. При декодировании проверяйте prefix и поддерживаемую библиотекой схему. Устаревший индексатор может понять заголовок, но неверно прочитать смещения и тем самым исказить ключи, инструкции или поля конфигурации.

  • legacy, v0 и v1 декодируются отдельно
  • ALT разрешается только для v0
  • v1 config прочитан по его схеме
Address Lookup Table

ALT сокращает сообщение через индексы, а не меняет адреса аккаунтов

В v0 сообщение содержит статические ключи и ссылки на таблицы адресов. Lookup описывает адрес ALT и набор индексов для writable и readonly адресов. Runtime разрешает индексы по данным таблицы перед исполнением. Каждый индекс занимает меньше места, чем полный ключ, поэтому формат может вместить больше адресов в ограниченный сетевой пакет.

ALT не превращает адреса в подписи и не меняет владельцев аккаунтов. Подписанты, включая fee payer, должны оставаться в static account keys. При разборе результата getTransaction учитывайте раздельные addressTableLookups и загруженные writable/readonly addresses; нельзя механически применить индекс к общему списку без соблюдения порядка разрешения.

  • статические ключи отделены от загруженных
  • индексы ALT сопоставлены в правильном порядке
  • fee payer и подписанты остались статическими
Что меняется в v1

V1 увеличивает размер сообщения и убирает ALT из формата

Согласно актуальным Solana docs, для v1 установлен предел 4096 байт, тогда как legacy и v0 ограничены 1232 байтами. V1 не использует Address Lookup Tables: адреса передаются inline. Его transaction config несёт ограничения ресурсов непосредственно в сообщении вместо старого способа извлечения конфигурации из ComputeBudget-инструкций. При чтении транзакции эти поля надо разбирать по спецификации версии, а не по правилам v0.

Активность версии в сети не означает, что любая версия SDK готова её создать или прочитать. Уточняйте поддержку отправителя, RPC-провайдера, архивного узла и аналитического конвейера. В частности, v1 требует явной поддержки и параметра версии в запросах, возвращающих транзакции или блоки.

Совместимость RPC

Задайте максимальную поддерживаемую версию во всех чтениях

Для getTransaction и getBlock укажите maxSupportedTransactionVersion с максимальной версией, которую действительно умеет ваш потребитель. Текущая документация включает значение 1 для чтения v1. Если не указать допустимую версию или оставить поддержку на 0, запрос может завершиться ошибкой при встрече более новой транзакции.

Проверьте не только HTTP RPC, но и WebSocket-подписки, блок-стримы, сырые декодеры и хранилища схем. При миграции добавьте тесты на legacy, v0 с ALT и v1, включая корректное разрешение ключей, signatures, fee payer и конфигурации. Наличие ответа от RPC ещё не гарантирует, что ваша downstream-система правильно интерпретировала его.

  • maxSupportedTransactionVersion соответствует клиенту
  • RPC и SDK поддерживают заявленную версию
  • downstream-декодер покрывает все форматы
FAQ

Частые вопросы

V1 – это другое название v0?

Нет. Это отдельный формат с иным сообщением и конфигурацией ресурсов.

В v1 есть Address Lookup Tables?

Нет. В официально описанном v1 адреса передаются inline; ALT применяется в v0.

Можно считать любой versioned transaction форматом v0?

Нет. Парсер должен различать версии и поддерживать каждую заявленную схему.

Нужно ли указывать maxSupportedTransactionVersion?

Да, чтения getTransaction/getBlock должны объявить наибольшую реально поддерживаемую версию.

Активность v1 гарантирует поддержку SDK?

Нет. Поддержку надо проверить для используемых SDK, RPC и downstream-парсера.

Итоговая проверка

Чек-лист: транзакции solana legacy, v0 и v1: форматы сообщения и address lookup table

  • формат определён из фактических байтов сообщения;
  • v0 и v1 разбираются разными правилами;
  • ALT применяется только там, где версия её поддерживает;
  • writable и readonly ключи разрешены в правильном порядке;
  • подписанты и fee payer найдены среди статических ключей;
  • RPC-запрос объявляет поддерживаемую версию;
  • проверены SDK, провайдер и все потребители транзакций.

Материал подготовлен редакцией сайта и проверен 7 ноября 2026 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.