Graph เป็นโปรโตคอลสำหรับการสร้างแอปพลิเคชันแบบกระจายอำนาจ (dApps) อย่างรวดเร็วบน Ethereum และ IPFS โดยใช้ GraphQL
Graph Node เป็นการใช้งาน Rust แบบโอเพนซอร์สที่เหตุการณ์มาจากบล็อกเชน Ethereum เพื่ออัปเดตที่เก็บข้อมูลตามกำหนดซึ่งสามารถสอบถามผ่านตำแหน่งข้อมูล GraphQL ได้
สำหรับคำแนะนำโดยละเอียดและบริบทเพิ่มเติม โปรดดูคู่มือการเริ่มต้นใช้งาน
ในการสร้างและรันโปรเจ็กต์นี้ คุณต้องติดตั้งสิ่งต่อไปนี้ในระบบของคุณ:
rustfmt
ซึ่งเป็นส่วนหนึ่งของการติดตั้ง Rust เริ่มต้นนั้นเป็นข้อกำหนดด้านเวลาในการสร้างสำหรับข้อมูลเครือข่าย Ethereum คุณสามารถรันโหนด Ethereum ของคุณเอง หรือใช้ผู้ให้บริการโหนด Ethereum ที่คุณเลือกได้
ข้อกำหนดฮาร์ดแวร์ขั้นต่ำ:
cargo
จำเป็นต้องมี RAM 8GBวิธีที่ง่ายที่สุดในการรัน 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
เป็น superuser graph-node
จะเปิดใช้งานส่วนขยายเหล่านี้เมื่อเริ่มต้นฐานข้อมูล หากผู้ใช้ Postgres ไม่ใช่ผู้ใช้ระดับสูง คุณจะต้องสร้างส่วนขยายด้วยตนเอง เนื่องจากมีเพียงผู้ใช้ระดับสูงเท่านั้นที่ได้รับอนุญาตให้ทำเช่นนั้น ในการสร้างสิ่งเหล่านี้ คุณจะต้องเชื่อมต่อในฐานะ superuser ซึ่งในการติดตั้งหลายๆ ครั้งจะเป็นผู้ใช้ 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
— ไลบรารี่ที่มีส่วนประกอบสำหรับรับข้อมูลจาก Ethereumgraphql
— การใช้งาน GraphQL พร้อมการสร้างสคีมา API, วิปัสสนา และอื่นๆ อีกมากมายmock
- ไลบรารีที่ให้การใช้งานจำลองสำหรับส่วนประกอบของระบบทั้งหมดruntime/wasm
— ไลบรารีสำหรับการรันสคริปต์แยกข้อมูล WASMserver/http
- ไลบรารีที่ให้บริการเซิร์ฟเวอร์ GraphQL ผ่าน HTTPstore/postgres
— ร้านค้า Postgres ที่มีอินเทอร์เฟซที่เป็นมิตรต่อ GraphQL และบันทึกการตรวจสอบ - = อยู่ระหว่างดำเนินการ
- = คุณสมบัติเสร็จสมบูรณ์ จำเป็นต้องมีการทดสอบเพิ่มเติม
✅ = คุณสมบัติเสร็จสมบูรณ์
คุณสมบัติ | สถานะ |
---|---|
อีเธอเรียม | |
การจัดทำดัชนีเหตุการณ์สัญญาอัจฉริยะ | |
จัดการการปรับโครงสร้างห่วงโซ่ | |
การแมป | |
การแมปแบบ WASM | |
ห่วงโซ่เครื่องมือ TypeScript-to-WASM | |
ประเภท TypeScript ที่สร้างขึ้นอัตโนมัติ | |
GraphQL | |
ค้นหาเอนทิตีตาม ID | |
สอบถามคอลเลกชันเอนทิตี | |
การแบ่งหน้า | |
การกรอง | |
การกรองแบบบล็อก | |
ความสัมพันธ์ของเอนทิตี | |
การสมัครรับข้อมูล |
โปรดตรวจสอบ CONTRIBUTING.md เพื่อดูขั้นตอนการพัฒนาและแบบแผนที่เราใช้ นี่คือรายการประเด็นแรกที่ดี
ลิขสิทธิ์ © 2018-2019 Graph Protocol, Inc. และผู้มีส่วนร่วม
Graph ได้รับใบอนุญาตแบบคู่ภายใต้ใบอนุญาต MIT และใบอนุญาต Apache เวอร์ชัน 2.0
เว้นแต่กฎหมายที่ใช้บังคับกำหนดหรือตกลงเป็นลายลักษณ์อักษร ซอฟต์แวร์ที่เผยแพร่ภายใต้ใบอนุญาตนี้จะถูกแจกจ่าย "ตามที่เป็น" โดยไม่มีการรับประกันหรือเงื่อนไขใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ดูใบอนุญาตสำหรับภาษาเฉพาะที่ควบคุมการอนุญาตและข้อจำกัดภายใต้ใบอนุญาต