GraphQL - это язык запросов для API, который позволяет запрашивать большие наборы данных, указав формат ожидаемого результата. Наш большой набор данных будет блокчейном Ethereum, и мы будем запрашивать у него такие вещи, как события, состояние синхронизации клиента и данные транзакций.
Ethereum Grid упрощает настройку и использование Гет клиент go-ethereum, включая его сервер GraphQL через доступный пользовательский интерфейс. Это краткое руководство поможет вам начать.
Grid - это настольное приложение, которое позволяет легко загружать и настраивать инструменты Ethereum. Сборки для Mac, Windows и Linux доступны по адресу grid.ethereum.org, После загрузки и запуска Grid будет отображаться в строке меню вашей ОС в виде логотипа Ethereum.
Перейдите к плагину Geth в Grid, затем на вкладке «Версия» загрузите последнюю версию Geth (поддержка GraphQL была введена в v1.9.0). Примечание: если у вас уже установлен Geth в вашей системе, этот шаг все еще необходим, если вы хотите настроить его через Grid. Сетка управляет двоичными файлами локально.
На вкладке «Настройки» выберите раскрывающийся список дляEnable GraphQL Server
, Мы просто исследуем, такGörli (testnet)
это хороший вариант для сети. После настройки включите переключатель, чтобы запустить Geth.
GraphiQL - это фантастическая среда разработки в браузере для изучения и запроса API-интерфейсов GraphQL. Geth делает этот интерфейс доступным наhttp://localhost:8547
, но вы также можете получить к нему доступ в Grid через приложение Geth GraphQL Explorer, которое можно найти на вкладке «О программе».
Давайте рассмотрим некоторые примеры.
Этот запрос возвращает данные о состоянии синхронизации вашего узла.
Этот запрос (из стартовый пост) находит ENSHashRegistered
события в сети Görli и возвращает адрес пользователя, выполняющего регистрацию, а также номер блока и метку времени, в которую он был включен.
Используйте документацию схемы, чтобы узнать, что это возможно (подсказка: кнопка «Документы» в верхнем правом углу GraphiQL). Когда вы начнете вводить запрос, GraphiQL автоматически завершит все возможные варианты, основываясь на схеме. пример использования предоставленный EthQL также должен оказаться полезным.
Теперь вы можете создать веб-приложение, которое подключается к экземпляру GraphQL, запущенному наlocalhost:8547
и отправлять запросы на/graphql
конечная точка с использованием клиента, как Аполлон,
Если вы хотите дополнительно настроить некоторые флаги Geth GraphQL, вы можете нажатьUse custom flags
и настройте следующие атрибуты:
--graphql
Включить сервер GraphQL
--graphql.addr value
Интерфейс прослушивания сервера GraphQL (по умолчанию: «localhost»)
--graphql.port value
Порт прослушивания сервера GraphQL (по умолчанию: 8547)
--graphql.corsdomain value
Разделенный запятыми список доменов, от которых принимаются запросы от разных источников (принудительно устанавливается браузером)
Выполнение функции контракта может быть выполнено с помощьюcall
функция с подписью метода контракта. Подпись метода контракта - это хэш метода, который вы хотите вызвать, напримерbalanceOf
наряду с закодированными параметрами, такими какaddress
, Вы можете узнать больше о Контракт ABI и увидеть полезные утилиты для получения подписи от web3.js,
В следующем фрагменте кода я покажу, как запросить баланс токенов ERC20 с помощью Apollo GraphQL клиент:
Во многих случаях GraphQL является звездной альтернативой API REST. При запросе блочных данных простой интерфейс GraphQL является значительным улучшением по сравнению с JSON-RPC API, предоставляя вам именно те данные, которые вам нужны, в нужном формате и структуре.
Реализация GetQL в GraphQL основана на EIP 1767: интерфейс GraphQL к данным узла Ethereum с усилиями во главе с Команда Consensys EthQL, Следите за ними для более захватывающих разработок в дополнительных полях и типах запросов, таких как переводы и балансы ERC20, имена ENS и многое другое.
Если у вас возникнут какие-либо проблемы или у вас есть предложения по Grid или нашей интеграции с Geth, пожалуйста, поделитесь с нами своим отзывом, Есть ли другой проект, который вы хотели бы видеть интегрированным в Grid для обеспечения доступного пользовательского интерфейса? Дайте нам знать!