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

Подтверждённый исходный код — это опубликованный разработчиками текст контракта, который обозреватель самостоятельно сверил с байт-кодом, работающим в сети, и совпадение означает, что вы видите именно тот код, который фактически исполняется при каждом вызове.

С чего начать проверку

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

Дальше посмотрите дату создания и число транзакций. Контракт известного проекта не может быть создан вчера и иметь десяток операций.

Схема из четырёх шагов: от поиска контракта до чтения переменных
Схема из четырёх шагов: от поиска контракта до чтения переменных

Что показывает обозреватель

Раздел Что узнаёте
Код контракта Подтверждён ли исходник, какие библиотеки использованы
Функции чтения Текущие значения: владелец, комиссии, лимиты, статус паузы
Функции записи Что вообще можно сделать с контрактом и кому это доступно
Транзакции и события Активность, число пользователей, история вызовов

Функции чтения без риска

Раздел с функциями чтения вызывается бесплатно и ничего не меняет в сети, и здесь смотрят значения, определяющие поведение контракта: адрес владельца, размер комиссии, установленные лимиты, статус приостановки. Именно тут обнаруживаются неприятные сюрпризы вроде комиссии в тридцать процентов или включённой паузы на продажу.

Для токена полезны базовые поля. Общее предложение, число знаков после запятой и имя контракта позволяют сверить его с тем, что заявлено на сайте проекта.

Права владельца контракта

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

На что обратить внимание

  • Отсутствие подтверждённого исходного кода при работающем интерфейсе
  • Адрес владельца — обычный кошелёк, а не контракт с таймлоком
  • Функции изменения комиссии без верхнего ограничения
  • Возможность приостановить переводы или занести адрес в чёрный список

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

Прокси-контракты и обновляемость

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

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

Чтение журнала событий

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

Сверка адреса контракта

Перед любой проверкой убедитесь, что смотрите нужный контракт, и токены с одинаковым названием и символом создаются кем угодно, и единственный способ отличить настоящий — взять адрес с официального сайта проекта или из проверенного агрегатора.

Поиск по названию в обозревателе для этого не годится. Он выдаст все контракты с таким именем, включая подделки, специально созданные для перехвата невнимательных пользователей.

Чего проверка не даёт

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

Смежные темы разобраны у нас. Вот основные. Общий раздел — транзакции и сети. Шире — статьи про криптокошельки. Проверку блокировки ликвидности разбирает материал как проверить блокировку токенов ликвидности, а распознавание опасных подписей — статья как распознать вредоносную подпись транзакции.

Вопросы и ответы

Нужно ли понимать код для такой проверки?

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

Что означает контракт с таймлоком в роли владельца?

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

Как проверить контракт в другой сети?

Тем же способом, но в обозревателе соответствующей сети: у каждой из них свой сервис с аналогичным интерфейсом, а адрес контракта в одной сети не связан с таким же адресом в другой, поэтому проверять нужно именно тот, с которым вы собираетесь взаимодействовать.

Вердикт

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

Контракты проверяйте напрямую. Блокчейн-обозреватель Etherscan и обозреватель сети BNB Chain дают доступ к коду, функциям чтения и журналу событий контракта.

Екатерина Лебедева, автор Cryptium. Разбор транзакций, сетей и комиссий. Больше материалов — в Telegram-канале t.me/cryptiumru.