Graph — это протокол для быстрого создания децентрализованных приложений (dApps) на Ethereum и IPFS с использованием GraphQL.
Graph Node — это реализация Rust с открытым исходным кодом, которая генерирует события в блокчейне Ethereum для детерминированного обновления хранилища данных, которые можно запрашивать через конечную точку GraphQL.
Подробные инструкции и дополнительную информацию можно найти в Руководстве по началу работы.
Для сборки и запуска этого проекта в вашей системе должно быть установлено следующее:
rustfmt
, который является частью установки Rust по умолчанию, является обязательным требованием во время сборки.Для данных сети Ethereum вы можете запустить собственный узел Ethereum или использовать поставщика узла Ethereum по вашему выбору.
Минимальные требования к оборудованию:
cargo
требуется 8 ГБ ОЗУ.Самый простой способ запустить Graph Node — использовать официальную настройку компоновки Docker. Это запустит базу данных Postgres, узел IPFS и узел графика. Следуйте инструкциям здесь.
Это краткий пример, показывающий работающий узел графа. Это подграф Граватаров.
ipfs init
, а затем ipfs daemon
.initdb -D .postgres -E UTF8 --locale=C
, а затем pg_ctl -D .postgres -l logfile start
и createdb graph-node
.sudo apt-get install -y clang libpq-dev libssl-dev pkg-config
yarn
yarn codegen
cargo build
.После того, как вы установили все зависимости, вы можете запустить следующее:
cargo run -p graph-node --release --
--postgres-url postgresql://USERNAME[:PASSWORD]@localhost:5432/graph-node
--ethereum-rpc NETWORK_NAME:[CAPABILITIES]:URL
--ipfs 127.0.0.1:5001
Попробуйте использовать имя пользователя вашей ОС как USERNAME
и PASSWORD
. Подробную информацию о настройке строки подключения см. в документации Postgres. graph-node
использует несколько расширений Postgres. Если пользователь Postgres, от имени которого вы запускаете graph-node
является суперпользователем, graph-node
включит эти расширения при инициализации базы данных. Если пользователь Postgres не является суперпользователем, вам придется создать расширения вручную, поскольку это разрешено делать только суперпользователям. Для их создания вам необходимо подключиться как суперпользователь, которым во многих установках является пользователь postgres
:
psql -q -X -U < SUPERUSER > graph-node << EOF
create extension pg_trgm;
create extension pg_stat_statements;
create extension btree_gist;
create extension postgres_fdw;
grant usage on foreign data wrapper postgres_fdw to <USERNAME>;
EOF
Это также запустит интерфейс GraphiQL по адресу http://127.0.0.1:8000/
.
yarn create-local
Затем вы можете развернуть подграф:
yarn deploy-local
Это позволит построить и развернуть подграф на узле графа. Индексация подграфа должна начаться немедленно.
USAGE:
graph-node [FLAGS] [OPTIONS] --ethereum-ipc <NETWORK_NAME:FILE> --ethereum-rpc <NETWORK_NAME:URL> --ethereum-ws <NETWORK_NAME:URL> --ipfs <HOST:PORT> --postgres-url <URL>
FLAGS:
--debug Enable debug logging
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--admin-port <PORT> Port for the JSON-RPC admin server [default: 8020]
--elasticsearch-password <PASSWORD>
Password to use for Elasticsearch logging [env: ELASTICSEARCH_PASSWORD]
--elasticsearch-url <URL>
Elasticsearch service to write subgraph logs to [env: ELASTICSEARCH_URL=]
--elasticsearch-user <USER> User to use for Elasticsearch logging [env: ELASTICSEARCH_USER=]
--ethereum-ipc <NETWORK_NAME:[CAPABILITIES]:FILE>
Ethereum network name (e.g. 'mainnet'), optional comma-separated capabilities (eg full,archive), and an Ethereum IPC pipe, separated by a ':'
--ethereum-polling-interval <MILLISECONDS>
How often to poll the Ethereum node for new blocks [env: ETHEREUM_POLLING_INTERVAL=] [default: 500]
--ethereum-rpc <NETWORK_NAME:[CAPABILITIES]:URL>
Ethereum network name (e.g. 'mainnet'), optional comma-separated capabilities (eg 'full,archive'), and an Ethereum RPC URL, separated by a ':'
--ethereum-ws <NETWORK_NAME:[CAPABILITIES]:URL>
Ethereum network name (e.g. 'mainnet'), optional comma-separated capabilities (eg `full,archive), and an Ethereum WebSocket URL, separated by a ':'
--node-id <NODE_ID>
A unique identifier for this node instance. Should have the same value between consecutive node restarts [default: default]
--http-port <PORT> Port for the GraphQL HTTP server [default: 8000]
--ipfs <HOST:PORT> HTTP address of an IPFS node
--postgres-url <URL> Location of the Postgres database used for storing entities
--subgraph <[NAME:]IPFS_HASH> Name and IPFS hash of the subgraph manifest
--ws-port <PORT> Port for the GraphQL WebSocket server [default: 8001]
Аргументы командной строки обычно — это все, что необходимо для запуска экземпляра graph-node
. Для более продвинутого использования различные аспекты graph-node
можно дополнительно настроить с помощью переменных среды. Очень большие экземпляры graph-node
также могут разделить работу по запросам и индексированию между несколькими базами данных.
node
— локальный узел графа.graph
— библиотека, предоставляющая характеристики для компонентов системы и типы общих данных.core
— библиотека, предоставляющая реализации основных компонентов, используемых всеми узлами.chain/ethereum
— Библиотека с компонентами для получения данных из Ethereum.graphql
— реализация GraphQL с генерацией схемы API, самоанализом и многим другим.mock
— библиотека, предоставляющая макетные реализации для всех компонентов системы.runtime/wasm
— библиотека для запуска сценариев извлечения данных WASM.server/http
— библиотека, предоставляющая сервер GraphQL через HTTP.store/postgres
— хранилище Postgres с дружественным к GraphQL интерфейсом и журналами аудита. ? = В процессе
? = Функция завершена. Требуется дополнительное тестирование.
✅ = Функция завершена
Особенность | Статус |
---|---|
Эфириум | |
Индексирование событий смарт-контракта | ✅ |
Реорганизация цепочки операций | ✅ |
Сопоставления | |
Сопоставления на основе WASM | ✅ |
Набор инструментов TypeScript-WASM | ✅ |
Автоматически генерируемые типы TypeScript | ✅ |
ГрафQL | |
Запрос объектов по идентификатору | ✅ |
Запрос коллекций сущностей | ✅ |
Пагинация | ✅ |
Фильтрация | ✅ |
Блочная фильтрация | ✅ |
Отношения сущностей | ✅ |
Подписки | ✅ |
Пожалуйста, проверьте CONTRIBUTING.md, чтобы узнать о ходе разработки и соглашениях, которые мы используем. Вот список хороших первых выпусков.
Авторские права © Graph Protocol, Inc., 2018-2019 и ее участники.
Graph имеет двойную лицензию: лицензию MIT и лицензию Apache версии 2.0.
Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для определения конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.