Owlio
RU
← Блог
ИнструкцияДля новичка

Общее предложение ERC-20 и баланс кошелька: какая цифра ваша?

Предложение токена и баланс аккаунта отвечают на разные вопросы. Выберите нужное поле для чтения, прежде чем сравнивать числа.

Для токена ERC-20 balanceOf(account) сообщает баланс, записанный для одного аккаунта. totalSupply() сообщает общее предложение контракта токена. Большое предложение на странице токена не означает большой остаток на вашем аккаунте.

Если вы открыли обозреватель, чтобы проверить свои активы, выбирайте баланс аккаунта. Чтобы узнать, сколько единиц контракт сообщает в сумме, выбирайте предложение. Ни одно из этих чисел само по себе не показывает стоимость в долларах, не доказывает контроль над адресом и не подтверждает безопасность токена.

Один контракт, два разных вопроса

Спецификация ERC-20 определяет их как отдельные методы только для чтения. У totalSupply() нет входного параметра аккаунта. Для balanceOf нужен адрес, баланс которого вы хотите проверить. Вызываемый контракт токена определяет, о каком активе идёт речь.

Чтение Что нужно помимо контракта токена На какой вопрос отвечает
totalSupply() Ничего Какое предложение сообщает этот контракт?
balanceOf(account) Публичный адрес аккаунта Какой баланс записан для этого аккаунта?

Например, представьте токен с предложением 1000 единиц, из которых аккаунту A принадлежат 25. Правильные результаты: 1000 для предложения и 25 для аккаунта A. Их различие ожидаемо. Никаких пропавших 975 единиц, которые нужно восстановить, здесь нет.

Это вымышленные количества для объяснения, а не показания реального токена. Если вы не уверены, какой адрес обозначает аккаунт, а какой актив, перед чтением любого поля откройте руководство об адресе кошелька и контракте токена.

Что меняет баланс, а что предложение?

Рассмотрим простой условный токен с обычными переводами без комиссии и особых правил учёта. Вначале у аккаунта A 25 токенов, у аккаунта B 975:

Событие Аккаунт A Аккаунт B Общее предложение
Начальный снимок 25 975 1000
A переводит 5 аккаунту B 20 980 1000
Для B выпускаются 100 новых токенов 20 1080 1100
B сжигает 10 через функцию сжигания 20 1070 1090

Перевод меняет владельца единиц. Выпуск создаёт единицы, а сжигание через показанный механизм удаляет их. Справочник ERC20 OpenZeppelin описывает учёт выпуска и сжигания, включая уменьшение предложения при сжигании.

Таблица описывает именно эту простую модель. Токен может изменять поведение переводов или использовать другие правила учёта. Не считайте отправку токенов на адрес с пометкой «мёртвый» доказательством снижения totalSupply(): установите, действительно ли контракт уменьшает предложение. Метка адреса не вызывает функцию сжигания.

Также ваш баланс может оставаться прежним, пока предложение меняется где-то ещё. Руководство OpenZeppelin по предложению объясняет, что ERC-20 оставляет механизм предложения на усмотрение реализации. Текущее значение предложения не доказывает невозможность будущего выпуска.

Прочитайте оба показателя без перемещения токенов

Читайте оба показателя у одного контракта токена в одной сети. Процедура ниже предлагается для проверки и не является отчётом о тесте кошелька, выполненном для этой статьи. Первичная документация проверена 23 октября 2026 года.

  1. Запишите сеть и полный адрес контракта токена. Сверьте адрес с официальными сведениями эмитента о развёртывании. Совпадения символов в разных сетях недостаточно для сравнения одного и того же актива.
  2. Запишите публичный аккаунт, который хотите проверить. Возьмите адрес из сведений этого аккаунта. Храните его отдельно от контракта токена. Публичное отслеживание работает и для аккаунтов, которыми вы не управляете, поэтому успешный поиск не доказывает владение.
  3. Откройте надёжный обозреватель или средство чтения контрактов для этой сети. Выберите интерфейс только для чтения проверенного контракта токена. Прочитайте totalSupply(), затем balanceOf, передав адрес аккаунта. Подписи в интерфейсах различаются, поэтому определяйте назначение по именам функций.
  4. Сохраните снимок состояния вместе с результатами. Запишите номер блока, если он доступен. Предпочтительно выполнить оба вызова на одном блоке. Отдельные чтения «latest» могут увидеть разные состояния, если между ними произойдёт перевод, выпуск или сжигание.
  5. Запишите единицы перед сравнением. Сохраните исходные ответы и отметьте, отформатировал ли их уже интерфейс. Неудачный вызов означает отсутствие данных, а не нулевой баланс.

Документация Ethereum по ERC-20 показывает отдельные вызовы для предложения и баланса аккаунта. Чтобы понять, какой результат вам нужен, не требуется повторять настройку среды разработчика из документации. Обозреватель с публичными методами чтения может предоставить те же категории сведений.

Чтение публичного состояния не требует перевода или разрешения на расходование токенов. Если страница просит фразу восстановления или подпись для показа этих значений, прекратите пользоваться этим способом. Ни то ни другое не является входным параметром сравнения.

Применяйте одинаковые единицы к обоим числам

Предложение и балансы аккаунтов используют один масштаб учёта данного токена. Объяснение decimals от OpenZeppelin прямо рассматривает форматирование обоих показателей. Для условного токена с 6 подтверждёнными десятичными знаками исходное предложение 1000000000 означает 1000 токенов, а исходный баланс 25000000 означает 25 токенов.

Не сравнивайте исходное предложение с отформатированным балансом. Не делите число, которое интерфейс уже преобразовал. Руководство по десятичным знакам ERC-20 объясняет определение масштаба, отсутствие метаданных и округление. Здесь приведение масштаба лишь необходимо для сравнения двух разных показателей, но не делает их равными.

Чего нельзя установить по предложению

totalSupply() в ERC-20 не является стандартизованным расчётом предложения в обращении. Поставщик данных может применять исключения при оценке обращения. Его методика должна объяснять эти исключения: их нельзя получить, просто переименовав ответ контракта. Максимальное предложение тоже представляет отдельный вопрос. OpenZeppelin описывает расширение для ограничения предложения, но сам ERC-20 не требует этой функции от каждого токена.

Результат также относится к конкретному развёртыванию и снимку состояния, которые вы прочитали. Он не объединяет автоматически токены разных сетей, обёрток или связанных контрактов. Суммирование развёртываний с похожими названиями может дать число без ясного смысла, если их связь и учёт не установлены отдельно.

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

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

Показывает ли totalSupply количество токенов в моём кошельке?

Нет. totalSupply сообщает общее предложение контракта токена. balanceOf принимает адрес аккаунта и сообщает записанный для него баланс. В обоих случаях нужно выбрать нужный контракт токена и сеть.

Совпадает ли totalSupply с предложением в обращении или максимальным предложением?

Нет. ERC-20 не определяет расчёт предложения в обращении и не требует поля максимального предложения. Для показателя обращения нужна методика поставщика данных, а для ограничения выпуска нужны доказательства из реализации токена.

Можно ли проверить эти показатели без подключения кошелька?

Да. Для публичных вызовов чтения нужны контракт токена, сеть и, для balanceOf, публичный адрес аккаунта. Чтение не требует перевода, разрешения на расходование, фразы восстановления или подписи кошелька.