Что такое апрувы токенов (Token Approvals)?
Апрувы токенов (token approvals) используются для того, чтобы дать смарт-контракту разрешение тратить ваши токены от вашего имени. Это общая схема, используемая DEX-биржами, протоколами кредитования и другими Dapp-приложениями. Например, если вы хотите торговать своими токенами на децентрализованной бирже (DEX), вам нужно будет дать бирже разрешение на обмен этих токенов от вашего имени.
Апрувы токенов также используются с NFT. Например, если вы хотите продать свой NFT на торговой площадке, вам нужно будет дать торговой площадке разрешение на передачу NFT от вашего имени. Или если вы хотите использовать свой NFT в качестве залога для получения кредита (loan), вам нужно будет дать протоколу кредитования (lending protocol) разрешение на передачу NFT от вашего имени.
Как работают апрувы токенов (Token Approvals)?
В большинстве смарт-контрактов [взаимозаменяемых токенов] (/learn/basics/what-are-tokens) и [NFT] (/learn/basics/what-are-nfts) есть структура 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 с ID 4420 от вашего имени, вы должны вызвать approve()
следующим образом:
Неограниченные апрувы NFT (Unlimited Approvals)
Для неограниченного количества апрувов NFT-контракты содержат функцию setApprovalForAll()
, позволяющую дать разрешение другому адресу на перевод любого NFT из кошелька от вашего имени. Эта функция принимает два параметра: адрес отправителя и значение true/false. Апрув осуществляется вызовом функции setApprovalForAll()
с параметром true
, а отзыв - с параметром false
.
Например, если вы хотите дать апрув OpenSea на передачу любого вашего NFT от вашего имени, вы должны вызвать setApprovalForAll()
следующим образом:
Апрувы полувзаимозаменяемых токенов (Semi-Fungible)
Полувзаимозаменяемые (Semi-Fungible) токены - это особый тип NFT, который может использоваться для представления нескольких копий одного и того же актива. Как вы можете понять, эти токены имеют много общего с NFT, поэтому их система апрувов также выглядит очень похоже. Самое большое различие заключается в том, что у semi-fungible токенов есть функция setApprovalForAll()
, но нет функции approve()
.
Риски при апруве токенов (Token Approvals)
Апрувы токенов - это ключевая часть экосистемы смарт-контрактов. Без них многие DeFi приложения были бы нежизнеспособны. Но есть и риски, связанные с апрувами токенов. Если вы даете смарт-контракту разрешение тратить ваши токены, он может потратить их в любой момент. Поэтому если смарт-контракт взломают или он будет атакован, ваши токены могут быть украдены.
Эксплойты смарт-контрактов
Один из рисков при апруве токенов заключается в том, что смарт-контракт, которому вы даете апрув, может быть взломан. Даже достаточно популярные проекты могут стать жертвой взлома, как мы видели в случае с SushiSwap эксплойтом в апреле 2023 года. В таких случаях хакеры могут украсть токены из вашего кошелька, если вы давали какие-либо разрешения взломанному смарт-контракту.
Чтобы предупредить такие ситуации, мы создали обозреватель эксплойтов, который содержит список известных эксплойтов для смарт-контрактов. Вы можете использовать этот инструмент, чтобы проверить, есть ли у вас активные одобрения во взломанных смарт-контрактах.
Скам и фишинг-атаки
Помимо взлома настоящих проектов, в крипте также существует множество мошеннических и фишинговых атак. Скамеры часто используют апрувы, чтобы украсть ваши деньги. К числу распространенных фишингов, использующих апрувы, относятся:
- Прямой апрув скамеру: Скамер обманом заставляет вас апрувнуть смарт-контракт, который он контролирует, что позволяет ему забрать деньги непосредственно из вашего кошелька.
- Размещение объявлений на NFT-маркетплейсе: Скамер обманом заставит вас апрувнуть подпись, в которой ваши активы выставлены на продажу на NFT-маркетплейсе за 0 ETH, что позволит ему "купить" ваши NFT за 0 ETH.
Такие расширения, как Revoke Extension или Pocket Universe, помогут вам защититься от подобного скама, поскольку они предупреждают, когда вы собираетесь апрувнуть смарт-контракт. Сведение количества апрувов к минимуму и их регулярный отзыв поможет вам защититься, поскольку ограничивает количество ущерба, который может нанести скамер - особенно для объявлений на маркетплейсе.