Graph adalah protokol untuk membangun aplikasi terdesentralisasi (dApps) dengan cepat di Ethereum dan IPFS menggunakan GraphQL.
Graph Node adalah implementasi Rust open source yang merupakan sumber peristiwa dari blockchain Ethereum untuk memperbarui penyimpanan data secara deterministik yang dapat ditanyakan melalui titik akhir GraphQL.
Untuk instruksi terperinci dan konteks lebih lanjut, lihat Panduan Memulai.
Untuk membangun dan menjalankan proyek ini, Anda perlu menginstal yang berikut ini di sistem Anda:
rustfmt
, yang merupakan bagian dari instalasi Rust default, merupakan persyaratan waktu pembuatan.Untuk data jaringan Ethereum, Anda dapat menjalankan node Ethereum Anda sendiri atau menggunakan penyedia node Ethereum pilihan Anda.
Persyaratan Perangkat Keras Minimum:
cargo
, diperlukan RAM 8GB.Cara termudah untuk menjalankan Graph Node adalah dengan menggunakan pengaturan penulisan Docker resmi. Ini akan memulai database Postgres, node IPFS, dan Graph Node. Ikuti instruksi di sini.
Ini adalah contoh cepat untuk menunjukkan Graph Node yang berfungsi. Ini adalah subgraf untuk Gravatars.
ipfs init
diikuti dengan ipfs daemon
.initdb -D .postgres -E UTF8 --locale=C
diikuti oleh pg_ctl -D .postgres -l logfile start
dan createdb graph-node
.sudo apt-get install -y clang libpq-dev libssl-dev pkg-config
yarn
yarn codegen
cargo build
.Setelah Anda menyiapkan semua dependensi, Anda dapat menjalankan perintah berikut:
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
Coba nama pengguna OS Anda sebagai USERNAME
dan PASSWORD
. Untuk detail tentang pengaturan string koneksi, periksa dokumentasi Postgres. graph-node
menggunakan beberapa ekstensi Postgres. Jika pengguna Postgres yang Anda jalankan graph-node
adalah pengguna super, graph-node
akan mengaktifkan ekstensi ini saat menginisialisasi database. Jika pengguna Postgres bukan pengguna super, Anda perlu membuat ekstensi secara manual karena hanya pengguna super yang diperbolehkan melakukannya. Untuk membuatnya, Anda perlu terhubung sebagai pengguna super, yang dalam banyak instalasi adalah pengguna 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
Ini juga akan menjalankan antarmuka GraphiQL di http://127.0.0.1:8000/
.
yarn create-local
Kemudian Anda dapat menerapkan subgraf:
yarn deploy-local
Ini akan membangun dan menyebarkan subgraf ke Graph Node. Ini harus segera mulai mengindeks subgraf.
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]
Argumen baris perintah secara umum adalah semua yang diperlukan untuk menjalankan instance graph-node
. Untuk penggunaan tingkat lanjut, berbagai aspek graph-node
selanjutnya dapat dikonfigurasi melalui variabel lingkungan. Instance graph-node
yang sangat besar juga dapat membagi pekerjaan pembuatan kueri dan pengindeksan di beberapa database.
node
— Node Grafik lokal.graph
- Pustaka yang menyediakan ciri-ciri komponen sistem dan tipe data umum.core
— Pustaka yang menyediakan implementasi untuk komponen inti, yang digunakan oleh semua node.chain/ethereum
— Perpustakaan dengan komponen untuk memperoleh data dari Ethereum.graphql
- Implementasi GraphQL dengan pembuatan skema API, introspeksi, dan banyak lagi.mock
— Pustaka yang menyediakan implementasi tiruan untuk semua komponen sistem.runtime/wasm
— Pustaka untuk menjalankan skrip ekstraksi data WASM.server/http
— Perpustakaan yang menyediakan server GraphQL melalui HTTP.store/postgres
— Toko Postgres dengan antarmuka ramah GraphQL dan log audit. ? = Sedang Berlangsung
? = Fitur selesai. Diperlukan pengujian tambahan.
✅ = Fitur selesai
Fitur | Status |
---|---|
Ethereum | |
Mengindeks acara kontrak pintar | ✅ |
Menangani reorganisasi rantai | ✅ |
Pemetaan | |
Pemetaan berbasis WASM | ✅ |
Rantai alat TypeScript-ke-WASM | ✅ |
Tipe TypeScript yang dibuat secara otomatis | ✅ |
GrafikQL | |
Entitas kueri berdasarkan ID | ✅ |
Koleksi entitas kueri | ✅ |
Paginasi | ✅ |
Penyaringan | ✅ |
Pemfilteran berbasis blok | ✅ |
Hubungan entitas | ✅ |
Langganan | ✅ |
Silakan periksa CONTRIBUTING.md untuk alur pengembangan dan konvensi yang kami gunakan. Berikut daftar terbitan pertama yang bagus.
Hak Cipta © 2018-2019 Graph Protocol, Inc. dan kontributor.
Graph memiliki lisensi ganda di bawah lisensi MIT dan Lisensi Apache, Versi 2.0.
Kecuali diwajibkan oleh undang-undang yang berlaku atau disetujui secara tertulis, perangkat lunak yang didistribusikan berdasarkan Lisensi didistribusikan berdasarkan DASAR "APA ADANYA", TANPA JAMINAN ATAU KETENTUAN DALAM BENTUK APAPUN, baik tersurat maupun tersirat. Lihat Lisensi untuk bahasa tertentu yang mengatur izin dan batasan berdasarkan Lisensi.