Biteacon - это проект, зародившийся в рамках UTON HACK 2.0. Мы очень ценим данные и знания, а еще больше ценим когда ими умеют правильно пользоваться! Поэтому наш проект представляет из себя 2 пользовательских решения:
- biteacon.xyz - business intelligence web application, работающее с проиндексированной базой данных блокчейна LikeLib. Позволяет очень удобно проводить аналитику блокчейна.
- biteacon bot - телеграм-бот, реализующий функционал блокчейн-эксплорера для LikeLib.
Также обратите внимание на наши другие ресурсы:
- biteacon channel - телеграм канал, где вы можете узнать о функциональных возможностях нашего продукта и быть в курсе обновлений и новых событий.
- biteacon GitHub - наша организация на GitHub, там вы всегда сможете найти самые актуальные версии нашего проекта.
Этапы работы программного решения:
- Разворачивается LikeLib blockchain.
- Разворачивается база данных Indexed LikeLib, Telegram bot DB и GraphQL Hasura.
- Кроулер подключается к блокчейну LikeLib и к базе данных Indexed LikeLib, после чего начинает вытягивать блок один за другим и записывать их в проиндексированную базу данных.
- Разворачивается инфраструктура Apache Superset.
- Поднимается Application DB для Apache Superset.
- Поднимается Redis для хэширования запросов Apache Superset.
- Поднимается сервер Apache Superset и пользовательский интерфейс.
- Происходит инициализация базовой конфигурации.
- Apache Superset подключается к Indexed LikeLib.
- Разворачивается телеграм-бот.
- Пользователь использует телеграм-бота для удовлетворения задач по поиску и исследованию, а Superset BI восполняет потребности в аналитических данных.
- Crawler -
Особенностью записи данных кроулером в Indexed LikeLib database является порция данных размером в 1 блок. Каждый блок и все его транзакции, адреса, должны записываться атомарно. При этом возникает сложность в получении всеобъемлющего набора данных для атомарной записи, поскольку LikeLib fullnode не позволяет по http получить многие необходимые связи. Мы решили эту проблему засчет хэша внутри кроулера и механизма матчинга.
- Telegram bot -
это LikeLib blockchain explorer прямо в мессенджере. Одной из его особенностей является возможность как выполнять заданные команды, так и выполнять поисковые запросы. Сложность поисковых функций может быть заметна на примере хэша транзакций или хэша блока. Из-за их кодировки, хэши в отличие от адресов, не могут использоваться как полноценные ссылки и поиск по ключу требует валидации многих дополнительных сценариев. Также факт наличия команд и поисковых запросов требует наличия отдельного оркестратора команд.
Данная схема позволяет в полной мере делать гибкие выборки, в отличие от key-value, поскольку прописаны все возможные связи и проиндексированы значемые столбцы. Теперь становится возможным увидеть транзакции по блоку, все виды транзакций в аккаунтах(minging, input, output) и многое другое!
Телеграм бот нуждается в отдельной схеме базы данных по двум причинам:
- Добавление команд в избранное
- Регистрация(инвайты) в Biteacon(Superset BI) через механизмы бота.
Почти все компоненты нашего решения используют Docker. Следуя инструкциям в каждом отдельном репозитории, вы можете быстро и легко развернуть рабочий стенд.
P.s. Перед запуском настоятельно рекомендуется поменять пароли!
- biteacon/UTON-HACK-2.0 - репозиторий корневой документации по проекту Biteacon
- biteacon/telegram-bot - исходный код телеграм бота(эксплорер LikeLib), написанного на java
- biteacon/crawler-likelib - кроулер, выкачивающий все данные из блокчейна LikeLib с хранением данных в key-value базе данных по http. Преобразует полученные данные и записывает в реляционную схему(postgres-hasura)
- biteacon/postgres-hasura - исходный код конфигурации базы данных Postgres и Hasura GraphQL сервера, содержит миграции
- biteacon/incubator-superset - (Fork) Apache Superset (incubating) is a modern, enterprise-ready business intelligence web application
За время проведения хакатона пришлось изменить стратегию и архитектуру проекта. Мы пришли к выводу, что демонстрация распределенных JOIN'ов из нескольких разных базах данных, с использованием Presto, потребует большей подготовки. Сложность оказалась в Superset, поскольку его компонент SQLAlchemy не поддерживает распределенный JOIN разных баз данных.
P.s. Вы все же можете использовать нашу готовую конфигурацию, чтобы увидеть распределенные запросы. Вы можете поднять в докере базу данных(postgres-hasura), а потом запустить в докере presto-server. После этого можно подключиться через presto-cli и отправлять распределенные запросы.
- biteacon/presto-server - сконфигурированный однонодовый сервер распределенного кластера запросов
- biteacon/presto-cli - клиент для подключения к ноде кластера