区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > FTT > 正文

GRAP:The Graph 入门教程:如何索引合约事件_Graph

作者:

时间:

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

这篇TheGraph教程在官方的教程基础上,进行了一些补充扩展主要包含以下内容:

在Ropsten部署一个合约,并调用触发事件。

创建定义数据索引的Subgraph。

部署Subgraph到TheGraph,实现数据索引。

在前端DApp中查询索引数据。

本教程的完整代码已上传到GitHub:https://github

Gravatarpublicgravatars;mapping(uint=>address)publicgravatarToOwner;mapping(address=>uint)publicownerToGravatar;functioncreateGravatar(string_displayName,string_imageUrl)public{require(ownerToGravatar==0);uintid=gravatars

functionupdateGravatarName(string_displayName)public{require(ownerToGravatar!=0);require(msg

}

可以看到合约里在创建和更新时分别触发了NewGravatar和UpdatedGravatar事件,稍后再subgraph里,将跟踪这两个事件,但是需要我们先把合约部署到网络上,这里使用以太坊测试网Ropsten:

国家网信办关于发布第八批境内区块链信息服务备案编号的公告:5月24日消息,根据《区块链信息服务管理规定》(以下简称《管理规定》),国家互联网信息办公室依法依规组织开展备案审核工作,现发布第八批共106个境内区块链信息服务名称及备案编号,任何单位或个人如有疑议,请于即日起10个工作日内将相关意见通过电子邮件发送至bc_beian@cert.org.cn,或邮寄至北京市朝阳区裕民路甲3号国家互联网应急中心,邮编:100029(信封上注明“备案公告反馈”)。[2022/5/24 3:38:07]

module.exports={networks:{ropsten:{provider:function(){returnnewHDWalletProvider(process.env.MNEMONIC,`https://ropsten.infura.io/v3/${process.env.ROPSTEN_INFURA_API_KEY}`。,network_id:'3',},}}

这里为了安全考虑,把助记词和APIKEY保存在.env文件中

添加部署脚本2_deploy_contract.js:

constGravatarRegistry=artifacts.require('./GravatarRegistry.sol')module.exports=asyncfunction(deployer){awaitdeployer.deploy(GravatarRegistry。

添加执行交易脚本,以便触发事件3_create_gravatars.js:

constGravatarRegistry=artifacts.require('./GravatarRegistry.sol')module.exports=asyncfunction(deployer,network,accounts){constregistry=awaitGravatarRegistry.deployed()console.log('Accountaddress:',registry.address)awaitregistry.createGravatar('Carl','https://thegraph.com/img/team/team_04.png',{from:accounts,}。

MakerDAO关于将ETH债务上限提升的执行投票已获通过:MakerDAO通过执行投票正式将ETH债务上限从3.4亿提高到4.2亿,生效时间为北京时间8月19日18时51分。注:债务上限是指系统允许抵押各币种生成DAI的最大数量。[2020/8/19]

然后执行trufflemigrate--networkropsten以便完成部署和执行createGravatar交易,控制台里会打印出GravatarRegistry合约部署的地址,复制这个合约地址,后面在编写subgraph需要使用到。

2.创建定义数据索引的Subgraph

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

Manifest清单(subgraph.yaml)-定义配置项

Schema模式(schema.graphql)-定义数据

Mapping映射(mapping.ts)-定义事件到数据的转换

后面我们将逐一介绍他们的作用及如何来编写。

在TheGraph创建一个Subgraph空间

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

如果你有自己的私有链,这可以克隆Graph节点代码,自己运行Graph节点来完成数据的索引。

如果没有TheGraph的账户,可以用GitHub注册。创建账户之后,进入仪表盘就可以开始通过界面创建subgraph,进入你的仪表板,并点击AddSubgraph:

动态 | 日本加密货币商业协会发布“关于加密资产管理的意见书”:日本虚拟货币商务协会(JCBA) 10月11日公布了《关于加密资产管理的意见书》。针对将于2020年4月生效的《资金结算法》内的虚拟货币托管商的托管范围以及虚拟货币的管理方法提出修改建议。为了防止和保护用户,对于修改后的《资金结算法》中规定的“为他人管理加密资产”这一语句的解释,JCBA要求在事务引导等方面明确其范围,应解释在何种情况下才属于“加密资产管理”。(Cointelegraph)[2019/10/15]

image-20210428095928210

可以为你的subgraph选择一个图像,定义一个名称。完成后点击保存,一个新的、未部署的subgraph将显示在仪表板上。

开发和部署subgraph

先使用Yarn或NPM在全局安装GraphCLI:

$npminstall-g

ID,Bytes及String是GraphQL数据类型,!表示该值不能为空。模式的定义文档可以在这里找到:https://thegraph.com/docs/define-a-subgraph#the-graphql-schema。

定义映射(mapping.ts)

TheGraph中的映射文件定义了如何将传入事件转换为实体的函数。它用TypeScript的子集AssemblyScript编写。因此可以将其编译为WASM(WebAssembly),以更高效,更便携式地执行映射。

需要定义_subgraph.yaml_文件中每个handler函数,因此在我们的例子中,我们需要实现函数:handleNewGravatar及handleUpdatedGravatar。

格莱美奖得主The Weeknd首次NFT音乐销售额达229万美元:格莱美奖得主The Weeknd(盆栽哥)通过Nifty Gateway以NFT系列方式,发行其新音乐,此次拍卖销售额达229万美元。这次拍卖包括三个公开版本、两个无声拍卖和两次抽奖。最便宜的作品售价为100美元,而其他作品则卖给了出价最高的用户。公开版本以The Weeknd未发行曲目的摘录为特色,在15分钟的销售窗口中筹集了140万美元。 拥有完整歌曲的动画视频的NFT竞标持续了24小时,周日晚上以49万美元成交。上公开版,此次拍卖共成交229万美元。(CryptoBriefing)[2021/4/5 19:46:16]

TheGraph提供了一个命令:graphcodegen可以生成解析事件的代码及模式实体代码,因此只需要基于生成的代码编写映射函数,mapping.ts定义如下:

import{NewGravatar,UpdatedGravatar}from'../generated/Gravity/Gravity'import{Gravatar}from'../generated/schema'exportfunctionhandleNewGravatar(event:NewGravatar):void{letgravatar=newGravatar(event.params.id.toHex())gravatar.owner=event.params.ownergravatar.displayName=event.params.displayNamegravatar.imageUrl=event.params.imageUrlgravatar.save(。exportfunctionhandleUpdatedGravatar(event:UpdatedGravatar):void{letid=event.params.id.toHex()letgravatar=Gravatar.load(id)if(gravatar==null){gravatar=newGravatar(id。gravatar.owner=event.params.ownergravatar.displayName=event.params.displayNamegravatar.imageUrl=event.params.imageUrlgravatar.save(。

Northern Trust 获得在区块链上存储会议纪要的专利:据coindesk消息,本周三,金融服务公司Northern Trust获得了一项关于使用区块链技术备份会议记录的专利。该方法利用一系列智能合约来记录与会议相关的数据,包括谁将参加会议(数据来自他们可能已携带的设备),会议将于何时何地发生。如早先报道所言,自2017年以来,Northern Trust一直在使用由IBM创建的私有区块链来捕获关键数据。[2018/6/7]

在handler函数,我们使用事件的ID创建Gravatar实体。并使用相应的字段填充数据,最后需要.save()来存储实体。

如何编写映射函数,还可以参考文档:https://thegraph.com/docs/define-a-subgraph#writing-mappings。

接下来就是把编写好的Subgraph部署到TheGraph

3.部署Subgraph

在控制台先用graphauth进行授权:

graphauthhttps://api.thegraph.com/deploy/

请使用你在创建Subgraph空间提示的Accesstoken。

然后使用graphdeploy进行部署:

graphdeploy--debug--nodehttps://api.thegraph.com/deploy/--ipfshttps://api.thegraph.com/ipfs/

使用完成的Subgraph名称,我们这里是:xilibi2003/Gameplayer。

如果顺利的话,可以在TheGraph的面板上观察到subgraph索引过程,初始索引可能需要等待几分钟,如下图:

subgraph索引

当索引完成后,通过GraphExplorer中的GraphQLplayground进行交互查询:

GraphQL查询

4.DApp前端查询索引数据

在我们的代码库中,front目录中,已经提供一个示例DApp,用来访问数据。进入应用程序目录,配置查询subgraph的GraphQL端点地址:

$cdfront$echo'REACT_APP_GRAPHQL_ENDPOINT=https://api.thegraph.com/subgraphs/name//'>.env

最后,安装DApp的依赖并启动项目。

$yarn&&yarnstart

可以看到通过GraphQL查询出来了3条数据:

image-20210429183042997

在React前端使用了ApolloClient来集成GraphQL查询,如果是Vue可以使用VueApollo。

GraphQL查询的代码可以在front/App.js找到,这里不做详细介绍。

参考资料

智能合约:https://learnblockchain.cn/article/1717

DEFI:https://learnblockchain.cn/article/570

TheGraph:https://thegraph.com/explorer/

仪表板:https://thegraph.com/explorer/dashboard/

定义subgraph.yaml的详细文档:https://thegraph.com/docs/define-a-subgraph#the-subgraph-manifest

https://thegraph.com/docs/define-a-subgraph#the-graphql-schema:_https://thegraph.com/docs/define-a-subgraph#the-graphql-schema_

AssemblyScript:https://www.assemblyscript.org/

WebAssembly:https://webassembly.org/

https://thegraph.com/docs/define-a-subgraph#writing-mappings:_https://thegraph.com/docs/define-a-subgraph#writing-mappings_

VueApollo:https://apollo.vuejs.org/guide/#become-a-sponsor

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

本文来源于非小号媒体平台:

登链社区

现已在非小号资讯平台发布105篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/9921988.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

Bitfinex一周简报

标签:APHGRAPGraphRAPSeraphiumethnographyasamethodusedethnographersWrapped Staked USDT

FTT热门资讯
大阳线:亿和论币丨以太屡创新高大饼何时发力?行情分析及K线图解_BTCPAY

今天的以太坊一枝独秀,币价一直突破新高,很多人问我顶部在哪?资本的力量我不知道,我知道的是又该我提示风险了。今天亿和3200进场接盘,期间合约空单进场一次,现在币价在3400上方震荡.

BTC:关于WBF对XCH恢复展示的公告_CHTT价格

尊敬的用户: WBF现已对XCH/USDT交易对恢复展示功能,用户可以正常交易。为您带来不便,敬请谅解.

RAN:Orangex中国区正式上线_AIDOGEX

尊敬的Orangex用户:Orangex全球领先的金融衍生品服务平台,现已在中国地区正式上线!欢迎大家体验.

RAP:Chia瓦特云算力第二期火爆开售,转发海报瓜分50000USDT体验金_Holographic Doge

尊敬的用户: Chia瓦特云算力第二期火爆开售,为了感谢广大用户的支持,WBF特别推出“我为Chia瓦特云算力打call”朋友圈分享赢好礼活动,转发海报即可瓜分5000USDT合约体验金.

KEX:BKEX Global 关于\"XCH嗨翻天,充值交易瓜分40,000USDT\"活动的公告_GLO

亲爱的BKEXer: ?? 为回馈广大用户,BKEXGlobal举行"XCH嗨翻天,充值交易瓜分40,000USDT"活动.

ALC:DOGE 狗狗币介绍 狗狗币前景怎么样_blockchainresearchandapplication

DOGE狗狗币简介详情 Dogecoin,有人称作"狗狗币/狗币",诞生于2013年12月8日,基于Scrypt算法,是国际上用户数仅次于比特币的第二大虚拟货币.