Команда разработчиков Joystream рада анонсировать Hydra , внутренний инструмент, который мы создали и теперь хотим сделать доступным для всей экосистемы Substrate и Polkadot.
Проблема
Любой, кто пытался создать нетривиальный пользовательский интерфейс на основе блокчейна Substrate, несомненно, столкнулся с рядом болезненных препятствий.
- Медленная выборка: часто требуется выполнение нескольких операций чтения на нескольких высотах блока, а чистая задержка выборки данных очень плохая. Некоторые чтения могут зависеть от результата предыдущих, что приводит к последовательному чтению, которое происходит еще медленнее.
- Медленная обработка: клиент должен выполнять всю работу по фильтрации, сортировке, разбиению на страницы или иным образом вычислять полученные данные, а это требует времени, что приводит к медленному взаимодействию с клиентом и нагрузке на ЦП на пользовательском устройстве.
- Сложный клиент: логика выборки и обработки воспроизводится во всех приложениях, что усложняет разработку приложений.
- Нет поиска: ваша цепочка может иметь транзакционные или государственные обязательства в отношении данных с произвольным текстом, но выполнение реального полнотекстового поиска на стороне клиента не вариант.
- Избыточная выборка: вы не можете выбрать нужные данные, вы должны читать объекты полного состояния как есть, тратя впустую как соединение, так и полную емкость узла.
- Дорогостоящие архивные узлы: пользовательские запросы, включающие несколько операций чтения. Чтобы получить согласованный набор данных, вам часто придется читать на определенной высоте блока, так как всегда чтение на кончике может нарушить атомарность. Это означает, что такие запросы на чтение будут зависеть от архивирования всего узла. По мере масштабирования вашей пользовательской базы это станет очень дорогостоящей инфраструктурой.
Решение
Hydra вдохновлена TheGraph — проектом, ориентированным на Ethereum, который позволяет любому развернуть узел запроса, отображающий исторические данные смарт-контрактов. Разработчикам DApp больше не нужно создавать конвейер данных для приема и индексации исторических данных смарт-контрактов, сосредоточившись на основных функциях продукта.
Hydra — это узел запроса для блокчейнов на основе субстратов. Узел запроса принимает исторические события и внешние данные и обеспечивает расширенный, зависящий от домена и настраиваемый доступ к базовым данным, выходящий далеко за рамки прямых вызовов RPC.
Например, просроченные предложения о расходах Казначейства Кусамы удаляются из состояния блокчейна Кусамы, поэтому запрос, скажем, годичных предложений становится проблематичным. Действительно, нужно отслеживать эволюцию государства, последовательно применяя события казначейства и внешние данные в каждом историческом блоке.
Вот где вас прикрывает Гидра. Определите свою модель данных, и индексатор Hydra синхронизирует ее с цепочкой. Вдобавок ко всему, вы получаете сервер GraphQL с батарейками и всесторонней фильтрацией, нумерацией страниц и даже возможностями полнотекстового поиска.
Для всей настройки требуется только декларативное определение модели данных в виде файла схемы GraphQL и набор «сопоставлений», которые сообщают индексатору, как следует обрабатывать исторические события и внешние данные. Остальное делает Hydra, которая выводит развертываемые образы Docker для индексатора и сервера GraphQL. Минимальный, но полностью функциональный GraphQL API для исторических предложений Кусамы можно создать и развернуть всего за несколько минут.
Чтобы получить представление о том, как выглядит развернутый узел запроса, перейдите на игровую площадку и, например, запросите отклоненные предложения со стоимостью облигации больше 800000000000000:
query {
proposals(where: { bond_gt: "10000", value_gt: "800000000000000", status_eq: REJECTED }, limit: 5) {
proposer
version
value
status
beneficiary
bond
}
}
Демо
Вот хорошее вступительное демонстрационное видео:
Дорожная карта
Ниже перечислены запланированные следующие шаги для фреймворка.
- Добавьте поддержку для всех поддонов РАМКИ субстрата (помогите нам!) .
- Значительно улучшите UX разработчиков за счет обеспечения безопасности типов и дальнейшего разделения индексации и GraphQL API.
- Значительно улучшить производительность и время синхронизации.
Ресурсы
Проверить:
Призыв к действию!
- Если вы являетесь разработчиком в этой экосистеме, помогите нам получить поддержку для всех поддонов FRAME (они нужны нам всем) и в целом улучшить структуру.
- Проголосуйте за Гидру в категории выбора сообщества на Хакатоне Хакусама .
Отказ от ответственности
Все прогнозные заявления, оценки и обязательства, содержащиеся в этом сообщении в блоге, следует понимать как крайне неопределенные, не имеющие обязательной силы и не дающие никаких гарантий точности или надежности. В максимальной степени, разрешенной законом, ни при каких обстоятельствах Joystream, Jsgenesis или наши аффилированные лица, или любой из наших директоров, сотрудников, подрядчиков, поставщиков услуг или агентов не несут какой-либо ответственности перед любым лицом за любые прямые или косвенные убытки, обязательства, расходы. , претензии, расходы или ущерб любого рода, будь то по контракту или в результате деликта, включая небрежность или иным образом, возникшие в результате или связанные с использованием всего или части этого сообщения или любых ссылок на сторонние веб-сайты.
Оригинальная статья — https://blog.joystream.org/announcing-hydra/