Материал проверен 25 октября 2026?
БК

ГЛАВНАЯ / ИНСТРУКЦИИ / ERC-20 DECIMALS: КАК ЧИСЛО ЗНАКОВ ВЛИЯЕТ НА ОТОБРАЖЕНИЕ СУММЫ

ERC-20 decimals: как число знаков влияет на отображение суммы

Токен-контракт обычно учитывает баланс целым числом, а кошелёк показывает его с десятичной запятой. Decimals задаёт масштаб этого отображения. Ошибка в нём способна превратить одну и ту же запись баланса в совершенно разные числа на экране, хотя сами токены никуда не перемещались.

Единицы учёта

Decimals относится к масштабу суммы, а не к стоимости токена

Методы balanceOf и totalSupply возвращают целые величины. Для представления пользователю применяется правило: отображаемая сумма равна raw amount / 10^decimals. Обратное преобразование нужно при подготовке аргументов перевода или разрешения на расходование.

Предположим, учебный токен имеет decimals = 6. Тогда raw amount 1234567 отображается как 1,234567 токена. Это арифметический пример, а не сведения о конкретном активе. Из числа знаков нельзя вывести долларовую цену, ликвидность, размер комиссии или надёжность эмитента.

Raw amountDecimalsОтображение
123456761,234567 токена
123456731234,567 токена
123456701234567 токенов
Метаданные

Не считайте 18 знаков обязательным правилом ERC-20

В исходном ERC-20 decimals является необязательным методом метаданных. У распространённой реализации OpenZeppelin значение по умолчанию равно 18, однако разработчик может выбрать другое. Отсутствие ответа на decimals нельзя автоматически трактовать как ноль или восемнадцать.

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

  • проверьте chainId и адрес контракта;
  • сверьте ответ decimals с реализацией;
  • не подменяйте неизвестное значение предположением;
  • уточните, показывает API целое число или уже готовую сумму.
Точность

Храните raw amount как точное целое число

Большие uint256 нельзя безоговорочно переносить в обычный JavaScript Number: его точность для целых ограничена. Потеря младших разрядов может произойти ещё до форматирования. Для расчётов применяют целочисленные либо подходящие десятичные типы и явно задают масштаб.

При вводе 0,1 токена сначала определите допустимое число разрядов. Если у учебного токена decimals = 0, дробная единица в его базовом учёте не представима. Интерфейс должен корректно отклонить или объяснить такой ввод, а не незаметно округлять сумму. Округление подписи на экране не должно менять передаваемое целое значение.

Лимит approve или permit обычно задаётся в базовых единицах токена. Ошибка масштаба затрагивает не только перевод, но и размер разрешённого расходования.
Проверка расхождения

Сначала сравните одинаковые данные на одинаковом блоке

Если два интерфейса показывают разные остатки, сопоставьте адрес владельца, сеть, контракт, raw balance и блок чтения. Разница может появиться из-за обновления состояния или округления, а не из-за изменения количества токенов. Для rebase и других расширений дополнительно учитывайте собственные правила баланса.

Не исправляйте расхождение повторным переводом. Сохраните исходное целое значение, decimals, номер блока и формат ответа API. Если raw balance совпадает, а расходятся только форматированные числа, исследуйте слой отображения; если не совпадает исходное состояние, одной заменой decimals проблему не решить.

  • аккаунт и контракт совпадают;
  • блоки и время чтения сопоставимы;
  • масштаб применён ровно один раз;
  • представление интерфейса отделено от цены и состояния контракта.
FAQ

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

Decimals определяет цену токена?

Нет. Это масштаб отображения базовых единиц, а цена определяется отдельно.

У каждого ERC-20 ровно 18 знаков?

Нет. В исходном стандарте метод необязателен, а реализации могут возвращать разные значения.

Можно ли считать отсутствие decimals нулём?

Нет. Это неизвестное значение, которое требует проверки реализации.

Почему нельзя считать большой баланс обычным Number?

При превышении точности числового типа теряются разряды ещё до отображения.

Изменение цифры на экране означает перевод?

Нет. Сверьте raw balance и события в нужной сети.

Итоговая проверка

Чек-лист: erc-20 decimals: как число знаков влияет на отображение суммы

  • сеть и контракт установлены;
  • decimals получено без предположения;
  • raw amount сохранён точно;
  • формула масштаба применена один раз;
  • перевод и allowance сверены в базовых единицах;
  • номер блока и источник сохранены.

Материал подготовлен редакцией сайта и проверен 25 октября 2026 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.