Визначення
Transaction (транзакція) — це підписаний пакет даних, який містить одну або кілька інструкцій для зміни стану блокчейна Solana, перелік облікових записів, що беруть участь в операції, актуальний хеш блоку (recent blockhash) та криптографічні підписи.
У контексті Solana транзакція не дорівнює одній дії. Це контейнер, який може містити кілька інструкцій, виконуваних послідовно в межах єдиної атомарної одиниці: або всі інструкції виконуються успішно, або жодна не застосовується.
Як працює
Життєвий цикл транзакції в Solana складається з таких етапів:
- Формування. Клієнт створює інструкції (переказ токенів, виклик програми тощо), додає перелік потрібних облікових записів, отримує recent blockhash через RPC і збирає все в єдину транзакцію.
- Підписання. Кожен обліковий запис, зазначений як підписант (signer), додає свій підпис. Без валідних підписів валідатор відхилить транзакцію.
- Надсилання. Підписана транзакція передається на валідатор через RPC-вузол.
- Валідація. Валідатор перевіряє підписи, свіжість recent blockhash, права доступу до облікових записів та ліміт обчислювальних одиниць (compute units).
- Виконання. За успішної перевірки інструкції виконуються у вказаному порядку.
- Фіналізація. Успішна транзакція потрапляє до слота, а зміни стану фіксуються в блокчейні.
Практичні нюанси, які варто знати:
- Кожен підпис у транзакції коштує фіксовану комісію — 0,000005 SOL.
- Транзакція має обмеження за обчислювальними ресурсами (compute budget), яке клієнт може вказати явно.
- Максимальний розмір транзакції — 1232 байти, що відповідає розміру одного пакету в протоколі Turbine.
Приклад
Користувач переказує 1 SOL на інший обліковий запис. Транзакція містить:
- Інструкцію transfer із вказаною сумою.
- Два облікові записи: відправник (підписант) та отримувач (тільки для читання).
- Recent blockhash, отриманий з RPC-вузла.
- Підпис відправника.
Валідатор перевіряє, що підпис відповідає ключу відправника, на балансі вистачає коштів для суми переказу та комісії, а хеш блоку ще актуальний. Після успішного виконання баланс відправника зменшується, отримувача — збільшується.
Типова помилка
Найпоширеніша помилка — плутанина між транзакцією та інструкцією. Багато хто вважає, що одна транзакція дорівнює одній дії. Насправді в одній транзакції можна, наприклад, закрити обліковий запис і одночасно переказати залишок коштів — це дві окремі інструкції в межах однієї транзакції.
Інша часта помилка — використання застарілого recent blockhash. Якщо між отриманням хешу та відправленням транзакції пройшло забагато блоків, валідатор її відхилить. Рішення просте: отримати свіжий хеш через RPC і підписати транзакцію заново.
Пов'язані матеріали
Внутрішні переходи
- Account (рахунок) — обліковий запис, який транзакція зчитує або змінює.
- Signature (підпис) — криптографічне підтвердження авторизації транзакції.
Додаткові ресурси
- Офіційна документація Solana про структуру транзакцій та інструкцій.
- Розділ для розробників на сайті з практичними прикладами формування та відправлення транзакцій.