如何访问The Graph索引的以太坊数据

当你尝试访问以太坊智能合约以及DApp产生的区块链数据时, 可能会发现很难将数据转换为一种可读的格式。 The Graph提供了一种用于查询以太坊和IPFS网络数据的索引协议,任何人 都可以基于其提供的开放API创建并发布索引数据,即subgraph,这使得 区块链数据更容易访问。 在这个教程中,我们将学习如何使用The Graph来查询Aave协议数据, 使用的技术栈包括Graphql、JavaScript和Nodejs。

用自己熟悉的语言学习 以太坊DApp开发Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart

1、访问The Graph的准备工作

教程的第一步是访问The Graph网站并查看目前已经支持的协议,例如 Uniswap、ERC20、Aave、Compound等等。如果找到了你要提取数据的协议, 例如Aave,那么点击该协议进入:

访问The Graph以太坊索引数据

你要做的第一件事就是记下来页面上的地址(1),后面要用这个地址来查询。 在我们的示例中,这个地址就是: https://api.thegraph.com/subgraphs/name/aave/protocol

左边的区域(2)给出了一个查询示例,你可以点击【play】按钮来执行。 也可以修改查询示例进行其他测试。

右边的区域(3)给出了这个subgraph所包含的实体的描述。点击其中任何一个 实体都会给出该实体更详细的说明信息,包括它的字段以及与其他实体的关系。

2、构造GraphQL查询语句

在下面的示例中,我们将构造一个简单的查询语句,来列出Aave平台上最新的闪电贷。 The Graph的查询使用GraphQL,如果你还不熟悉GrapQL,可以查看这个教程

在开始写GraphQL查询语句之前,我们还需要先了解下闪电贷在graph中是如何定义的。 为此我们可以在左边搜索FlashLoan实体,查看它包含了哪些内容:

访问The Graph以太坊索引数据

我们的查询语句将查找最新的10条闪电贷记录:

1
2
3
4
5
6
7
8
9
10
11
12
{
flashLoans(first: 10, orderBy: timestamp, orderDirection: desc) {
id
reserve {
name
symbol
}
amount,
target,
timestamp
}
}

注意闪电贷对象指向另一个实体reserve,即储备库。

3、使用NodeJS提交GraphQL查询

The Graph的用户界面为测试和开发自己的查询提供了一个非常好的办法。 现在是时候用JavaScript(或你选择的其他语言)来实现查询了。这个 过程很简单,我们只需要将查询语句通过HTTP POST请求提交给The Graph 提供的https访问端节点。

我们使用axios来处理请求:

1
npm install axios --save

整个代码看起来是这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const axios = require('axios')

axios.post('https://api.thegraph.com/subgraphs/name/aave/protocol', {
query: `
{
flashLoans(first: 10, orderBy: timestamp, orderDirection: desc) {
id
reserve {
name
symbol
}
amount,
target,
timestamp
}
}
`
})
.then((res) => {
for (const flashsloan of res.data.data.flashLoans) {
console.log(flashsloan)
}
})
.catch((error) => {
console.error(error)
})

执行结果类似下图:

访问The Graph以太坊索引数据

4、总结

正如你看到的,使用The Graph索引过的数据可以让你避免监听区块链事件、解码事件参数 或者处理token小数点问题,开发效率和系统稳定性都会得到很大提高。


原文链接:How to access indexed Ethereum data with The Graph

汇智网翻译整理,转载请标明出处