Defi数据引擎The Graph调用方法【含源码】

Stella981
• 阅读 1231

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

Defi数据引擎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实体,查看它包含了哪些内容:

Defi数据引擎The Graph调用方法【含源码】

我们的查询语句将查找最新的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)
})

执行结果类似下图:

Defi数据引擎The Graph调用方法【含源码】

4、总结

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


原文链接:如何访问The Graph索引的以太坊数据 — 汇智网

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
可莉 可莉
3年前
10个开源的Python区块链项目
Python不是主流的区块链底层平台开发语言,但是在DApp开发、区块链仿真与数据分析、智能合约安全分析等领域,Python依然是不错的选择。本文介绍了10个最流行的Python区块链项并提供了相应的源代码下载地址。<!more区块链开发教程链接:以太坊(https://www.oschina.net/action/GoToLink
Stella981 Stella981
3年前
DeFi研究资源大全,超过100个!
本文为DeFiPulse提供的去中心化金融DeFi协议及应用大全的中文翻译版,内容涵盖借贷产品、DeFi交易、去中心化支付、DeFi钱包、用户接口、DeFi基础设施、数据分析等11个分类,是区块链开发人员及金融从业者研究去中心化金融的必备资源。用自己熟悉的语言学习以太坊DApp开发:Java(https://www.oschina.
Stella981 Stella981
3年前
DeFi Compound开发REST API
在这个教程中,我们将学习如何为DeFi协议Compound的智能合约创建一个可以通过HTTP访问的API开发接口,并学习如何使用Infura作为以太坊网络和应用之间的桥梁。Compound是一个基于以太坊的数字资产借贷利率协议。Infura(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%
Stella981 Stella981
3年前
Chainlink区块链Oracle网络使用指南
Chainlink是一个去中心化的预言机网络,它可以让区块链中的智能合约安全地访问外部世界的数据。在这个教程中,我们将探索chainlink预言机网络的搭建,并学习如何使用预置或自定义的适配器实现智能合约与外部世界数据的桥接。以太坊教程链接:Dapp入门(https://www.oschina.net/action/GoToLink?urlh
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这