Анализ транзакций и контрактов

Сергей Недашковский занимается анализом транзакций, смарт-контрактов, исследованием особенностей ончейн даты в Ethereum и Cosmos. Такая работа -- это невероятно увлекательное путешествие в мир больших денег, азартных игроков и просто красивого кода.

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

Зачем анализировать данные блокчейнов

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

  • оценить проект, риски блокировок и заморозки средств в контракте;
  • узнать, кто владеет проектом;
  • проверить достоверность информации;
  • проанализировать стороны в транзакциях;
  • определить стадию развития проекта / блокчейна.

Данные часто искажаются, часто искажаются намеренно. Поэтому важно корректно провести анализ. Без глубокого анализа данных лучше не совершать сделок. Лучше посмотреть глубоко и вникнуть.

Базовые понятия анализа данных блокчейнов

Ethereum Virtual Machine — виртуальный компьютер, на котором исполняется код. Это единый глобальный 256-битный компьютер, в котором исполняются транзакции и хранится состояние сети. Виртуальные машины работают примерно одинаково, поэтому информацию про работу EVM можно экстраполировать на Cosmwasm, Substrate, Tendermint, Solana и так далее.

В состояние EVM входят: балансы, перечни аккаунтов, байткоды контрактов, значение переменных контрактов.

Транзакции — атомарные изменения состояния виртуальной машины. Это криптографически подписанная аккаунтом инструкция для изменения состояния сети. Транзакции могут быть исполнены или отклонены, но в обоих случаях они будут записаны в блоке. Транзакции могут состоять из одного и более шагов (trace), которые делятся на два типа:

  • Call-транзакция — вызов функций
  • Create — создание контракта

Внутри транзакций есть: traces — записи о вызовах функций; events — перечень событий, которые были вызваны функциями. Функция может создавать события или нет. Чтобы понять, исполнилась ли функция, нужно анализировать события или traces, в случае если функция не создает событий.

Анализ на примере самой большой транзакции за ноябрь 2022 в сети Ethereum

Возьмем транзакцию и посмотрим, какие данные мы можем узнать из ее анализа

  • Хеш транзакции — 0x67fbcfe377c93800e673f168ca71fe4b20f25e6ed6ecc64f5ecd941d6cdf967b. Хеш не зависит от номера блока. Хеш сохраняется, вне зависимости от реорганизации цепочки, если это произошло;
  • Номер блока — 15933553. Он определяет time stamp цепочки;
  • Кошелек отправителя — 0xf977814e90da44bfa03b6295a0616a897441aceс. Видно, что это кошелек пользователя Binance;
  • Кошелек получателя — 0x28c6c06298d514db089934071355e5743bf21d60, также пользователь Binance. Можно сделать вывод, что произошла ребалансировка между холодными кошельками Binance;
  • Сумма — 800,000 Ether ($1,019,984,000.00 на момент совершения транзакции);
  • Стоимость газа — 0.001750259605206 Ether($2.23)
  • Газ-лимит (который был выставлен);
  • Nonce — порядковый номер транзакции, которую совершил этот адрес;
  • Вкладка State — изменение состояния. В данном случае переменная, которая отвечает за баланс увеличилась на 800,000 ETH, также увеличился баланс майнера, который получил fee с этой сделки и уменьшился баланс Binance 8 кошелька.

Как создается смарт-контракт

Со своих адресов мы достаточно часто вызываем контракты при работе с DEX, DeFi, dAPP, ERC20-токенами и так далее.

Контракт — это программа, исполняемая в виртуальной машине блокчейна. Он создаётся отправкой транзакций с байт-кодом в блокчейн или вызовом функции у контракта-фабрики (например Uniswap, Sushi-swap). Например при вызове контракта-фабрики Uniswap, создаётся пул, в котором уже выполняется обмен токенов.

