以太坊数据索引平台The Graph使用教程

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

当你尝试访问以太坊智能合约以及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,那么点击该协议进入:

在这里插入图片描述

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

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

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

2、构造GraphQL查询语句

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

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

在这里插入图片描述

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

{
  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来处理请求:

npm install axios --save

整个代码看起来是这样:

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)
})

执行结果类似下图:

在这里插入图片描述

4、总结

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


目录
相关文章
|
存储 运维 监控
NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
【2月更文挑战第33天】NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
510 3
|
8月前
|
人工智能 架构师 关系型数据库
第二届固件技术峰会盛大召开,共探 AI 时代固件创新之路
阿里云联合字节跳动、固件联盟主办的第二届固件技术峰会在长沙顺利召开,探索AI时代固件技术发展新趋势。
|
6月前
|
人工智能 自然语言处理 大数据
互联网医院智能导诊系统的技术实现原理
互联网医院智能导诊系统利用人工智能与大数据技术,通过自然语言处理、医学知识图谱、多模态交互等技术,实现患者症状的智能识别与科室匹配,提升挂号效率与准确率,优化就医流程。
366 10
|
6月前
|
传感器 自然语言处理 资源调度
AR 交互与自动感应技术的博物馆智慧导览系统功能解析
本系统结合AR图像识别、自动感应与多语言资源管理,实现虚拟内容与文物精准叠加、自动讲解与智能导航,提升博物馆导览体验智能化、互动性。
603 1
|
缓存 安全 Java
原子操作的实现原理
原子操作的实现原理
304 0
|
安全 测试技术 区块链
“DApp智能合约开发:流程、难点与解决方案”
DApp(去中心化应用)是一种运行在区块链上的程序,旨在为用户提供一种去中心化的、安全的、抗审查的应用体验。
|
前端开发 JavaScript 数据可视化
React的应用场景有哪些?
React 是一个由 Facebook 开发并广泛使用的 JavaScript 库,专门用于构建用户界面。由于其灵活性和强大的生态系统,React 被广泛应用于多种场景。
595 4
|
算法 JavaScript
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
330 0
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
|
机器学习/深度学习 人工智能 算法
【AI】从零构建深度学习框架实践
【5月更文挑战第16天】 本文介绍了从零构建一个轻量级的深度学习框架tinynn,旨在帮助读者理解深度学习的基本组件和框架设计。构建过程包括设计框架架构、实现基本功能、模型定义、反向传播算法、训练和推理过程以及性能优化。文章详细阐述了网络层、张量、损失函数、优化器等组件的抽象和实现,并给出了一个基于MNIST数据集的分类示例,与TensorFlow进行了简单对比。tinynn的源代码可在GitHub上找到,目前支持多种层、损失函数和优化器,适用于学习和实验新算法。
479 2