用 Graph 捕捉区块链事件并提供一个查询事件的 GraphQL 接口-文章来自问我社区

举报
问我学院 发表于 2022/03/20 13:17:23 2022/03/20
【摘要】 编写智能合约时,通常状态的变化是通过触发一个事件来表达,The Graph 则是捕捉区块链事件并提供一个查询事件的 GraphQL 接口,让我们可以方便的跟踪数据的变化。实际上很多 defi 协议及都是 The Graph 来基于查询数据。

Graph 介绍

编写智能合约时,通常状态的变化是通过触发一个事件来表达,The Graph 则是捕捉区块链事件并提供一个查询事件的 GraphQL 接口,让我们可以方便的跟踪数据的变化。实际上很多 defi 协议及都是 The Graph 来基于查询数据。

流程概述

  • 在 Rinkeby 部署一个合约,并调用触发事件。
  • 创建定义数据索引的 Subgraph。
  • 部署 Subgraph 到 TheGraph,实现数据索引。
  • 在前端 DApp 中查询索引数据。

如果你有自己的私有链,这可以克隆 Graph 节点代码 https://github.com/graphprotocol/graph-node/ 自己运行 Graph 节点来完成数据的索引。

TheGraph 中定义如何为数据建立索引,称为 Subgraph,它包含三个组件:

  • Manifest 清单(subgraph.yaml) - 定义配置项
  • Schema 模式(schema.graphql) - 定义数据 , 参考文档 https://graphql.cn/learn/
  • Mapping 映射(mapping.ts) - 定义事件到数据的转换

操作步骤

安装相关依赖

bash yarn install

配置私钥

为方便获取,在 .env 中放入的私钥,格式为 "PRIVATE_KEY=xxxx", 然后代码自动从中读取
另外需要设置你的 infura 节点 id,在 .env 中放入的私钥,格式为 "INFURA_ID=xxxx"

部署合约(用于测试 graph 的简单合约)

bash npx hardhat run ./scripts/deploy.js --network rinkeby

输出信息类似如下:

bash Deploying contracts with the account: xxxxxxxxxxxxxx Account balance: 10000000000000000000000 Token address: 0x5FbDB2315678afecb367f032d93F642f64180aa3 Transfer 50 to receiver 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 Account balance of receiver is: 50

TheGraph 创建一个 Subgraph 空间

因为需要借助 TheGraph 的节点来完成数据的索引,因此我们需要在 TheGraph Studio 上创建一个 Subgraph。

如果没有 The Graph 的账户,可以直接连接钱包注册,账户名即为钱包地址,以下称之为 <THEGRAPH_USERNAME>。

批准钱包签名之后,会跳转到 My Subgraphs 面板,点击 Create a Subgraph 按钮。

 

输入你的项目名称(例如 TEST01),以下称之为 <SUBGRAPH_NAME>,点击 continue 按钮,之后会跳转到 subgraph 的项目主页

注:最新版的 Graph CLI 仅支持在 mainnet 和 rinkeby 上部署,若要在其他网络上使用,需要使用 Github 账户登录后在 Hosted Service 上创建和部署

开发和部署 subgraph

先使用 yarn 在全局安装 Graph CLI

bash yarn global add @graphprotocol/graph-cli

初始化配置:

bash graph init --studio <SUBGRAPH_NAME>

若使用 Hosted Service,则初始化命令如下:

bash graph init --product hosted-service <GITHUB_USER>/<SUBGRAPH NAME>

  • 在 "Subgraph name" 和 "Directory to create the subgraph" 直接回车即可
  • Ethereum network 这里选择 rinkeby
  • "Contract address" 这里输入在步骤 3 中部署合约时生成的合约地址
  • 上面执行到 "fetch ABI from Etherscan" 时会报执行失败,然后出现 "ABI file (path)" 字样,提示输入本机中 abi 的文件路径,这里我们输入 SimpleToken.json 所在的路径即可(./abis/SimpleToken.json)
  • 如果 yarn install 失败(例如网络错误),可以进入新生成的项目目录,手动安装 npm 依赖

修改定义模式

两个文件的修改范例在 ./scripts/schema.graphql 和 ./scripts/mapping.ts

<SUBGRAPH_NAME>/schema.graphql 修改文件内容如下

  • <SUBGRAPH_NAME>/src/mapping.ts 修改文件内容如下

修改实体名字

 

 

原文信息

原文转载自:问我学院,问我社区
原文链接:http://www.wenwoha.com/blog_detail-680.html

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。