Revoke.cash logo
Что такое апрувы токенов (Token Approvals)?

Что такое апрувы токенов (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() следующим образом:

Approve USDC

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() следующим образом:

Approve Pudgy Penguins 4420

Неограниченные апрувы NFT (Unlimited Approvals)

Для неограниченного количества апрувов NFT-контракты содержат функцию setApprovalForAll(), позволяющую дать разрешение другому адресу на перевод любого NFT из кошелька от вашего имени. Эта функция принимает два параметра: адрес отправителя и значение true/false. Апрув осуществляется вызовом функции setApprovalForAll() с параметром true, а отзыв - с параметром false.

Например, если вы хотите дать апрув OpenSea на передачу любого вашего NFT от вашего имени, вы должны вызвать setApprovalForAll() следующим образом:

Approve All Pudgy Penguins

Апрувы полувзаимозаменяемых токенов (Semi-Fungible)

Полувзаимозаменяемые (Semi-Fungible) токены - это особый тип NFT, который может использоваться для представления нескольких копий одного и того же актива. Как вы можете понять, эти токены имеют много общего с NFT, поэтому их система апрувов также выглядит очень похоже. Самое большое различие заключается в том, что у semi-fungible токенов есть функция setApprovalForAll(), но нет функции approve().

Риски при апруве токенов (Token Approvals)

Апрувы токенов - это ключевая часть экосистемы смарт-контрактов. Без них многие DeFi приложения были бы нежизнеспособны. Но есть и риски, связанные с апрувами токенов. Если вы даете смарт-контракту разрешение тратить ваши токены, он может потратить их в любой момент. Поэтому если смарт-контракт взломают или он будет атакован, ваши токены могут быть украдены.

Эксплойты смарт-контрактов

Один из рисков при апруве токенов заключается в том, что смарт-контракт, которому вы даете апрув, может быть взломан. Даже достаточно популярные проекты могут стать жертвой взлома, как мы видели в случае с SushiSwap эксплойтом в апреле 2023 года. В таких случаях хакеры могут украсть токены из вашего кошелька, если вы давали какие-либо разрешения взломанному смарт-контракту.

Чтобы предупредить такие ситуации, мы создали обозреватель эксплойтов, который содержит список известных эксплойтов для смарт-контрактов. Вы можете использовать этот инструмент, чтобы проверить, есть ли у вас активные одобрения во взломанных смарт-контрактах.

Скам и фишинг-атаки

Помимо взлома настоящих проектов, в крипте также существует множество мошеннических и фишинговых атак. Скамеры часто используют апрувы, чтобы украсть ваши деньги. К числу распространенных фишингов, использующих апрувы, относятся:

  1. Прямой апрув скамеру: Скамер обманом заставляет вас апрувнуть смарт-контракт, который он контролирует, что позволяет ему забрать деньги непосредственно из вашего кошелька.
  2. Размещение объявлений на NFT-маркетплейсе: Скамер обманом заставит вас апрувнуть подпись, в которой ваши активы выставлены на продажу на NFT-маркетплейсе за 0 ETH, что позволит ему "купить" ваши NFT за 0 ETH.

Такие расширения, как Revoke Extension или Pocket Universe, помогут вам защититься от подобного скама, поскольку они предупреждают, когда вы собираетесь апрувнуть смарт-контракт. Сведение количества апрувов к минимуму и их регулярный отзыв поможет вам защититься, поскольку ограничивает количество ущерба, который может нанести скамер - особенно для объявлений на маркетплейсе.

Переводчик Andrei Kalpovski