Как вывести баланс ERC-20 без потери минимальной единицы
Баланс ERC-20 возвращается целым числом. Преобразование в число с плавающей точкой может отбросить единицу ещё до форматирования.
Разделите целое число на две части
Пусть balanceOf вернул 1234567, а контракт сообщил шесть знаков после запятой. Разделите баланс на миллион с остатком. Дополните остаток нулями слева до шести цифр.
1234567 div 1000000 = 1
1234567 mod 1000000 = 234567
1.234567
При сыром балансе 7 на экране будет 0.000007. Храните исходное целое вместе с сетью и адресом контракта. Для ввода суммы пользователем выполните обратное преобразование в целых числах.
Обработайте отсутствие decimals
В базовой спецификации ERC-20 метод decimals необязателен. При ошибке вызова или декодирования явно покажите сумму в минимальных единицах либо используйте проверенные метаданные токена. Подстановка 18 способна занизить отображаемый баланс на много порядков. eips.ethereum.org ERC-20