Підсумок
Транзакції V0 додають таблиці пошуку адрес (ALT), що дозволяє посилатися на акаунти через 1-байтові індекси замість 32-байтових ключів. Це економить 31 байт на кожен акаунт, розв'язаний через ALT.
Solana підтримує два формати транзакцій: застарілий та версійний (v0).
Валідатор визначає формат, перевіряючи перший байт повідомлення:
- Якщо перший байт має встановлений біт
префікса версії,
це версійне повідомлення. Наразі підтримується лише версія 0. Наступні 3
байти — це
MessageHeader. - Інакше це застаріле повідомлення. Перший байт —
num_required_signatures, а наступні 2 байти завершують заголовок.
Коли використовувати транзакції V0
Використовуйте V0, коли ваша транзакція посилається на багато акаунтів і наближається до ліміту пакета в 1232 байти. Якщо ваша транзакція вміщується в межах розміру з усіма акаунтами всередині, застарілі транзакції простіші та мають ширшу підтримку інструментів. V0 необхідний для використання таблиць пошуку адрес.
Формат повідомлення V0
Повідомлення v0 має ті самі поля, що й застаріле повідомлення, плюс додатковий
масив address_table_lookups, доданий після інструкцій:
| Поле | Розмір | Опис |
|---|---|---|
0x80 | 1 байт | Байт префікса версії |
header | 3 байти | MessageHeader (такий самий, як у застарілому) |
static_account_keys | compact-u16 + N x 32 байти | Ключі, що з'являються буквально в транзакції |
recent_blockhash | 32 байти | Blockhash |
instructions | compact-u16 + змінний | Той самий формат, що й у застарілому |
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, транзакція може включати додаткові облікові записи, використовуючи 1-байтові індекси замість 32-байтових публічних ключів, що значно зменшує накладні витрати на обліковий запис.
Під час виконання, перед початком обробки, валідатор розв'язує всі посилання на ALT у повні публічні ключі. Розв'язані адреси додаються до статичних ключів облікових записів, формуючи повний список ключів облікових записів. Облікові записи, розв'язані через ALT, дотримуються того ж порядку, що й статичні облікові записи: записи з правом запису йдуть перед записами лише для читання.
Таблиці пошуку адрес впливають лише на те, як облікові записи посилаються в он-вайр транзакції. Під час виконання середовище виконання розв'язує всі індекси в повні адреси облікових записів. Облікові записи, розв'язані через ALT, можуть бути лише з правом запису або лише для читання (не підписувачі); вони не можуть бути підписувачами.
Is this page helpful?