Subgraph là gì? Các thành phần của Subgraph

Subgraph là gì? Các thành phần của Subgraph

Subgraph là cụm từ có thể bạn sẽ thường bắt gặp nếu bạn là một nhà phát triển của một dự án để truy vấn dữ liệu cho người dùng của mình hoặc nếu bạn có để ý đến dự án The Graph Protocol, vậy cùng tìm hiểu xem subgraph là gì và nó có các thành phần chính là gì nhé.

Subgraph là gì?

Subgraph là các APIs mở được xây dựng và phát hành trên giao thức The Graph. Giao thức The Graph là một giao thức lập chỉ mục phục vụ truy vấn dữ liệu từ nhưng nơi như mạng lưới blockchain (Ethereum) và lưu trữ (IPFS). 

Cụ thể trong blockchain, Subgraph xác định dữ liệu nào mà The Graph sẽ lập chỉ mục từ Ethereum và cách nó sẽ lưu trữ. Sau khi được triển khai, nó sẽ trở thành một phần của đồ thị dữ liệu blockchain toàn cầu.

Các thành phần của một subgraph (về mặt người dùng)

Nếu bạn là một người dùng, cụ thể là một thành viên trong đội ngũ lập trình phát triển một dự án cho tương lai Web3, ví dụ cụ thể là trên blockchain Ethereum, bạn sẽ có thể cần hiểu về các yếu tố của 1 subgraph để truy vấn dữ liệu của nó. 

Với phần này, các thành phần của một subgraph – về mặt người dùng, bài viết sẽ cho bạn hiểu nơi tìm kiếm và các thông tin nhận dạng cơ bản của the subgraph để sử dụng chúng.

Đầu tiên, truy cập trình tìm kiếm subgraph – The Graph Explorer để tìm kiếm subgraph cần tìm

Tại đây bạn sẽ thấy những thẻ dự án phía trên là các thẻ dẫn đến từng subgraph uy tín của các dự án nổi bật họ xây dựng. Bên dưới có khung tìm hìm kiếm và hiển thị 1 số subgraph cộng đồng xây dựng. Bạn có thể lọc hiển thị theo “Cập nhật gần đây” và loại subgraph.

Lấy ví dụ với Subgraph của PowerPool để hiểu trên giao diện này có các thông tin gì (Được ghi chú trong hình)

Thành phần subgraph

Phần Playground trên kia là để bạn dùng thử, hiện thử kết quả. Thường lập trình viên sẽ viết code trong theo mẫu đó trong hệ thống của anh ta để truy vấn dữ liệu từ subgraph tương tự cú pháp truy vấn trong hình, hoặc dựa theo schema quy định bên tay phải để viết ra các cú pháp phù hợp.

Các thành phần của một subgraph (về mặt kĩ thuật)

Mặt kĩ thuật là nơi để chúng ta tìm hiểu sâu hơn về 1 subgraph, biết được cách nó được định nghĩa, nguồn dữ liệu, các thông tin mà nó theo dõi,… từ đó sử dụng chúng đó hiệu quả hơn.

Về mặt kĩ thuật, một subgraph được định nghĩa bao gồm một số tệp:

1. subgraph.yaml:

Tệp kê khai (manifest) subgraph “subgraph.yaml” chỉ ra các hợp đồng thông minh nào mà subgraph của bạn lập chỉ mục từ chúng, các sự kiện nào từ các hợp đồng này cần chú ý đến và cách ánh xạ dữ liệu (map data) sự kiện tới các thực thể mà Graph Node lưu trữ và cho phép truy vấn.

Bạn có thể tìm thấy thông số kỹ thuật đầy đủ cho các tệp kê khai subgraph tại đây. Đây là 1 ví dụ về một tệp subgraph.yaml

