Только в образовательных целях; это не инвестиционная рекомендация и не совет по безопасности. Число десятичных знаков не доказывает личность, стоимость, обеспечение или безопасность токена.
Краткий ответ
Для токена ERC-20 функция decimals() — необязательные метаданные, которые указывают интерфейсам, как отображать целые единицы. Если она возвращает d, стандартное отображаемое количество равно raw / 10^d. Это не меняет арифметику контракта и не подтверждает подлинность токена. До доверия результату проверьте сеть, точный адрес, код или реализацию прокси и блок.
Прочитайте decimals() напрямую через независимый RPC на заданном блоке, декодируйте возврат ABI как uint8 и сравните с официальным реестром эмитента и надежным обозревателем. Затем проверьте масштаб по исходным значениям balanceOf, переводов, разрешений, квитанций и событий. Не подставляйте 18, если вызов отсутствует, откатывается, возвращает неверные данные или противоречит другим свидетельствам.
Как это работает
ERC-20 хранит и передает суммы как беззнаковые целые числа. Десятичную точку вставляет слой отображения; контракт по-прежнему получает целые числа. Преобразуйте ввод десятичными строками или целыми произвольной точности, но не двоичной плавающей точкой. Количество представимо, только если умножение на 10^d дает целое число.
Поскольку decimals() необязательна, совместимый токен может ее не реализовать. Пользовательская или обновляемая реализация может вернуть неожиданное значение или измениться после обновления. Для прокси ERC-1967 проверьте адрес прокси, реализацию или beacon, администратора и события обновления; читайте состояние по адресу прокси и привязывайте все сравнения к одному блоку.
Разрешения и значения ERC-2612 permit тоже являются исходными целыми. Верное отображение перевода не доказывает, что разрешение, минимум маршрутизатора, сумма моста или бухгалтерская база использовали тот же масштаб. Контракты моста в исходной и целевой сети могут иметь разные decimals; сравнивайте читаемую стоимость и исходные единицы на обеих сторонах по документированным правилам конвертации и округления.
Порядок проверки:
- Зафиксируйте ID сети или домен, контракт токена, номер блока, RPC-адрес и время наблюдения.
- Подтвердите адрес в официальном реестре эмитента; название, символ, значок и результаты поиска не являются авторитетными доказательствами.
- Проверьте развернутый код и является ли адрес прокси; запишите реализацию или beacon, администратора и недавние обновления.
- Вызовите
decimals(), декодируйтеuint8через ABI и запишите успех, откат, пустой или неверный вывод, не подставляя значение по умолчанию. - Прочитайте исходные
balanceOf,totalSupply, разрешение, calldata, квитанцию и события на совместимых блоках; отформатируйте их с наблюдаемым масштабом. - Пересчитайте перевод, разрешение, котировку и мост целыми числами, включая комиссии, округление, остатки, ребейз или налог на перевод.
- Смоделируйте и отправьте малую операцию, затем сверьте исходные балансы до и после; остановитесь при любом расхождении интерфейса, RPC, события или баланса.
Примеры
- Одно исходное значение, два масштаба. При
raw = 123456789значениеd = 6отображает123.456789, аd = 18—0.000000000123456789. Разница составляет10^12раз. - Представимость важна. При
d = 6количество1.25токена равно1250000исходных единиц.0.0000001токена меньше одной единицы и должно быть отклонено или округлено по явному правилу. - Неверный масштаб разрешения. Разрешение
100токенов приd = 6равно100000000. Кодирование приd = 18дает100000000000000000000— разрешение в10^12раз больше задуманного. - Масштабирование в мосте. Если документированный маршрут
1:1преобразует исходный токен сd = 6в целевое представление сd = 18, исходное2500000означает2.5токена, а целевое2500000000000000000тоже означает2.5. Комиссии, лимиты, остатки и фактический баланс получения все равно требуют проверки.
Риски
- Правильный адрес запрашивается в неправильной сети.
- Скопированные название, символ или значок скрывают другой контракт.
- Реализация прокси или beacon меняется после проверки.
- RPC или обозреватель отдает устаревшее, нефинальное или несогласованное состояние.
- Отсутствующие или неверные метаданные незаметно заменяются на
18. - Двоичная плавающая точка округляет крупную или точную сумму.
- Кошелек верно форматирует перевод, но ошибается в разрешении или permit.
- База данных смешивает исходные единицы и читаемые суммы.
- Мост предполагает одинаковые decimals или не раскрывает округление остатков.
- Комиссия перевода, ребейз, выпуск, сжигание, пауза или заморозка нарушают простую сверку.
- Calldata, события, квитанции и реальные изменения баланса не совпадают.
- Проверка decimals принимается за доказательство эмитента, резервов, ликвидности или безопасности.
Распространенные заблуждения
- У всех ERC-20 по
18десятичных знаков. Метаданные необязательны, а реализация может вернуть другое значение. - Decimals — это биты точности EVM. Это десятичное правило отображения; арифметика токена остается целочисленной.
- Форматированный баланс обозревателя — независимое подтверждение. Он может зависеть от того же вызова и разделять ту же ошибку.
- Одинаковые символ и decimals означают один актив. Нужны также правильная сеть, точный контракт и свидетельство эмитента.
- Успешный малый перевод проверяет все интеграции. Разрешения, маршрутизаторы, мосты, биржи и учет могут масштабировать суммы отдельно.
Связанные темы
- Проверка контракта токена
- Декодирование calldata кошелька
- Проверка токена моста
- Риск токена с комиссией за перевод
- Прокси-контракт
Источники
- ERC-20: Token Standard - Ethereum Improvement Proposals (дата обращения: 2026-08-21)
- ERC-20 - OpenZeppelin Docs (дата обращения: 2026-08-21)
- JSON-RPC API - ethereum.org (дата обращения: 2026-08-21)
- ERC-1967: Proxy Storage Slots - Ethereum Improvement Proposals (дата обращения: 2026-08-21)
- ERC-2612: Permit Extension for EIP-20 Signed Approvals - Ethereum Improvement Proposals (дата обращения: 2026-08-21)