Что такое ERC-20: стандарт токенов Ethereum

ERC-20 — стандарт взаимозаменяемых токенов в Ethereum, который задаёт общий набор функций для баланса, переводов и разрешений на списание.

ERC-20 — это договорённость о том, какие функции должен иметь смарт-контракт токена в Ethereum. Основные из них: balanceOf показывает баланс адреса, transfer переводит токены, approve и transferFrom позволяют разрешить другому контракту списать токены от вашего имени. При каждом переводе контракт генерирует событие Transfer — именно по нему платёжные сервисы и обозреватели блоков узнают о движении средств.

Важная деталь — поле decimals. Контракт хранит балансы целыми числами, а decimals говорит, сколько знаков после запятой подразумевается. У USDT и USDC в Ethereum их 6, у многих других токенов — 18. Если не учитывать это при расчётах, сумма платежа окажется неверной в миллионы или триллионы раз. Стандарт ERC-20 переняли и другие EVM-сети, например BNB Smart Chain, где его называют BEP-20.

За каждый перевод токена ERC-20 платится газ в ETH. Перевод токена дороже, чем простой перевод ETH, потому что выполняет код контракта. Если у отправителя нет ETH, перевести USDT или USDC он не сможет. Газ списывается даже за неудачную транзакцию, поэтому ошибка в адресе контракта или нехватка баланса тоже стоят денег.

Типичные ошибки: перевод USDT ERC-20 на адрес в другой сети, засчитывание токена по названию без проверки адреса контракта, а для пользователей — бездумный approve на неограниченную сумму сомнительному контракту, который потом может вывести все токены. Для приёма оплаты approve не нужен вообще: клиент делает обычный transfer на ваш адрес.

В Moonvex в сети Ethereum принимаются ETH, USDT и USDC. Сервис сам пополняет газ на адресах платежей и собирает с них средства, поэтому продавцу не нужно держать ETH на каждом адресе.

Частые вопросы

Почему за перевод USDT ERC-20 нужно платить ETH?

Комиссия в Ethereum всегда платится в ETH — это нативная монета сети. Токены ERC-20 сами по себе газ оплатить не могут.

Одинаковы ли адреса для ETH и токенов ERC-20?

Да. Один Ethereum-адрес (0x…) хранит и ETH, и любые ERC-20-токены. Баланс токенов учитывается внутри контракта токена.

Нужно ли клиенту делать approve, чтобы оплатить заказ?

Нет. Для оплаты достаточно обычного перевода transfer на адрес продавца. Просьба сделать approve при оплате — повод насторожиться.

Где это пригодится

Связанные термины

Начните принимать оплату сегодня

Аккаунт и первый проект за минуту, без абонентской платы.

Создать аккаунт