Der Graph ist ein Protokoll zum schnellen Erstellen dezentraler Anwendungen (dApps) auf Ethereum und IPFS mithilfe von GraphQL.
Graph Node ist eine Open-Source-Rust-Implementierung, die die Ethereum-Blockchain als Ereignisquelle nutzt, um einen Datenspeicher deterministisch zu aktualisieren, der über den GraphQL-Endpunkt abgefragt werden kann.
Ausführliche Anweisungen und weiteren Kontext finden Sie im Leitfaden „Erste Schritte“.
Um dieses Projekt zu erstellen und auszuführen, muss Folgendes auf Ihrem System installiert sein:
rustfmt
, das Teil der Standardinstallation von Rust ist, eine Build-Zeit-Anforderung darstellt.Für Ethereum-Netzwerkdaten können Sie entweder Ihren eigenen Ethereum-Knoten betreiben oder einen Ethereum-Knotenanbieter Ihrer Wahl nutzen.
Mindestanforderungen an die Hardware:
cargo
zu erstellen, sind 8 GB RAM erforderlich.Der einfachste Weg, einen Graph Node auszuführen, ist die Verwendung des offiziellen Docker-Compose-Setups. Dadurch werden eine Postgres-Datenbank, ein IPFS-Knoten und ein Graph-Knoten gestartet. Folgen Sie den Anweisungen hier.
Dies ist ein kurzes Beispiel, um einen funktionierenden Diagrammknoten zu zeigen. Es ist ein Untergraph für Gravatare.
ipfs init
gefolgt von ipfs daemon
aus.initdb -D .postgres -E UTF8 --locale=C
gefolgt von pg_ctl -D .postgres -l logfile start
und createdb graph-node
.sudo apt-get install -y clang libpq-dev libssl-dev pkg-config
yarn
yarn codegen
cargo build
aus.Sobald Sie alle Abhängigkeiten eingerichtet haben, können Sie Folgendes ausführen:
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
Versuchen Sie es mit Ihrem Betriebssystem-Benutzernamen USERNAME
und PASSWORD
. Einzelheiten zum Festlegen der Verbindungszeichenfolge finden Sie in der Postgres-Dokumentation. graph-node
verwendet einige Postgres-Erweiterungen. Wenn der Postgres-Benutzer, mit dem Sie graph-node
ausführen, ein Superuser ist, aktiviert graph-node
diese Erweiterungen, wenn die Datenbank initialisiert wird. Wenn der Postgres-Benutzer kein Superuser ist, müssen Sie die Erweiterungen manuell erstellen, da dies nur Superuser dürfen. Um sie zu erstellen, müssen Sie sich als Superuser anmelden, was in vielen Installationen der postgres
-Benutzer ist:
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
Dadurch wird auch eine GraphiQL-Schnittstelle unter http://127.0.0.1:8000/
gestartet.
yarn create-local
Dann können Sie den Untergraphen bereitstellen:
yarn deploy-local
Dadurch wird der Untergraph erstellt und im Diagrammknoten bereitgestellt. Es sollte sofort mit der Indizierung des Untergraphen beginnen.
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]
Die Befehlszeilenargumente sind im Allgemeinen alles, was zum Ausführen einer graph-node
-Instanz erforderlich ist. Für erweiterte Anwendungen können verschiedene Aspekte von graph-node
über Umgebungsvariablen weiter konfiguriert werden. Bei sehr großen graph-node
kann die Abfrage- und Indizierungsarbeit auch auf mehrere Datenbanken aufgeteilt werden.
node
– Ein lokaler Diagrammknoten.graph
– Eine Bibliothek, die Merkmale für Systemkomponenten und Typen für allgemeine Daten bereitstellt.core
– Eine Bibliothek, die Implementierungen für Kernkomponenten bereitstellt und von allen Knoten verwendet wird.chain/ethereum
– Eine Bibliothek mit Komponenten zum Abrufen von Daten von Ethereum.graphql
– Eine GraphQL-Implementierung mit API-Schemagenerierung, Selbstbeobachtung und mehr.mock
– Eine Bibliothek, die Scheinimplementierungen für alle Systemkomponenten bereitstellt.runtime/wasm
– Eine Bibliothek zum Ausführen von WASM-Datenextraktionsskripten.server/http
– Eine Bibliothek, die einen GraphQL-Server über HTTP bereitstellt.store/postgres
– Ein Postgres-Store mit einer GraphQL-freundlichen Schnittstelle und Prüfprotokollen. ? = In Bearbeitung
? = Funktion abgeschlossen. Zusätzliche Tests erforderlich.
✅ = Funktion abgeschlossen
Besonderheit | Status |
---|---|
Ethereum | |
Indizierung intelligenter Vertragsereignisse | ✅ |
Erledigen Sie Kettenreorganisationen | ✅ |
Zuordnungen | |
WASM-basierte Zuordnungen | ✅ |
TypeScript-zu-WASM-Toolchain | ✅ |
Automatisch generierte TypeScript-Typen | ✅ |
GraphQL | |
Fragen Sie Entitäten nach ID ab | ✅ |
Entitätssammlungen abfragen | ✅ |
Pagination | ✅ |
Filtern | ✅ |
Blockbasierte Filterung | ✅ |
Entitätsbeziehungen | ✅ |
Abonnements | ✅ |
Bitte überprüfen Sie CONTRIBUTING.md für den Entwicklungsablauf und die von uns verwendeten Konventionen. Hier ist eine Liste guter Erstausgaben.
Copyright © 2018-2019 Graph Protocol, Inc. und Mitwirkende.
Der Graph ist unter der MIT-Lizenz und der Apache-Lizenz, Version 2.0, doppelt lizenziert.
Sofern nicht gesetzlich vorgeschrieben oder schriftlich vereinbart, wird die im Rahmen der Lizenz vertriebene Software „WIE BESEHEN“ und OHNE GEWÄHRLEISTUNGEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend, vertrieben. Die spezifische Sprache, die die Berechtigungen und Einschränkungen im Rahmen der Lizenz regelt, finden Sie in der Lizenz.