业务交互流程
Last updated
Last updated
HyperGraph项目就是基于服务高性能公链,满足应用开发繁荣的数据需求,同时降低开发者门槛和自身维护后端服务的成本而产生。HyperGraph旨在构建一个高性能区块链的数据服务网络,这个高性能包括两个方面,一方面满足类似HECO等高性能区块链的需求,另一方面本身必须做到满足去中心化服务的同时,具有高效的服务能力。在此数据服务网络中,HyperGraph核心开发者团队构建基础设施与标准,提供开发、优化与维护方案,协调网络运转,索引节点依据标准建设网络节点,提供数据存储、索引查询、API服务等,参与网络共同建设,获得收益。开发者则根据自身业务定义数据获取需求,使用网络资源为自身和第三方有需求的业务服务,通证持有者,均可通过抵押通证,支持网络节点建设,获得自身数字资产增值收益,形成一个整体有效运转的数据服务生态。
为了提供高性能区块链数据服务,HyperGraph 制定标准,与各方参与者一起构建云端基础设施,云端基础设施包括两部分,一部分由各节点底层组成的数据索引网络,一部分是使用云端设施的工具、API和用户交互界面。示意如图1所示,这里需要注意的是,图1中各节点在网络中并不由某一个特定实体运营,而是HyperGraph网络中的去中心化节点成员。彼此之间的激励协调,也是由区块链上的合约相互协调,消息传送,真正让开发者应用HyperGraph服务做到全栈式去中心化。
图1、去中心化云端数据网络基础设施示意图
开发者通过界面交互提交自己有关数据查询与索引的需求指令,比如GraphQL查询语言,子图数据集定义等。使用工具进行便捷查询与节点构建,使用APIs查询数据或者将HyperGraph API和Web3 API结合发起向HyperGraph 网络的元交易签名等服务。
2.1.1、数据索引网络
与传统数据库不同,区块链上存储的数据并没有字段概念,也没有关系型查询语言可用,而且所有的应用共用的是同一个存储库。所以数据的查询本身相较传统数据库变得异常困难,以DEX业务为例,查询某一个交易对在某一个时间段内的交易量、交易详情等,并没有快捷的查询方式,具体做法得扫描该时间段内的所有块的所有数据,将属于相关合约的交易全扫描出来,再匹配具体交易对,做数据合并计算,这样的计算方式非常低效。
目前也有TheGraph这样的项目提供了开源的处理方式,但是有两个关键点,一是开源软件目前绝大多数只支持了以太坊网络,暂时并没有迅速支持其他高性能区块链网络,即使支持也有比较长的时间周期。二是那些服务本身是依托以太网络而设计,很多的设计尤其是性能等并没有对高性能区块链网络做优化。
当然开发者也可以自己使用开源软件构建自己的数据分析节点,就像没有云计算的时代,用户也自己架设服务器到IDC。但是自建节点有以下几个成本和风险点:
DApp 项目专注于自身业务逻辑,智能合约等的开发,再增加服务器端节点部署,对人员提出了更高要求,必然增加人力成本
由于区块链公链存储本身文件较大,全节点模式需要更大的存储空间和好的机器性能,为了自身的部分业务查询,同步全量数据,带来了硬件成本的浪费
自身构建查询索引节点,是一个纯粹的投入,并且还一定程度上存在单点故障。性能等方面的优化经验的积累,也是一个较长期的过程。
综上所述,为了让开发者专注于自有业务,HyperGraph构建了数据索引网络。HyperGraph针对能支持数据索引的开源软件,选用匹配数据网络的软硬件搭配,专门针对高性能区块链,做了参数、存储等方面的优化,能够平行扩展,增加了一些特色功能。同时,索引节点不仅仅由HyperGraph开发者来提供,还使用HGT激励一起共建节点,一方面更加去中心化,更好地避免单点故障,由用户投票与激励提高服务质量。另一方面,也组成更大的数据索引网络,发挥数据价值。
上一章介绍了HyperGraph的基本使用,在关于HyperGraph的章节中也讲述了HyperGraph是什么?所以本章开门见山来讲,如何来开发子图提交到HyperGraph
在传统的关系数据库中,为了提高查询的速度,我们需要对数据表的数据构建索引。在区块链的查询中,同样如此,我们要想获得一个稳定的查询结果,得先提前向链上去取得数据,索引数据。这个过程就需要开发子图,开发者开发完成子图,提供到HyperGraph,HyperGraph的数据引擎会自动运行所部署子图的数据索引,在索引完成之后,开发者可以使用一个Graph API 的链接来提交查询,取得想要的查询结果。
子图是一个特定的能部署在HyperGraph网络上的项目,就像部署在区块链上的智能合约项目可以在区块链上运行逻辑、存储数据类似,部署在HyperGraph 上的子图项目也可以让HyperGraph的数据引擎来索引高性能区块链的区块数据,索引存储后,提供查询接口。
子图项目通过yaml文件来描述或者定义,本子图查询针对哪个智能合约,需要分析智能合约的哪个事件的数据,并告诉HyperGraph如何将事件中的数据存储到数据库中,从而最终方便地实现查询。
当你开发完成子图应用,如果是以 API 方式的部署,可以使用 Graph CLI 命令行工具来部署子图,在HyperGraph 的Dashboard(控制台)里提供了比较详细的命令。通过命令首先会将子图的定义存储到IPFS,然后也通过权限认证口令来通知索引节点开始为子图索引数据。下图比较详细地展示了比较详细的数据流程,讲述子图部署后是如何处理区块链网络的交易与数据。
图2、网络中数据形成和流转过程
图2 概要地描述了具体的数据和业务交互流程,这里以具体例子进行说明。以用户在DEX上Swap数字资产为例,说明数据是如何从用户端产生,然后存储在区块链网络上,再由索引节点分析存储,然后前端开发者取到数据进行展示的。
DApp 一般都是Serverless 应用,也就是说,在服务器端并没有数据库,也不存在动态脚本用于与用户直接相关的服务器端处理。程序由两部分组成,一部分是智能合约,负责路由、交易对生成、交易和流动性池逻辑处理等,部署在区块链上,另一部分是静态资源和脚本,包括图片、CSS、JavaScript等,部署在静态服务器上,通过CDN加速提供给用户,用户通过钱包对Web3 API的支持与DApp进行交互。
用户使用DEX 由一种资产兑换另一种资产。比如使用HUSD兑换 WHT,用户在界面上选择交易对的币种,如图3所示。
图3、用户在DEX 上进行资产兑换
由于第一次使用HUSD HRC20 Token,所以先要Approve,Approve是授权合约使用你的Token额度,然后再Swap,由于HUSD和HT并没有直接的流动性池或者是直接的流动池并没有理想的价格,而现在有流动性更好或者价格更理想的HUSD和HBTC以及HBTC和WHT(WHT可以理解为原生Gas资产HT的HRC20映射)的池子,所以增加了一层中间兑换,由合约自动将HUSD兑换成HBTC然后再兑换成为WHT,从而完成用户得到HT的过程。
这样的一次操作,涉及到了相当多的操作与实体,包括用户(某一个地址)、路由合约(用于转发交易路由)、交易合约(处理多层兑换逻辑)、交易对合约(更新交易对库存)、所参与的各币种合约(检查权属,余额等等)。
在这个过程中,除了明显的从一个地址到另一个地址的 transaction这类交易,还会有大量的event产生,有授权的Approval、有交换资产的Swap、有同步Balance的Sync等等,如图4所示。
图4、一个典型的Swap操作所产生的event
正是由于这些event的产生与上链,不但有了数据分析的需要,也有了丰富的数据分析来源。HyperGraph 网络节点根据需求定义,持续地分析与扫描高性能区块链数据,分析出子图需求中定义的数据。由于HyperGraph 针对于高性能区块链而优化,所以相较于以太坊网络上的Graph Node,有更多的自定义优化手段和节点优化建议,以保证高效运行。
HyperGraph 节点根据定义的子图和事务处理程序处理数据。针对区块链网络中的事件,HyperGraph 内置程序在HyperGraph 的存储数据库中创建和更新实体。
DApp或者不支持Web3的页面,也可以获取远程查询数据。开发者使用GraphQL 向HyperGraph 远程节点进行查询。以JSON格式获得数据返回。然后开发者根据需要展示在界面上。
如此反复,就完成了HyperGraph 节点的使用过程。
在下面的章节中,我们将比较详细地讲解如何定义子图、部署子图以及如何查询子图。