При компилировании кода контракта мы получаем:

  • Initial Data — набор начальных параметров контракта. В Ethereum они указываются в коде контракта и их инициализация отображается, как изменение состояния сети;
  • Byte code — код, который исполняется в виртуальной машине;
  • Application Binary Interface [ABI] — интерфейс для взаимодействия с контрактом.

Важно: Если ABI недоступен, его можно восстановить на основе топиков событий.

Дополнительно по теме можно почитать: https://ethereum.org/en/developers/docs/smart-contracts/anatomy/

Анализ контракта OpenSea

Создание контрактаhttps://etherscan.io/tx/0xedf9fbcf691727068c9fd67f018bc7db73eacdbc198ad48f11cc75fe8baaa1d3

В транзакции, описывающей создание смарт-контракта OpenSea мы можем также увидеть все основные параметры: блок, когда был создан контракт, отправителя, деплоера. Также видно, что байткод был отправлен в блокчейн и смарт-контракт был создан блокчейном. В поле tool записан контракт.

Стейт — в блокчейне поменялся. Мы можем увидеть initial parameter. Переменные, которым будут присвоены значения. Тут мы видим перечень адресов.

alt_text

Внутри этого контракта есть много внутренних транзакций, но нас больше всего интересует сам контракт. Код не деплоется в виде кода в блокчейн, пользователь может отправить текст контракта в Etherscan, который это компилит и сравнивает. Если текст компилится в контракт, то он его сохраняет. Дата аналитик в блокчейне в основном изучает и анализирует коды смарт-контрактов и самого блокчейна, так как важно понимать, что именно происходит внутри сети. События в блокчейне соответствуют определенным изменениям параметров. Например, событие transfer означает, что был перевод токенов. Также для нас

alt_text

Также важно проанализировать API. Важно собрать базу API или конструктов API, чтобы применять их для парсинга логов и трейсов транзакций, которые записаны в блоке. Байт-код тоже есть, но он нам мало, что скажет. Важно посмотреть и изучить различные контракты, байт-код и ABI. Важно убедиться, что эти коды есть на Etherscan и они валидированы.

alt_text

Типы смарт-контрактов

Анализ контрактов — основной процесс, который происходит при предварительной обработке данных в блокчейнах.

Что содержит в себе смарт-контракт?

  • Данные.

Внутри контракта есть публичные и непубличные данные. Есть данные, которые появляются при создании контракта. Если solidity-код валидирован, они прямо в коде указаны. Есть также публичные переменные, которые можно увидеть в коде открыто (public). Публичные данные, с известным вам API можно прочитать через интерфейс того же Etherscan, например.

Внутренние переменные не были сделаны публичными. Тогда нужно моделировать смарт-контракт на языке вашей аналитики, при анализе DeFi-протоколов такой метод довольно часто используется. Можно посчитать переменную, исходя из входных параметров моделируемого контракта.

alt_text

  • Функции.

