Кратко
Транзакции V0 добавляют Address Lookup Tables (ALT), что позволяет ссылаться на аккаунты по 1-байтовым индексам вместо 32-байтовых ключей. Это экономит 31 байт на каждый аккаунт, разрешённый через ALT.
Solana поддерживает два формата транзакций: legacy и версионный (v0).
Validator определяет формат, анализируя первый байт сообщения:
- Если в первом байте установлен
префикс версии,
это версионное сообщение. В настоящее время поддерживается только
версия 0. Следующие 3 байта — это
MessageHeader. - В противном случае это legacy-сообщение. Первый байт —
num_required_signatures, а следующие 2 байта завершают заголовок.
Когда использовать транзакции V0
Используйте V0, если ваша транзакция ссылается на множество аккаунтов и приближается к лимиту пакета в 1232 байта. Если ваша транзакция помещается в лимит размера со всеми аккаунтами внутри, legacy-транзакции проще и поддерживаются большим количеством инструментов. Для использования Address Lookup Tables требуется V0.
Формат сообщения V0
Сообщение v0 содержит те же поля, что и legacy-сообщение, плюс дополнительный
массив address_table_lookups, добавленный после инструкций:
| Поле | Размер | Описание |
|---|---|---|
0x80 | 1 байт | Байт префикса версии |
header | 3 байта | MessageHeader (как в legacy) |
static_account_keys | compact-u16 + N × 32 байта | Ключи, которые явно присутствуют в транзакции |
recent_blockhash | 32 байта | Blockhash |
instructions | compact-u16 + переменный | Такой же формат, как в legacy |
address_table_lookups | compact-u16 + переменный | Ссылки на ALT (см. ниже) |
Каждая запись в таблице поиска адресов содержит:
| Поле | Размер | Описание |
|---|---|---|
account_key | 32 байта | Публичный ключ ALT аккаунта |
writable_indexes | compact-u16 + N x 1 байт | Индексы в ALT для записей с правом записи |
readonly_indexes | compact-u16 + N x 1 байт | Индексы в ALT для записей только для чтения |
Разрешение таблицы поиска адресов
ALT — это ончейн-аккаунт, который хранит до 256 публичных ключей. Ссылаясь на ALT, транзакция может включать дополнительные аккаунты, используя однобайтовые индексы вместо 32-байтовых публичных ключей, что значительно снижает накладные расходы на каждый аккаунт.
Во время выполнения, до начала исполнения, validator разрешает все ссылки на ALT в полные публичные ключи. Разрешённые адреса добавляются к статическим ключам аккаунтов для формирования полного списка ключей аккаунтов. Аккаунты, разрешённые через ALT, следуют тому же порядку, что и статические аккаунты: сначала идут записи с правом записи, затем только для чтения.
Таблицы поиска адресов влияют только на то, как аккаунты указываются в транзакции на проводе. Во время исполнения рантайм разрешает все индексы в полные адреса аккаунтов. Аккаунты, разрешённые через ALT, могут быть только с правом записи или только для чтения (не подписанты); они не могут быть подписантами.
Is this page helpful?