以太坊数据索引平台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小数点问题,开发效率和系统稳定性都会得到很大提高。


目录
相关文章
|
Linux
Linux下安装curl
Linux下安装curl
2924 0
|
前端开发 定位技术
|
Kubernetes 监控 安全
使用Istio实现细粒度流量管理:金丝雀发布实战
使用Istio实现细粒度流量管理:金丝雀发布实战
|
9月前
|
Java Maven 数据安全/隐私保护
Nexus仓库
本文介绍Nexus Repository Manager OSS在Linux环境下的安装与配置,包括JDK8安装、Nexus部署、仓库管理、用户权限设置及密码重置方法。支持通过Docker快速部署,并实现数据持久化。同时涵盖Maven、NPM、Docker等组件的私服搭建与资源上传下载配置,助力企业构建高效私有仓库体系。(239字)
776 0
|
传感器 自然语言处理 资源调度
AR 交互与自动感应技术的博物馆智慧导览系统功能解析
本系统结合AR图像识别、自动感应与多语言资源管理,实现虚拟内容与文物精准叠加、自动讲解与智能导航,提升博物馆导览体验智能化、互动性。
1097 1
|
缓存 安全 Java
原子操作的实现原理
原子操作的实现原理
465 0
|
安全 NoSQL 关系型数据库
阿里云数据库:构建高性能与安全的数据管理系统
在企业数字化转型过程中,数据库是支撑企业业务运转的核心。随着数据量的急剧增长和数据处理需求的不断增加,企业需要一个既能提供高性能又能保障数据安全的数据库解决方案。阿里云数据库产品为企业提供了一站式的数据管理服务,涵盖关系型、非关系型、内存数据库等多种类型,帮助企业构建高效的数据基础设施。
888 2
|
机器学习/深度学习 传感器 人工智能
开源AI视频监控系统在监狱安全中的应用——实时情绪与行为分析、暴力预警技术详解
针对监狱环境中囚犯情绪波动和复杂人际互动带来的监控挑战,传统CCTV系统难以有效预警暴力事件。AI视频监控系统基于深度学习与计算机视觉技术,实现对行为、情绪的实时分析,尤其在低光环境下表现优异。该系统通过多设备协同、数据同步及自适应训练,确保高精度识别(95%以上)、快速响应(<5秒),并具备24小时不间断运行能力,极大提升了监狱安全管理的效率与准确性。
1604 1
|
机器学习/深度学习 人工智能 算法
【AI】从零构建深度学习框架实践
【5月更文挑战第16天】 本文介绍了从零构建一个轻量级的深度学习框架tinynn,旨在帮助读者理解深度学习的基本组件和框架设计。构建过程包括设计框架架构、实现基本功能、模型定义、反向传播算法、训练和推理过程以及性能优化。文章详细阐述了网络层、张量、损失函数、优化器等组件的抽象和实现,并给出了一个基于MNIST数据集的分类示例,与TensorFlow进行了简单对比。tinynn的源代码可在GitHub上找到,目前支持多种层、损失函数和优化器,适用于学习和实验新算法。
746 2