Визначення

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 про структуру транзакцій та інструкцій.
  • Розділ для розробників на сайті з практичними прикладами формування та відправлення транзакцій.