Безпека в екосистемі Solana будується не навколо підключення гаманця, а навколо кожної окремої транзакції, яку ви підписуєте. На відміну від EVM-мереж, де типова модель передбачає довготривалі дозволи (approvals) на витрачання токенів, Solana за замовчуванням працює інакше: кожна транзакція явно вказує, які акаунти читаються, які змінюються і хто є підписантом. Проте це не означає, що ризиків немає — делегування повноважень, Cross-Program Invocation (CPI) та соціальна інженерія створюють власні вектори атак.
Цей матеріал проводить крок за кроком: від розуміння механіки дозволів до перевірки транзакцій і відкликання доступу.
Що таке дозволи (approvals) у смарт-контрактах
У контексті Solana термін «дозвіл» означає дві різні речі, які важливо не плутати.
1. Підпис транзакції (transaction signing). Коли ви обмінюєте токени на DEX, stake-єте SOL або купуєте NFT, гаманець пропонує вам підписати конкретну транзакцію. Ця транзакція містить набір інструкцій — команд для програм (смарт-контрактів). Кожна інструкція вказує, які акаунти задіяні та чи має вона право їх змінювати. Підпис означає: «я підтверджую саме цей набір дій, саме з цими акаунтами, саме зараз». Немає довготривалого доступу — лише разова операція.
2. Делегування (delegate authority). Solana Token Program підтримує інструкцію approve, яка дозволяє встановити делегата на вашому токен-акаунті. Делегат отримує право переводити токени з вашого акаунту в межах вказаної суми — без вашого додаткового підпису. Це найближчий аналог EVM-approvals у Solana. Деякі протоколи використовують це для ліквідності, кредитування чи автоматизованих стратегій.
3. Cross-Program Invocation (CPI). Програма в Solana може викликати іншу програму від вашого імені в межах однієї транзакції. Ви бачите одну операцію в гаманці, але під капотом вона може торкнутися кількох програм. Це легітимна механіка (наприклад, DEX викликає Token Program для переказу), але саме вона дозволяє шкідливим застосункам приховувати справжній обсяг дій за зручним інтерфейсом.
Як перевірити дозволи перед підключенням гаманця
Саме підключення гаманця до застосунку в Solana безпечне за визначенням: ви лише передаєте сайту свою публічну адресу. Жодних дозволів на витрачання чи читання балансу це не дає — гаманець не має такого механізму на етапі з'єднання. Справжня перевірка відбувається пізніше, коли з'являється вікно підпису транзакції.
Ось що потрібно зробити перед тим, як натиснути «Approve» або «Підписати»:
- Перевірте список програм. У гаманці (Phantom, Solflare, Backpack) відкрийте деталі транзакції. Ви побачите перелік програм, які будуть викликані. Якщо ви обмінюєте токени на відомому DEX, але в списку фігурує невідома програма — це привід зупинитися.
- Перевірте writable-акаунти. Акаунти, позначені як writable (такі, що змінюються), — це ті акаунти, стан яких транзакція може змінити. Ваші токен-акаунти з балансами будуть writable, це нормально. Але якщо writable виявляється якийсь акаунт, якого ви не впізнаєте, або акаунт, який не повинен змінюватися в цій операції — це червоний прапорець.
- Зрозумійте кожну інструкцію. У розширених налаштуваннях гаманця можна побачити окремі інструкції транзакції. Наприклад: swap (обмін), transfer (переказ), createAccount (створення акаунта). Якщо серед них є approve (делегування) або closeAccount (закриття акаунта) — переконайтеся, що розумієте, чому це потрібно саме зараз.
- Перевірте суми та токени. Очевидний, але регулярно ігнорований крок. Переконайтеся, що токен-тікер, кількість та напрямок відповідають вашим очікуванням. Шкідливі інтерфейси можуть показувати одні цифри, а в транзакцію підставляти інші.
Практичне правило: якщо ви не можете пояснити кожен елемент у деталях транзакції — не підписуйте.
Як відкликати дозволи (revoke approvals)
Оскільки в Solana базові перекази не потребують довготривалих дозволів, відкликання стосується переважно делегатів на токен-акаунтах. Якщо ви коли-небудь натискали «Approve» у застосунку, який використовує делегування, або підозрюєте, що делегат було встановлено без вашого явного дозволу (через CPI у шкідливій транзакції), його потрібно прибрати.
Крок 1. Знайдіть активних делегатів. Відкрийте деталі свого токен-акаунта. У більшості гаманців це доступно через натискання на токен у списку балансів. Шукайте поле «Delegate» або «Делегат». Якщо там вказано адресу, відмінну від вашої власної — делегат активний.
Крок 2. Відкличіть делегування. Деякі гаманці мають вбудовану кнопку «Revoke» або «Скасувати делегування» прямо в інтерфейсі токен-акаунта. Якщо такої опції немає, можна використати зовнішні інструменти (наприклад, Step Finance або спеціалізовані сервіси для управління делегатами), які формують транзакцію з інструкцією revoke — вона встановлює делегата у null і скидає делеговану суму до нуля.
Крок 3. Перевірте результат. Після відправки транзакції знову відкрийте деталі токен-акаунта та переконайтеся, що поле делегата порожнє. Транзакція відкликання вимагає оплати комісії (зазвичай частки центу в SOL), але не вимагає часу на підтвердження — Solana фіналізує її протягом секунди.
Обмеження: Відкликання делегата не повертає вже переведені токени. Воно лише запобігає майбутнім переказам без вашого підпису. Якщо токени вже виведені, відкликання делегата не допоможе — це питання для розслідування та, можливо, правоохоронних органів.
Червоні прапорці підозрілого застосунку
Більшість атак в екосистемі Solana спирається не на вразливості протоколів, а на соціальну інженерію та поспіх користувача. Ознаки, які свідчать про те, що застосунок не варто використовувати:
- Невідома програма в транзакції. Ви зайшли на DEX, але в деталізації транзакції фігурує програма, якої немає в офіційній документації цього протоколу. Це може означати, що фронтенд підмінено або що протокол передає управління сторонньому контракту через CPI.
- Запит на створення токен-акаунта для незнайомого токена. Інструкція createAccount у транзакції, де ви очікували лише обмін, може бути ознакою того, що вам намагаються надіслати сміттєвий токен або підготувати акаунт для подальшої маніпуляції.
- Закриття токен-акаунта (closeAccount). Якщо транзакція містить інструкцію закриття вашого токен-акаунта, а ви не ініціювали вивід усіх коштів — це пряма спроба втратити ваші токени. Закритий акаунт знищує запис про баланс.
- Невідповідність URL. Домени, що імітують відомі проєкти (додаткові символи, заміна літер, піддомени, які не належать проєкту). Перевіряйте офіційні посилання через перевірені джерела, а не через пошукові видачі.
- Тиск часу. «Тільки сьогодні», «закінчується через 5 хвилин», «останній шанс» — тактика, що заважає вам перевірити транзакцію. Легітимні протоколи не вимагають миттєвих рішень.
- Вимога підключити гаманець для «перевірки призу» або «отримання airdrop». Це класична схема: підключення безпечне, але наступний крок — підписати транзакцію, яка виведе кошти. Ніхто не надсилає airdrop через підпис транзакції з вашого гаманця.
- Відсутність аудиту або відкритого коду без пояснень. Не є гарантією безпеки, але поєднання закритого коду, невідомої команди та відсутності будь-якого зовнішнього аудиту — це додатковий фактор ризику, який варто зважити.
Що робити далі
Цей матеріал охоплює безпеку на рівні взаємодії з застосунками: перевірка транзакцій, розуміння делегування та розпізнавання підозрілих патернів. Проте повна картина безпеки включає також захист самої seed-фрази, налаштування гаманця, апаратні рішення та протидію фішингу на рівні пристрою.
Для глибшого занурення в ці питання перейдіть до безпеки гаманців Solana — там розібрано захист seed-фрази, мультипідпис, апаратні гаманці та протоколи безпеки на рівні інфраструктури.