Визначення
Approval — це дозвіл власника токенів на те, щоб інша програма або акаунт міг перевести або використати певну кількість їхніх SPL-токенів. У Solana цей механізм реалізується через інструкцію approve у SPL Token Program, яка призначає делегата для конкретного токен-акаунта.
Як працює
- Ви ініціюєте транзакцію з інструкцією approve, вказуючи свій токен-акаунт, адресу делегата та максимальну суму, яку делегат має право використати.
- SPL Token Program записує делегата та затверджену суму в дані вашого токен-акаунта.
- Делегат може викликати інструкцію transfer від вашого імені, але не більше ніж на затверджену суму.
- Ви можете в будь-який момент відкликати дозвіл інструкцією revoke, яка повністю знімає делегата з токен-акаунта.
Важливий нюанс Solana: approval прив'язаний до конкретного токен-акаунта, а не до гаманця загалом. Якщо в вас кілька токен-акаунтів одного й того ж токена, дозвіл треба давати для кожного окремо.
Приклад
Ви хочете обміняти 50 USDT на інший токен через децентралізований біржовий пул. Замість того щоб безпосередньо переказати токени, ваш гаманець надсилає інструкцію approve, яка дозволяє контракту біржі списати до 50 USDT з вашого токен-акаунта. Після виконання обміну контракт використовує частину цього дозволу, а ви можете відкликати залишок інструкцією revoke.
Типова помилка
Надання approval на необмежену суму (наприклад, максимальне значення u64::MAX). Навіть якщо ви довіряєте контракту, це створює невиправданий ризик: у разі вразливості програми зловмисник зможе списати всі ваші токени з цього акаунта. Безпечна практика — затверджувати лише ту суму, яка потрібна для конкретної операції, і відкликати дозвіл одразу після завершення.
Пов'язані матеріали
Внутрішні переходи
- Phishing — як шахраї використовують фальшиві запити на approval для крадіжки токенів
- Public key — як ідентифікуються акаунти та делегати в Solana