Функции внутри контракта тоже делятся на публичные (в коде будет указано «public» и внутренние, которые могут вызываться только другими функциями. Внутренние функции могут отображаться как trace, там же могут быть и параметры вызова. Но обратиться напрямую ко внутренним контрактам невозможно.

  • События (events).

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

Подробнее: https://ethereum.org/en/developers/docs/smart-contracts/anatomy/

Чтение переменных на примере OpenSea

Давайте проанализируем смарт-контракт OpenSea с точки зрения переменных. Переходим по ссылке в раздел «Contract» —> «Read contract». Тут можно увидеть переменные, которые можно прочитать.

alt_text

В некоторых функциях есть параметры, которые нужно подставить и получить вызов. Некоторые функции исполняются без параметров. Если вам нужно получить баланс адреса — необходимо отравить запрос с адресом и вам вернется значение баланса по этому адресу. Также можно вызвать любую публичную функцию. Это удобно при тестах, когда нужно проверить, как функция реагирует на те или иные значения без конструирования вызова функции.

Специфика транзакций в смарт-контракте

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

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

alt_text

Подробнее: https://ethereum.org/en/developers/docs/transactions/

Контракт на закрытие сделки в OpenSea

Переходим по ссылке для анализа данных смарт-контракта, закрывающего сделку в OpenSea. Что происходит с точки зрения переменных контракта?

  • Номер блока определяет момент совершения транзакции — 14121210;
  • Отправитель 0x49784e92923ef52a2d0b668d15e16a9272229619;
  • Получатель (контракт) 0x7be8076f4ea4a4ad08075c2508e481d6c946d12b;
  • Цена — 450 ETH;

Если нужно получить все вызовы контракта — можно получить все транзакции этого контракта. Видим, что был вызван другой контракт и был переведен токен.

alt_text

Далее давайте посмотрим внутренние данные (Internal Txns) этого контракта. Стоит отметить, что в Etherscan не все транзакции приведены — Call 3 и Call 4, а 1 и 2 не приведены. Видим, что контракт отправил 33 ETH себе на кошелек и 416 ETH продавцу.

alt_text

Логи (Logs) — события, которые создал контракт. Тут есть имя и параметры. Также мы видим адрес контракта, который выпустил событие. Мы можем заметить контракт токена и контракт OpenSea. Может быть несколько логов разных контрактов.

  • Имя;
  • Параметры;
  • Топик (соответствует имени и параметрам).

Можно сопоставить имя топика (ивента) с другими контрактами и подтянуть описание контрактов, API которых вам неизвестен. С помощью типов можно распарсить значения переменных в читаемый вид.

alt_text

Также мы видим изменение в состоянии сети (переходим во вкладку State).

Изменились параметры переменных и можем прочитать изменения.

alt_text

Есть также другие эксплореры для анализа контрактов. Например, вот как может выглядеть тот же контракт на другой площадке — Bloxy. Этот эксплорер позволяет проанализировать и построить графы, довольно глубоко, разобрать детально трейсы и ивенты сложных транзакций (например, если это какой-то тройной свап). Самое главное, что экслорер визуализирует графы транзакций. Можно построить графы контракта с ограничением по времени в конкретный промежуток времени.

alt_text

Как работают аналитические системы

Есть полные ноды, которые хранят все состояние сети с трейсами и т.д. Эти состояния на каждый блок (транзакции, запросы) извлекаются из архивной ноды, загружаются в базу данных (https://clickhouse.com, например). Сюда входят транзакции, а также предобработанные данные и логи. Процессинг позволяет обработать сырые данные, извлечь агрегаты (процессинговые пайплайны считают несколько очередей, предобрабатывая данные). Они классифицируют адреса, потом на основании этих классификаций — классифицировать транзакции. После чего можно формировать метрики для конечного потребления.

alt_text

Аналитические системы отличаются в основном процессинговыми ядрами, джобами, которые обрабатывают данные. Потому что основа (данные) у всех примерно одинаковы. Эти данные так или иначе доставляются клиентам по разным каналам: через Web-интерфейс, API, интеграционные шины данных.

Блокчейн-експлореры

Если анализ происходит в EVM-сетях, то подходят два эксплорера:

  • Etherscan.io (проверка стоимости газа, оценка времени подтверждения транзакции, просмотр кода контрактов ABI, чтение публичных переменных контрактов, вызов функций контрактов).
  • Bloxy.info (активность адресов во времени, граф транзакций и граф активности, аналитика по методам контрактов).

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

Что из себя представляют аналитические сервисы для блокчейнов? Как правило, это дата-студии, в которых можно собирать из набора данных графики для анализа различных параметров ончейн, данные CEX, YouTube, Twitter (например, как обсуждение в Twitter влияет на цену проекта) и так далее. Можно создать кастомный API и использовать в специфических ситуациях для гибкого анализа. Все сервисы стараются догнать конкурентов: если появилась новая функция, она обязательно появится в других сервисах.

Что предоставляют аналитические сервисы:

  • Web App: Data Studio, API constructor, Research;
  • API;
  • Integration: Google Sheets, TradingView;
  • Alerts: Telegram, Whatsapp, mail.

Nansen.ai

  • Проект вырос из Blockchain ETL и ориентирован на анализ транзакций через разметку адресов и транзакций;
  • Лучшая разметка Ethereum адресов среди публичных сервисов;
  • Отличная разметка CEX, DEX, DeFi;
  • Один из лучших аналитических сервисов по NFT;
  • Есть сервис по доказанному балансу CEX.

alt_text

Token God Mode — можно посмотреть различные параметры изменений сети конкретного токена.

alt_text

Что показывает Nansen:

  • обзор транзакций (на скриншоте анализ Tether, из которого можно понять, что происходит со стейблкоинами);
  • балансы токенов и изменения этих балансов;
  • балансы;
  • сокращения балансов (можно увидеть, например, что Binance был под большим ударом и потерял много стейблов — сокращение на $1.7 млрд);

alt_text

  • Вкладка «Smart money» — позволяет увидеть, как менялись балансы в Tether у ключевых игроков. Когда цена начала падать — большинство платформ наращивали объемы, когда цена росла — они выходили из USDT.

alt_text

  • Вкладка «Top Transactions» позволяет посмотреть на ребалансировку CEX, разметку кошельков и так далее.
  • Можно посмотреть кошельки обычных пользователей: их портфель, балансы, процентное соотношение и так далее.

alt_text

Santiment.net

Santiment.net — еще один сервис, который позволяет получить анализ данных из блокчейна. Ориентирован на агрегацию данных с площадок. Можно посмотреть данные по DEX, например, объемы в динамике и различные публичные борды. На скриншоте можно увидеть невероятное падение в 30 раз объемов DEX. Мы видим, что рынок «щупает дно».

alt_text

У компании также есть опубликованные исследования с графиками. На скриншоте ниже можно увидеть график сравнения стейблов на Ethereum и в Arbitrum.

alt_text

Glassnode.com

Glassnode.com — сервис с более удобным интерфейсом — можно выбрать метрики и блокчейны. Но не все метрики доступны для всех блокчейнов.

alt_text

Например, мы хотим посмотреть простую метрику — какое количество пользователей получило ETH. Можно заметить, как изменение цены повлияло на количество токенов у держателе (интерес пользователей). По графику видно, что с 10 мая 2022 года наступила некоторая стагнация. Это весьма показательный параметр, по которому можно легко оперировать и с другими чейнами.

alt_text

Аналитические дашборды

Dune Analytics dune.xyz

  • Парсинг событий;
  • Множество дашбордов по NFT, DeFi, DEX и др.;
  • Можно создать и опубликовать свой дашборд, в том числе по активности своего проекта.

alt_text

Поставщики данных из блокчейнов

Blockchain ETL. BigQuery public datasets github.com/blockchain-etl/public-datasets

  • Сырые данные транзакций, трейсов, событий и блоков;
  • Обработанные данные по основным протоколам;
  • Требуется знать SQL и иметь аккаунт в Google Cloud;

Bitquery.io — Google cloud с публичными датасетами.

  • Большой перечень данных по GraphQL и Rest API;
  • Отличные данные по DEX и DeFi.

alt_text

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

В BigQuery можно составить graph QL-запросы. Для лимитированной информации — это очень удобный ресурс.

Как выбирать инструменты

В этом докладе перечислены основные инструменты, но есть обширный список тулзов, который подходит для конкретных ситуаций. В DeFi — одни инструменты, в Uniswap есть свои специфически тулзы для аналитики. Главное четко определить цель анализа и уже из этого исходить в выборе тулзов.

Презентацию спикера ищите по ссылке: https://t.me/cyberacademy/31671

Читайте также

Больше мероприятний