Trong đó, các mục quan trọng cần cập nhật là:

  • description: mô tả theo văn người đọc về nội dung của subgraph. Mô tả này được the Graph Explorer hiển thị khi nó được triển khai trên Dịch vụ được lưu trữ.
  • repository: URL của cái repository (kho lưu trữ) để tìm thấy tệp kê khai subgraph được nói đến phía trên. Phần này cũng được hiển thị trên Graph Explorer.
  • dataSources.source: địa chỉ (address) của hợp đồng thông minh mà subgraph lấy nguồn thông tin và abi của hợp đồng thông minh sẽ sử dụng. Địa chỉ (address) là tùy chọn; nếu bạn bỏ qua nó thì hệ thống sẽ lập chỉ mục các sự kiện phù hợp từ tất cả các hợp đồng.
  • dataSources.source.startBlock: số tùy chọn của khối mà nguồn dữ liệu bắt đầu lập chỉ mục. Thường nên sử dụng khối mà hợp đồng đã được tạo.
  • dataSources.mapping.entities: các thực thể mà nguồn dữ liệu ghi vào nơi lưu trữ. Lược đồ (schema) cho mỗi thực thể được xác định trong tệp schema.graphql.
  • dataSources.mapping.abis: một hoặc nhiều tệp ABI được đặt tên cho hợp đồng nguồn cũng như bất kỳ hợp đồng thông minh nào khác mà bạn tương tác từ bên trong ánh xạ.
  • dataSources.mapping.eventHandlers: liệt kê các sự kiện hợp đồng thông minh mà subgraph này phản ứng và các trình xử lý (handlers) trong ánh xạ—./src/mapping.ts trong ví dụ trên — biến những sự kiện này thành các thực thể trong nơi lưu trữ.
  • dataSources.mapping.callHandlers: liệt kê các chức năng hợp đồng thông minh mà subgraph này phản ứng và các trình xử lý (handlers) trong ánh xạ chuyển đổi các đầu vào và đầu ra thành các lệnh gọi hàm thành các thực thể trong nơi lưu trữ.
  • dataSources.mapping.blockHandlers: liệt kê các khối mà subgraph này phản ứng và các trình xử lý (handlers) trong ánh xạ để chạy khi một khối được nối vào chuỗi. Nếu không có bộ lọc, trình xử lý khối sẽ được chạy mỗi khối. Một bộ lọc tùy chọn có thể được cung cấp với các loại sau: calls. Bộ lọc calls sẽ chạy trình xử lý nếu khối chứa ít nhất một lệnh gọi đến hợp đồng nguồn dữ liệu.

Một subgraph có thể lập chỉ mục dữ liệu từ nhiều hợp đồng thông minh. Thêm mục nhập cho mỗi hợp đồng mà từ đó dữ liệu cần được lập chỉ mục vào mảng dataSources.

Các trình kích hoạt cho nguồn dữ liệu trong một khối được sắp xếp theo quy trình sau:

  • Trình kích hoạt sự kiện và call được sắp xếp đầu tiên theo chỉ mục giao dịch trong khối.
  • Trình kích hoạt sự kiện và call trong cùng một giao dịch được sắp xếp theo quy ước: trình kích hoạt sự kiện trước rồi đến trình kích hoạt call, mỗi loại tuân theo thứ tự mà chúng được xác định trong tệp kê khai.
  • Trình kích hoạt chặn được chạy sau trình kích hoạt sự kiện và call, theo thứ tự chúng được xác định trong tệp kê khai.

Các quy tắc này có thể thay đổi.

2. schema.graphql:

Lược đồ (schema) GraphQL của bạn nằm trong tệp schema.graphql. Các lược đồ GraphQL được định nghĩa bằng ngôn ngữ định nghĩa giao diện GraphQL. Schema GraphQL xác định dữ liệu nào được lưu trữ và cách truy vấn nó qua GraphQL

3. AssemblyScript Mappings

Chứa Code AssemblyScript, chuyển đổi dữ liệu sự kiện trong Ethereum thành các đối tượng được xác định trong schema của bạn (ánh xạ – mapping).

Tóm tắt

Tóm lại để hiểu đơn giản về mặt kĩ thuật, các thành phần chí có:

  • subgraph.yaml: để kê khai về subgraph đó (làm gì, nguồn dữ liệu nào, ở đâu, sự kiện nào được theo dõi,…)
  • schema.graphql: quy định các loại dữ liệu nào, ở đâu và được truy vấn như thế nào
  • AssemblyScript Mappings: Trong quá trình truy vấn có các phép biến đổi dữ liệu gốc thành dữ liệu cần dùng như thế nào

Nguồn:

Website: https://thegraph.com

Blog: https://thegraph.com/blog

Telegram: http://t.me/graphprotocol

Twitter: https://twitter.com/graphprotocol

Discord: https://discord.gg/vtvv7FP

Github: https://github.com/graphprotocol

Everest: https://everest.link

adminVinaCrypted

Please contact @Ramonryu on Telegram for collaboration. Vui lòng liên hệ Telegram @Ramonryu để hợp tác

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.