Симуляція транзакції — це тестовий прогін вашої операції на мережі Solana, який показує, що саме станеться після підписання, без фактичного виконання. Це найнадійніший спосіб перевірити, чи не відправляєте ви кошти на неправильну адресу, чи не схвалюєте прихований переказ і чи не втратите токени через помилку в смарт-контракті.

Що таке симуляція транзакції

Коли ви натискаєте «Підписати» в гаманці, операція ще не потрапляє в блокчейн одразу. Більшість сучасних гаманців спочатку надсилають транзакцію до вузла мережі через RPC-метод simulateTransaction. Вузол проганяє всі інструкції транзакції поточному стані блокчейну, але не записує зміни. Результат повертається вам у гаманець до того, як ви дасте остаточну згоду.

Уявіть це як попередній перегляд документа перед друком: ви бачите остаточний результат і можете скасувати, якщо щось не так.

Симуляція показує три ключові речі:

  • Чи успішна транзакція. Якщо смарт-контракт містить помилку або умови не виконані, ви побачите це до підписання.
  • Які зміни балансів відбудуться. Скільки SOL спишеться як комісія, скільки токенів залишиться на вашому рахунку, скільки отримає інший адресат.
  • Які додаткові дії викликає транзакція. Деякі контракти через механізм CPI (Cross-Program Invocation) можуть ініціювати приховані перекази. Симуляція їх відображає.

Важливо розуміти: симуляція не вимагає від вас жодних секретів. Гаманець надсилає на вузол саму транзакцію без підпису, а вузол повертає лише результат обчислення. Ваша seed-фраза, приватний ключ та інші дані нікуди не передаються.

Як використати симуляцію перед підписом

Практичне користування симуляцією зводиться до кількох перевірок, які варто робити кожного разу перед натисканням «Підтвердити».

Крок 1. Знайдіть панель симуляції у своєму гаманці. У Phantom, Solflare та інших популярних гаманцях після ініціації транзакції з'являється вікно підтвердження. У ньому є розділ із попереднім переглядом змін балансів — це і є результат симуляції. Якщо гаманець не показує симуляцію автоматично, перевірте налаштування: у деяких випадках її треба увімкнути.

Крок 2. Перевірте напрямок руху коштів. У таблиці змін має бути дві колонки: що надходить і що списується. Переконайтеся, що адреса отримувача збігається з тією, куди ви реально хотіли надіслати кошти. Навіть одну літеру чи цифру в адресі достатньо, щоб кошти пішли на чужий рахунок без можливості повернення.

Крок 3. Перевірте суми. Окремо зверніть увагу на комісію (fee) — вона списується в SOL завжди, навіть якщо ви переказуєте інший токен. Переконайтеся, що сума переказу відповідає вашому наміру і що після списання залишиться достатньо коштів для інших операцій.

Крок 4. Шукайте неочікувані рядки. Якщо ви просто переказуєте токени одному адресату, у симуляції має бути мінімум записів: списання з вашого рахунку, зарахування на рахунок отримувача, сплата комісії. Якщо ви бачите додаткові перекази на треті адреси, створення нових рахунків або виклики невідомих вам програм — це серйозний привід зупинитися. Таке може свідчити про шкідливий контракт або про те, що ви підключилися до фішингового застосунку.

Крок 5. Зверніть увагу на помилки симуляції. Якщо гаманець показує повідомлення про помилку (error) замість таблиці змін, транзакція не виконається. Не намагайтеся «підписати все одно» — це марно. Помилка означає, що на рівні програми умови не виконані: недостатньо баланс, закінчився термін дії транзакції, рахунок заморожено тощо.

Типова помилка: ігнорувати симуляцію і натискати «Підтвердити» якомога швидше. Це звичка, яку формують централізовані застосунки, де все можна скасувати. У блокчейні скасувати підписану транзакцію неможливо.

Обмеження симуляції

Симуляція — потужний інструмент, але вона не дає абсолютної гарантії. Ось що варто мати на увазі.

Стан мережі змінюється між симуляцією і фактичним виконанням. Симуляція працює з поточним станом блокчейна в момент запиту. Якщо між симуляцією і вашим підписанням хтось інший змінить стан відповідних рахунків (наприклад, перекаже кошти з того ж рахунку), реальний результат може відрізнятися. Такі ситуації трапляються рідко, але вони можливі.

MEV-атаки не видно в симуляції. MEV (Maximal Extractable Value) — це ситуація, коли сторонній учасник мережі вставляє свої транзакції перед вашою або після неї, щоб отримати вигоду. Симуляція показує вашу транзакцію в ізоляції, тоді як в реальному блоці вона може опинитися в іншому контексті. Наприклад, ціна токена в пулі ліквідності може змінитися за мілісекунди через транзакцію іншого користувача.

Деякі контракти поводяться по-різному залежно від підпису. Більшість програм Solana не перевіряють сам підпис під час симуляції, але теоретично програма може містити логіку, яка веде себе інакше, коли транзакція дійсно підписана. На практиці в екосистемі Solana це малоймовірно, але такий сценарій існує архітектурно.

Симуляція не показує майбутніх наслідків дозволів. Якщо ви підписуєте транзакцію, яка надає застосунку дозвіл на використання ваших токенів, симуляція відобразить лише поточну операцію. Вона не покаже, що цей дозвіл може бути використаний пізніше для інших переказів. Контроль дозволів — це окрема тема, яку ми розглядаємо в наступному матеріалі.

Практичне правило: симуляція захищає від помилок і очевидного шахрайства в межах конкретної транзакції. Але вона не замінює загальну обережність: перевірку джерела посилання, репутацію застосунку та розуміння того, які дозволи ви надаєте.

Наступний крок

Симуляція охоплює безпеку в межах однієї транзакції. Але багато проблем виникає не від одиночних переказів, а від дозволів, які ви надаєте застосункам під час підключення гаманця. Дозвіл може дозволити сторонньому контракту взаємодіяти з вашими токенами без додаткового підписання кожної операції. У наступному матеріалі ми детально розберемося, що таке дозволи застосунків у Solana, як їх читати та як безпечно керувати ними.