Как читать смарт-контракты
Смарт-контракт — компьютерный протокол, который позволяет проводить сделки и контролирует их исполнение с помощью математических алгоритмов.
Код смарт-контракта после заливки в блокчейн дополнительно заливается сверху слоем эпоксидки, чтобы предотвратить любое случайное или намеренное изменение кода.
Функции смарт-контракта могут быть вызваны извне (с кошелька пользователя или из другого контракта) и делятся на две большие группы:
- Не меняющие состояние персистент данных (только чтение из блокчейна)
- Меняющие состояние персистент данных
Персистент данных - это данные, сохраняемые в блокчейне
Интерфейс ERC-20
Интерфейс – это описание внешних воздействий каким-либо объектом и однозначных реакций объекта на это управление. Если смарт-контракт реализует интерфейс ERC-20, то мы можем его использовать везде, где возможно использование токена.
На текущий момент уже создано и каждый день создается множество токенов. Но с любым токеном мы можем взаимодействовать единообразно – пересылать, свапать, апрувить и т.д. Токен должен соотвествовать интерфейсу ERC 20/BEP 20. Реализовывать означает, что смарт контракт токена должен содержать вполне определенный набор функций и параметров с однозначно прописанной реакцией на вызов каждой из этих функций.
Основные функции, которые должны быть прописаны в смарт-контракте:
- totalSupply() - возвращает эмиссию токена
- balanceOf(account) - возвращает баланс адреса
- transfer(recipient, amount) - передает amount токенов от msg.sender к recipient
- transferFrom(sender, recipient, amount) - передает amount токенов от sender к recipient
- allowance(owner, spender) - возвращает количество токенов, которые разрешены списать
- approve(spender, amount) - выдает разрешение spender списать amount токенов с баланса msg.sender
- transfer(from, to, value)
- Approval(owner, spender, value)
Также при вызове каждой функции присутствуют еще несколько параметров. Основные из них:
- msg.sender – адрес с которого вызвана транзакция
- msg.value – количество токенов пересланных с транзакцией
Виды скама
- Контракт, в коде которого прописана невозможность продажи токенов. Купить вам позволяют, а вот продать – нет.
Либо вам не дают возможности подтвердить своп (код помещается в функцию approve), либо не дают возможности передать ваши токены (код помещается в функцию transferFrom).
Т.е. подтвердить транзакцию может только владелец контракта.
Смотрим на конструктор (функция, которая вызывается один раз при создании контракта ) – там обычно идет инициализация всех переменных, по названию которых можно понять что включено в контракт. Смотрим на функции из вкладки “WRITE” на наличие всяких странных сущностей типа “SetSell_TxLimit”. В функциях transfer/transferFrom также будет присутствовать код проверки на всякие дополнительные условия, при нарушении которых нам не дадут совершить продажу.
Использование BSCscan для чтения контрактов
Для начала вам нужно найти адрес токена. Как это сделать:
- Переходите на сайт СМС и через поиск находите нужный вам токен. Копируете адрес токена (где найти показано на скриншоте):
- Переходите на сайты по типу BSCSCan, EtherScan (в зависимости от сети, на которой развернут токен) и вставляете в поиск адрес токена. Листаете чуть вниз:
- READ – перечислены все функции и переменные, которые мы можем читать из контракта не тратя газ и не совершая транзакций.
- WRITE – перечислены все функции, которые инициируются транзакциями. Именно тут будет минт, изменение тарифов, включение и выключение возможности продажи и т.д.
- CODE – исходный код контракта
Здесь вы можете просмотреть весь код смарт-контракта.
Ищите функции, в которых упоминаются слова «transfer», «burn», «mint» или «create». Функции с такими названиями, в основном, описывают процесс оборота токенов. В них же злоумышленники могут спрятать операции по бесконечному выпуску токенов. Если создатели проекта утверждают, что всего будет выпущено лишь 21 млн монет, а в коде есть функция с названием «mint», «create» или «issue» и большим объемом строк внутри функции — есть смысл задуматься.
Найдите комментарии к функциям. Хорошо, если они есть, хуже, если нет. Как правило, добросовестные разработчики комментируют чуть ли не каждую строчку кода и описывают действия прямо в смарт-контракте через символ слэш