Что такое 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 на каждом адресе.