Апруви токенів (token approvals) використовуються для того, щоб дати смарт-контракту дозвіл витрачати ваші токени від вашого імені. Це загальна схема, яка використовується DEX-біржами, протоколами кредитування та іншими Dapp-додатками. Наприклад, якщо ви хочете торгувати своїми токенами на децентралізованій біржі (DEX), вам потрібно буде дати біржі дозвіл на обмін цих токенів від вашого імені.
Апруви токенів також використовуються з NFT. Наприклад, якщо ви хочете продати свій NFT на торговому майданчику, вам потрібно буде дати торговому майданчику дозвіл на передачу NFT від вашого імені. Або якщо ви хочете використовувати свій NFT як заставу для отримання крипто кредиту (loan), вам потрібно буде дати протоколу кредитування (lending protocol) дозвіл на передачу NFT від вашого імені.
Як працюють апруви токенів (Token Approvals)?
У більшості смарт-контрактів взаємозамінних токенів і NFT є структура mapping, за допомогою якої відслідковуються всі дозволи, які видав користувач, а також кому і на який обсяг. Щоразу, коли ви надаєте або скасовуєте один із цих дозволів, mapping оновлюється.
Коли контракт намагається витратити ваші токени від вашого імені, смарт-контракт токена перевіряє mapping, щоб дізнатися, чи є у того, хто витрачає, дозвіл на витрату токенів. Якщо так, то токени витрачаються. Якщо ні, транзакція не проходить.
Апруви взаємозамінних (fungible) токенів
У взаємозамінних (fungible) токенах смарт-контракти містять функцію approve(), що дозволяє дати дозвіл іншій адресі витратити ваші токени від вашого імені. Ця функція приймає два параметри: адресу того, хто витрачає, і кількість токенів. Скасування дозволу здійснюється шляхом повторного виклику функції approve() з тими самими параметрами, але з сумою, що дорівнює 0.
Наприклад, якщо ви хочете дати дозвіл децентралізованій біржі (DEX) витратити 1000 USDC від вашого імені, ви маєте викликати approve() таким чином:

NFT Апруви (Approvals)
Для NFT існує два різних типи апрувів: обмежений і необмежений. Обмежені дозволи (Limited approvals) використовуються для того, щоб надати смарт-контракту дозвіл на передачу конкретного NFT (з певним id). Необмежені дозволи (Unlimited approvals) використовуються для надання смарт-контракту дозволу на передачу будь-якого вашого NFT. Обмежені дозволи можуть бути надані тільки одній адресі за раз, і тому більшість NFT-маркетплейсів використовують необмежені дозволи.
Обмежені апруви NFT (Limited Approvals)
Для обмежених апрувів NFT контракти містять функцію approve(), що дозволяє дати дозвіл іншій адресі на переказ певного NFT від вашого імені. Ця функція приймає два параметри: адресу відправника та id потрібного NFT. Відкликання апруву здійснюється повторним викликом функції approve() з тими самими параметрами, але із зазначенням адреси відправника 0x000…. Цей вид апруву також автоматично скасовується під час переведення.
Наприклад, якщо ви хочете дати дозвіл OpenSea на передачу вашого Pudgy Penguin від вашого імені, ви маєте викликати approve() таким чином:

Апруви напіввзаємозамінних токенів (Semi-Fungible)
Напіввзаємозамінні (Semi-Fungible) токени – це особливий тип NFT, який може використовуватися для представлення декількох копій одного і того ж активу. Як ви можете зрозуміти, ці токени мають багато спільного з NFT, тому їхня система апрувів також має дуже схожий вигляд. Найбільша відмінність полягає в тому, що у semi-fungible токенів є функція setApprovalForAll(), але немає функції approve().
Ризики при апруві токенів (Token Approvals)
Апруви токенів – це ключова частина екосистеми смарт-контрактів. Без них багато DeFi додатків були б нежиттєздатними. Але є й ризики, пов’язані з апрувами токенів. Якщо ви даєте смарт-контракту дозвіл витрачати ваші токени, він може витратити їх у будь-який момент. Тому якщо смарт-контракт зламають або його атакують, ваші токени можуть бути вкрадені.
Експлойти смарт-контрактів
Один із ризиків при апруві токенів полягає в тому, що смарт-контракт, якому ви даєте апрув, може бути зламаний. Навіть досить популярні проєкти можуть стати жертвою злому, як ми бачили у випадку з SushiSwap експлойтом у квітні 2023 року. У таких випадках хакери можуть вкрасти токени з вашого гаманця, якщо ви давали будь-які дозволи зламаному смарт-контракту.
Щоб попередити такі ситуації, команда revoke.cash створили експлорер експлойтів, який містить список відомих експлойтів для смарт-контрактів. Ви можете використовувати цей інструмент, щоб перевірити, чи є у вас активні схвалення у зламаних смарт-контрактах.
Скам і фішинг-атаки
Крім злому справжніх проєктів, у крипті також існує безліч шахрайських і фішингових атак. Скамери часто використовують апруви, щоб вкрасти ваші гроші. До числа поширених фішингів, що використовують апруви, належать:
- Прямий апрув скамеру: Скамер обманом змушує вас апрувнути смарт-контракт, який він контролює, що дозволяє йому забрати гроші безпосередньо з вашого гаманця.
- Розміщення оголошень на NFT-маркетплейсі: Скамер обманом змусить вас апрувнути підпис, у якому ваші активи виставлено на продаж на NFT-маркетплейсі за 0 ETH, що дасть йому змогу «купити» ваші NFT за 0 ETH.
Такі розширення, як Revoke Extension або Pocket Universe, допоможуть вам захиститися від подібного скаму, оскільки вони попереджають, коли ви збираєтеся апрувнути смарт-контракт. Зведення кількості апрувів до мінімуму та їхнє регулярне відкликання допоможе вам захиститися, оскільки обмежує кількість шкоди, яку може завдати скамер, – особливо для оголошень на маркетплейсі.