ERC-20
ERC-20 (Ethereum Request for Comments 20, EIP-20, ERC20) — это стандарт взаимозаменяемых токенов в сети Эфириум, который задаёт обязательный набор функций и событий контракта токена. Кошельки и биржи могут работать с любым контрактом, реализующим этот набор, одним и тем же кодом, без доработки под каждый токен.
Стандарт предложили Фабиан Фогельштеллер и Виталик Бутерин: черновик EIP-20 датирован 19 ноября 2015 года, позже документ утвердили окончательно. До ERC-20 каждая команда писала учёт монет по-своему, и для подключения нового токена биржам приходилось разбирать его код. Единый интерфейс снял эту проблему и сделал выпуск монеты делом нескольких десятков строк кода, отсюда волна выпусков токенов в 2017 году. В формате ERC-20 работают USDC и USDT в основной сети (контракт USDT с отступлениями от стандарта в возвращаемых значениях), токены протоколов и большинство монет, которые выпускают поверх этой сети.
Шесть функций и два события стандарта
Стандарт ERC-20 описывает только интерфейс, то есть какие команды контракт обязан понимать, а не то, как он устроен внутри. Обязательная часть невелика:
Элемент | Что делает |
|---|---|
totalSupply | возвращает общее количество выпущенных монет |
balanceOf | возвращает баланс конкретного адреса |
transfer | переводит монеты с адреса отправителя на другой адрес |
approve | разрешает другому адресу или контракту тратить монеты владельца в пределах лимита |
allowance | показывает, сколько ещё может потратить получивший разрешение адрес |
transferFrom | переводит монеты от имени владельца в пределах разрешения |
событие Transfer | фиксируется при каждом движении монет |
событие Approval | фиксируется при каждом успешном вызове approve |
Название, тикер и число знаков после запятой (name, symbol, decimals) стандарт относит к необязательным полям. Тикер задаёт сам автор контракта, проверки уникальности нет, поэтому один и тот же тикер может быть у разных контрактов, а отличить настоящий токен от подделки можно только по адресу контракта.
Разрешения: удобство и главный источник потерь
Пара approve и transferFrom отличает токен ERC-20 от ETH, который можно только отправить. Владелец не отправляет монеты обменнику или протоколу, а выдаёт ему разрешение списать нужную сумму, и протокол забирает её сам в момент сделки. На этой схеме построены децентрализованные обменники и кредитные протоколы: без разрешения контракт не может провести обмен от имени пользователя.
Обратная сторона разрешения в том, что оно живёт дольше сделки. Многие интерфейсы по умолчанию запрашивают неограниченный лимит, чтобы не просить подтверждение каждый раз, и если адрес, которому выдано разрешение, окажется вредоносным или сайт подсунет разрешение на адрес мошенника, мошенник сможет списать все монеты этого вида без новых подписей. По подсчёту Scam Sniffer, в 2025 году фишинговые сайты-дрейнеры в основной сети и совместимых с ней сетях через вредоносные подписи и разрешения украли не менее 83,85 млн $ у 106 106 жертв, а крупнейшая единичная кража на 6,5 млн $ прошла через подпись Permit, то есть разрешение, выданное подписью без отдельной транзакции (EIP-2612 или Permit2). В 2024 году потери от дрейнеров составляли около 494 млн $.
У разрешений есть и уязвимость, описанная в самом стандарте: при смене лимита получатель может успеть потратить и старое, и новое значение, поэтому EIP-20 рекомендует интерфейсам сначала обнулять разрешение. От забытых разрешений стандарт не защищает: выданное однажды, оно остаётся открытой дверью.
ERC-20, BEP-20 и TRC-20
Стандарт ERC-20 скопировали другие сети, которые используют совместимую виртуальную машину или повторяют её интерфейс. Интерфейс токенов этих стандартов одинаков, но живут они в разных сетях:
BEP-20 в сети BNB Smart Chain расширяет ERC-20, адреса тоже начинаются с 0x, а плата за перевод взимается в BNB;
TRC-20 в сети TRON повторяет интерфейс ERC-20, но адреса начинаются с T, а перевод оплачивается ресурсами сети (энергией и пропускной способностью) или сжиганием TRX при их нехватке;
в сетях второго уровня поверх основной сети (Arbitrum, Optimism, Base и другие) токены используют тот же стандарт ERC-20 и тот же формат адреса.
Одинаковый формат адреса у ERC-20 и BEP-20 удобен и опасен одновременно. Перевод USDT в сети BEP-20 на адрес, который владелец знает как адрес в основной сети, не пропадёт: монеты окажутся на том же адресе, но в сети BNB Smart Chain. Если это обычный адрес с ключом у получателя, монеты можно вернуть: переключить кошелёк на BNB Smart Chain, имея немного BNB на газ. Для адреса смарт-контрактного кошелька это не всегда возможно. Если адрес принадлежит бирже, которая эту сеть не поддерживает, всё решает её служба поддержки.
Ограничения стандарта
ERC-20 создавался как минимальный интерфейс, и с 2015 года у него накопились известные ограничения. Часть из них решают расширения и новые стандарты, но основная масса токенов по-прежнему работает по исходной схеме. Что стоит знать держателю:
перевод токена требует монет основной сети для оплаты комиссии за газ: обычный перевод USDT с адреса, где нет ETH, не уйдёт, если газ не оплачивает сторонний сервис;
обычный перевод ERC-20 расходует около 45 000–65 000 единиц газа против 21 000 у перевода ETH, потому что контракт обновляет записи о балансах;
монеты, отправленные функцией transfer на адрес самого контракта токена или другого контракта, который не умеет с ними работать, могут застрять навсегда, если в контракте нет функции возврата: стандарт не проверяет, способен ли получатель принять монеты;
контракт конкретного токена может содержать дополнительные функции сверх стандарта, например заморозку адресов у USDT или право владельца выпускать новые монеты, и интерфейс ERC-20 об этом не сообщает.
Последний пункт важнее остальных. Соответствие ERC-20 означает совместимость с кошельками, а не безопасность: о правах владельца токена говорит только код контракта.
Как пользоваться токенами ERC-20
Стоимость перевода в основной сети зависит от цены газа и курса ETH, а не от суммы, и обе величины постоянно меняются. Плату считают по формуле: единицы газа × цена газа × курс ETH.
Условный пример: при цене газа 0,5 gwei перевод на 65 000 единиц газа стоит 32 500 gwei, или 0,0000325 ETH, что при курсе 2 350 $ даёт около 0,076 $. При условных 30 gwei и курсе 3 000 $ тот же перевод обошёлся бы примерно в 5,85 $, поэтому перед крупной операцией цену газа проверяют по данным сети. Для работы с токенами ERC-20 достаточно трёх правил: держать на адресе немного ETH под газ, сверять адрес контракта токена с официальным источником проекта, а не с тикером, и периодически отзывать разрешения, которые больше не нужны. Смарт-контракт, получивший неограниченное разрешение год назад, может воспользоваться им сегодня, и стандарт этому не мешает.
