К основному содержимому

Введите слово из вопроса или названия статьи.

2 · Практика

Как проверить смарт-контракт перед использованием: пошаговая инструкция

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

3 мин чтенияОбновлено:
В этой статье

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

Шаг 1. Убедитесь, что адрес правильный

Самая частая подмена - не в коде, а в адресе. Мошенник создаёт похожий контракт и выдаёт за настоящий.

  • Берите адрес только из официального источника: сайт проекта, документация, закладка.
  • Сверяйте адрес полностью, а не только начало и конец (почему).
  • Адрес контракта Coin-Trust во всех четырёх сетях один и тот же: 0x6462DDDc0a3D893A7C17f94410e2d27162a390aD. Это следствие CREATE2: если в какой-то сети адрес другой, это не наш контракт.

Шаг 2. Откройте адрес в обозревателе

Введите адрес в обозревателе нужной сети. Вы должны увидеть, что по адресу находится контракт (а не обычный кошелёк): появится вкладка Contract. Если вкладки нет - по адресу нет кода.

Обратите внимание на:

  • дату создания и создателя (первая транзакция адреса);
  • количество транзакций и объём средств: у настоящего активного контракта история не пустая;
  • название и метки обозревателя (если они есть).

Шаг 3. Проверьте, что исходный код верифицирован

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

В обозревателе откройте вкладку Contract. Признак успеха - зелёная отметка «Contract Source Code Verified» и читаемый исходный код. Если код не верифицирован, то вы не можете проверить, что делает контракт. Это серьёзный повод насторожиться.

Параметры компиляции Coin-Trust: Solidity 0.8.24, EVM paris, оптимизатор 200 проходов, bytecode_hash = none. Именно эти настройки делают байткод воспроизводимым (подробнее о тестировании и сборке).

Шаг 4. Посмотрите, кто контролирует контракт

В исходном коде найдите роли и права. У Coin-Trust есть владелец (owner), и ему доступно только административное:

  • разрешить или запретить токен для новых сделок;
  • отметить гаранта как проверенного;
  • поставить новые сделки на паузу (пауза не блокирует выплаты по текущим);
  • вывести накопленные комиссии платформы;
  • вывести «ничьи» токены, случайно присланные напрямую.

Владелец не может забрать средства активных сделок: контракт отслеживает зарезервированные суммы, и они недоступны для административных функций (инвариант платежеспособности). Подробнее о ролях - в статье шаблоны контроля доступа.

Проверьте также, кто сам владелец: простой адрес (риск потери ключа) или мультиподпись.

Шаг 5. Выясните, не прокси ли это

Некоторые контракты - прокси: адрес один, а логика подгружается из другого контракта, который можно заменить (как работают). Тогда владелец может подменить поведение. Признаки: обозреватель показывает «Read as Proxy», в коде есть delegatecall, implementation. Coin-Trust - не прокси: его логику изменить нельзя.

Шаг 6. Прочитайте через интерфейс обозревателя

Во вкладке «Read Contract» можно вызвать функции без подписи и без комиссии. Например, для эскроу можно:

  • прочитать комиссию платформы (PLATFORM_FEE_BPS - 100, то есть 1%);
  • проверить, разрешён ли токен;
  • посмотреть данные конкретной сделки по номеру (getDeal).

Так вы можете убедиться, что то, что показывает сайт, совпадает с блокчейном.

Шаг 7. Просмотрите историю и события

Во вкладке Events или Logs видны все события контракта (что это). Несколько недель нормальной активности без странных вызовов - хороший знак. И наоборот, настораживает контракт, созданный вчера, с огромными суммами и без истории.

Шаг 8. Аудиты и репутация

Поищите, проходил ли проект аудит и есть ли программа вознаграждения за уязвимости (об аудитах). Аудит не гарантирует отсутствия ошибок, но его отсутствие у проекта, где лежат большие суммы, - тревожный сигнал.

Особый случай: проверка токена

Проверяя токен перед сделкой:

  1. Откройте токен на официальном сайте эмитента и скопируйте адрес оттуда.
  2. Сравните с адресом в обозревателе.
  3. Проверьте число знаков (decimals) и символ.
  4. Посмотрите, есть ли у токена функции блокировки адресов или приостановки (особенности).

Чек-лист

ПроверкаХороший признак
Адресвзят из официального источника, сверен полностью
Исходный кодверифицирован
Владелецмультиподпись, понятные права
Проксинет, либо обоснован и под таймлоком
Историяесть, без аномалий
Аудитесть отчёт

Что почитать дальше

Закрепите навык работы с обозревателем: руководство по обозревателю. Хотите заглянуть глубже - как устроены уязвимости: каталог уязвимостей.

Упоминается в статьях

Готовы попробовать?

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