Graph هو بروتوكول لبناء التطبيقات اللامركزية (dApps) بسرعة على Ethereum وIPFS باستخدام GraphQL.
Graph Node هو تطبيق مفتوح المصدر لـ Rust يقوم بمصدر الحدث لـ Ethereum blockchain لتحديث مخزن البيانات بشكل حاسم والذي يمكن الاستعلام عنه عبر نقطة نهاية GraphQL.
للحصول على تعليمات تفصيلية ومزيد من السياق، راجع دليل البدء.
لإنشاء هذا المشروع وتشغيله، يجب تثبيت ما يلي على نظامك:
rustfmt
، وهو جزء من تثبيت Rust الافتراضي، هو متطلب وقت البناء.بالنسبة لبيانات شبكة إيثريوم، يمكنك إما تشغيل عقدة إيثريوم الخاصة بك أو استخدام مزود عقدة إيثريوم من اختيارك.
الحد الأدنى لمتطلبات الأجهزة:
cargo
، يلزم وجود ذاكرة وصول عشوائي (RAM) سعة 8 جيجابايت.أسهل طريقة لتشغيل Graph Node هي استخدام إعداد الإنشاء الرسمي لـ Docker. سيؤدي هذا إلى بدء قاعدة بيانات Postgres وعقدة IPFS وعقدة الرسم البياني. اتبع التعليمات هنا.
هذا مثال سريع لإظهار عقدة الرسم البياني العاملة. إنه رسم بياني فرعي لـ Gravatars.
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 مع إنشاء مخطط واجهة برمجة التطبيقات والاستبطان والمزيد.mock
- مكتبة توفر تطبيقات وهمية لجميع مكونات النظام.runtime/wasm
- مكتبة لتشغيل البرامج النصية لاستخراج البيانات WASM.server/http
- مكتبة توفر خادم GraphQL عبر HTTP.store/postgres
- متجر Postgres بواجهة صديقة لـ GraphQL وسجلات تدقيق. ؟ = قيد التقدم
؟ = الميزة كاملة. مطلوب اختبارات إضافية.
✅ = اكتملت الميزة
ميزة | حالة |
---|---|
ايثريوم | |
فهرسة أحداث العقد الذكي | ✅ |
التعامل مع عمليات إعادة تنظيم السلسلة | ✅ |
التعيينات | |
التعيينات المستندة إلى WASM | ✅ |
سلسلة أدوات TypeScript إلى WASM | ✅ |
أنواع TypeScript التي تم إنشاؤها تلقائيًا | ✅ |
GraphQL | |
الاستعلام عن الكيانات حسب المعرف | ✅ |
مجموعات كيان الاستعلام | ✅ |
ترقيم الصفحات | ✅ |
تصفية | ✅ |
التصفية على أساس الكتلة | ✅ |
علاقات الكيان | ✅ |
الاشتراكات | ✅ |
يرجى مراجعة CONTRIBUTING.md للتعرف على تدفق التطوير والاتفاقيات التي نستخدمها. فيما يلي قائمة بالقضايا الأولى الجيدة.
حقوق الطبع والنشر © 2018-2019 Graph Protocol, Inc. والمساهمين.
تم ترخيص Graph بشكل مزدوج بموجب ترخيص MIT وترخيص Apache، الإصدار 2.0.
ما لم يكن ذلك مطلوبًا بموجب القانون المعمول به أو تم الاتفاق عليه كتابيًا، يتم توزيع البرامج الموزعة بموجب الترخيص على أساس "كما هي"، دون ضمانات أو شروط من أي نوع، سواء كانت صريحة أو ضمنية. راجع الترخيص لمعرفة الأذونات والقيود التي تحكم اللغة المحددة بموجب الترخيص.