ERC-20 — стандарт токенов для платформы Ethereum, который наиболее распространен на крипторынке. Но всё же эти токены нельзя назвать идеальными. Cryptonomist разобрался в основных проблемах и недостатках, присущих ERC-20.
Базовые функции и события
Стандарт токенов ERC-20 поддерживает шесть ключевых функций:
- totalSupply — возвращает общее количество токенов;
- balance0f — отражает баланс учетной записи, заданный параметром address_owner;
- transfer — позволяет передать токены с первичного адреса на адрес конкретного пользователя;
- transferFrom — функция для передачи токенов от одного пользователя к другому;
- approve — позволяет проверить остаток токенов на смарт-контракте и списать средства в соответствие с переданным в функцию параметром;
- allowance — выполняет проверку на то, что в кошельке отправителя достаточно токенов для передачи получателю.
Кроме того, в стандарте ERC-20 предусматривает два типа событий:
- transfer — передача токенов между счетами;
- approval — событие, которое активируется при успешном выполнении функции approve.
Таким образом, благодаря правилам стандарта токены ERC-20 можно перемещать между адресами. Кроме того, функции и события дают пользователям возможность получать необходимую информацию.
Проблемы совместимости
Как только стандарт ERC-20 появился, разработчики стали активно им интересоваться и создавать свои приложения и токены на платформе Ethereum. Наличие единого стандарта, с одной стороны, упростило жизнь программистам: им больше не нужно было самостоятельно разрабатывать решения, которые бы обеспечивали совместимость с децентрализованным приложением, кошельком, блокчейном и обменником.
Но вскоре после запуска стандартов стали появляться сообщения о том, что ERC-20 несовершенен. К примеру, в десятках случаев разработчики столкнулись с утечками средств и нашли проблемы с безопасностью стандарта.
В феврале 2018 года разработчик с ником Dexaran обнаружил и описал ошибку, влияющую на токены ERC-20. Код эксплуатации уязвимости от выложил на Github.
Разработчик пояснил, что проблема связана со смарт-контрактами, которые используют ERC-20. По правилам протокола, сделка считается завершенной, если передача средств произошла успешно. Если же в процессе возникли ошибки, перевод должен быть отклонен.
Но в случае с токенами ERC-20 и смарт-контрактом, который не поддерживает новый стандарт, система не отклоняет или не принимает транзакцию. Это приводит либо к потере, либо к заморозке токенов.
Dexaran отметил, что к ошибкам может привести наступление двух ситуаций:
- Если используется функция transfer, которая позволяет отправить токены на заданный адрес.
- Если на смарт-контракт вносится депозит с применением комбинации функций approve и transferFrom.
Функция approve фактически позволяет смарт-контракту снять средства. После неё выполняется функция transferFrom, которая как раз отвечает за снятие средств.
Если же на смарт-контракт вносится депозит с использованием функции transfer, транзакция будет считаться успешной. Таким образом, блокчейн примет её, а смарт-контракт — нет.
В обоих случаях если смарт-контракт не поддерживает стандарт ERC-20, теряются средства. Разработчик заявил, что из-за этой проблемы экосистема Ethereum уже лишилась миллионов долларов.
Хардфорк DAO и его последствия
В 2016 году произошел печально известный взлом DAO, из-за которого в блокчейне Ethereum пришлось провести срочный хардфорк. В результате основная цепь продолжила работать под названием Ethereum, а вторая, поддерживаемся несогласными с политикой платформы, стала Ethereum Classic.
В апреле 2018 года OKEx и ряд других криптобирж вынуждены были остановить размещение и вывод токенов ERC-20. Причина — ошибка batchOverflow. Представители OKEx пояснили:
Эксплуатирующие ошибку злоумышленники могут создать огромное количество токенов и разместить их на обычных адресах, чтобы в дальнейшем манипулировать рынком.
Хардфорк в этом случае не проводили. Но, к примеру, заявление OKEx подтолкнуло биржу Poloniex принять аналогичное решение, причем в адрес всех токенов стандарта ERC-20. Площадка HitBTC запустила внутренний аудит, в ходе которого часть внесенных средств блокировалась.
Всё это — последствия уязвимостей и проблемы совместимости токенов ERC-20. И ещё одно доказательство того, что стандарт несовершенен и нуждается в доработке.
Что в итоге
ERC-20 — самый распространенный, но вовсе не универсальный и не совсем безопасный стандарт. В коде токенов есть ошибки, которые могут привести (и приводят!) к потере средств.
Выпуская токены стандарта ERC-20, разработчики не гарантируют, что они будут ценными, полезными или функциональными. К тому же из-за простоты использования стандарта ERC-20 появилось множество похожих токенов, и это усложняет жизнь инвесторам.
В итоге получается, что стартапы, выпускающие токены ERC-20, не ставят во главу угла безопасность пользователей. Они игнорируют опасения и предупреждения сторонних разработчиков.
Сейчас, когда рынок перерождается, новый стандарт необходим как никогда раньше. Только он сделает криптостартапы безопаснее и привлекательнее для инвесторов, гарантировав отсутствие возможности потери средств.