Query the Hosted Service
Last updated
Last updated
Install and , the Rust package manager
Open your Terminal application then run the following command
The Graph is a decentralized protocol that enables developers to query data from blockchains using GraphQL. In this lesson, we will use Rust to submit a GraphQL query to the on The Graph’s Hosted Service. This hands-on lesson will provide you with the practical experience needed to interface with The Graph's ecosystem, and moreover, demonstrate the immense potential of leveraging Rust to interact with decentralized data networks. Let's dig in and uncover the incredible possibilities that await us in the realm of Rust, GraphQL, and The Graph's Hosted Service!
To start, let's discuss the subgraph and GraphQL query we're submitting. The graph-network-mainnet
subgraph extracts data from the protocol's smart contracts and makes it accessible via GraphQL queries. are the node operators of the protocol and allocate GRT tokens to subgraphs as part of their operations.
In this lesson, we're requesting data about indexers that is defined in the protocol's smart contracts. Our query is filtering results to the first 10 indexers who have allocated at least 1 GRT token to any subgraph in the protocol. Finally we're narrowing down the returned fields to id
, defaultDisplayName
, and stakedTokens
.
Table 1. Subgraph field descriptions
id
the Ethereum address of the Indexer
defaultDisplayName
the current default display name of the Indexer. Potentially null
and used to filter queries
stakedTokens
current tokens staked in The Graph protocol
Figure 1. Subgraph query
Coming soon
Open your Terminal application and change to your home directory
Create a new directory called rohr
and change into it
Create a new cargo
project called indexer_subgraph_query
Change into the new indexer_subgraph_query
directory
Open Cargo.toml
with nano
Add the following contents below the [dependencies]
section of Cargo.toml
Save your changes to Cargo.toml
and exit nano
Create a new file called structs.rs
in the src
directory
Add the following use declarations to src/structs.rs
Next define a few struct
statements in src/structs.rs
Notice that we created three structs:
IndexerResponse
: the highest-level struct in the hierarchy. It defines the response format from the POST
request sent to The Graph's Hosted Service
IndexerData
and Indexer
: nested structs which define data returned in the IndexerResponse
Each Indexer in The Graph protocol would theoretically be assigned to an Indexer
struct, with the IndexerData
struct containing all Indexer
structs (or a subset based on the query filter submitted, i.e. first 10).
Finally, IndexerData
is the value of the IndexerResponse
data
field.
Save your changes to src/structs.rs
and exit nano
Your file structs.rs
will look something like this
Open src/main.rs
with nano
Delete all existing lines in the file
Add the following user declarations to the top of src/main.rs
From your terminal, use cargo
to compile and run your Rust program
is a framework for serializing and deserializing Rust data structures
provides a higher-level HTTP client
is a platform for writing asynchronous applications
-