# 业务交互流程

HyperGraph项目就是基于服务高性能公链，满足应用开发繁荣的数据需求，同时降低开发者门槛和自身维护后端服务的成本而产生。HyperGraph旨在构建一个高性能区块链的数据服务网络，这个高性能包括两个方面，一方面满足类似HECO等高性能区块链的需求，另一方面本身必须做到满足去中心化服务的同时，具有高效的服务能力。在此数据服务网络中，HyperGraph核心开发者团队构建基础设施与标准，提供开发、优化与维护方案，协调网络运转，索引节点依据标准建设网络节点，提供数据存储、索引查询、API服务等，参与网络共同建设，获得收益。开发者则根据自身业务定义数据获取需求，使用网络资源为自身和第三方有需求的业务服务，通证持有者，均可通过抵押通证，支持网络节点建设，获得自身数字资产增值收益，形成一个整体有效运转的数据服务生态。

## 2.1、云端基础设施

&#x20;为了提供高性能区块链数据服务，HyperGraph 制定标准，与各方参与者一起构建云端基础设施，云端基础设施包括两部分，一部分由各节点底层组成的数据索引网络，一部分是使用云端设施的工具、API和用户交互界面。示意如图1所示，这里需要注意的是，图1中各节点在网络中并不由某一个特定实体运营，而是HyperGraph网络中的去中心化节点成员。彼此之间的激励协调，也是由区块链上的合约相互协调，消息传送，真正让开发者应用HyperGraph服务做到全栈式去中心化。

![](https://3485192048-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fhypergraph-decentralized-data-engine%2F-MYh2jQqyO3fEnh3nsh0%2F-MYh3Ih_gmLSXZSBj2qx%2F0.png?generation=1618885036096095\&alt=media)

图1、去中心化云端数据网络基础设施示意图

开发者通过界面交互提交自己有关数据查询与索引的需求指令，比如GraphQL查询语言，子图数据集定义等。使用工具进行便捷查询与节点构建，使用APIs查询数据或者将HyperGraph API和Web3 API结合发起向HyperGraph 网络的元交易签名等服务。

2.1.1、数据索引网络

&#x20;与传统数据库不同，区块链上存储的数据并没有字段概念，也没有关系型查询语言可用，而且所有的应用共用的是同一个存储库。所以数据的查询本身相较传统数据库变得异常困难，以DEX业务为例，查询某一个交易对在某一个时间段内的交易量、交易详情等，并没有快捷的查询方式，具体做法得扫描该时间段内的所有块的所有数据，将属于相关合约的交易全扫描出来，再匹配具体交易对，做数据合并计算，这样的计算方式非常低效。

&#x20;目前也有TheGraph这样的项目提供了开源的处理方式，但是有两个关键点，一是开源软件目前绝大多数只支持了以太坊网络，暂时并没有迅速支持其他高性能区块链网络,即使支持也有比较长的时间周期。二是那些服务本身是依托以太网络而设计，很多的设计尤其是性能等并没有对高性能区块链网络做优化。

&#x20;当然开发者也可以自己使用开源软件构建自己的数据分析节点，就像没有云计算的时代，用户也自己架设服务器到IDC。但是自建节点有以下几个成本和风险点：

1. DApp 项目专注于自身业务逻辑，智能合约等的开发，再增加服务器端节点部署，对人员提出了更高要求，必然增加人力成本
2. 由于区块链公链存储本身文件较大，全节点模式需要更大的存储空间和好的机器性能，为了自身的部分业务查询，同步全量数据，带来了硬件成本的浪费
3. 自身构建查询索引节点，是一个纯粹的投入，并且还一定程度上存在单点故障。性能等方面的优化经验的积累，也是一个较长期的过程。

综上所述，为了让开发者专注于自有业务，HyperGraph构建了数据索引网络。HyperGraph针对能支持数据索引的开源软件，选用匹配数据网络的软硬件搭配，专门针对高性能区块链，做了参数、存储等方面的优化，能够平行扩展，增加了一些特色功能。同时，索引节点不仅仅由HyperGraph开发者来提供，还使用HGT激励一起共建节点，一方面更加去中心化，更好地避免单点故障，由用户投票与激励提高服务质量。另一方面，也组成更大的数据索引网络，发挥数据价值。

## 2.2 业务交互流程

上一章介绍了HyperGraph的基本使用，在关于HyperGraph的章节中也讲述了HyperGraph是什么？所以本章开门见山来讲，如何来开发子图提交到HyperGraph

在传统的关系数据库中，为了提高查询的速度，我们需要对数据表的数据构建索引。在区块链的查询中，同样如此，我们要想获得一个稳定的查询结果，得先提前向链上去取得数据，索引数据。这个过程就需要开发子图，开发者开发完成子图，提供到HyperGraph，HyperGraph的数据引擎会自动运行所部署子图的数据索引，在索引完成之后，开发者可以使用一个Graph API 的链接来提交查询，取得想要的查询结果。

子图是一个特定的能部署在HyperGraph网络上的项目，就像部署在区块链上的智能合约项目可以在区块链上运行逻辑、存储数据类似，部署在HyperGraph 上的子图项目也可以让HyperGraph的数据引擎来索引高性能区块链的区块数据，索引存储后，提供查询接口。

子图项目通过yaml文件来描述或者定义，本子图查询针对哪个智能合约，需要分析智能合约的哪个事件的数据，并告诉HyperGraph如何将事件中的数据存储到数据库中，从而最终方便地实现查询。

当你开发完成子图应用，如果是以 API 方式的部署，可以使用 Graph CLI 命令行工具来部署子图，在HyperGraph 的Dashboard（控制台）里提供了比较详细的命令。通过命令首先会将子图的定义存储到IPFS，然后也通过权限认证口令来通知索引节点开始为子图索引数据。下图比较详细地展示了比较详细的数据流程，讲述子图部署后是如何处理区块链网络的交易与数据。

![](https://3485192048-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fhypergraph-decentralized-data-engine%2F-MYh2jQqyO3fEnh3nsh0%2F-MYh3IhakpaXyXsinhiK%2F1.png?generation=1618885036168037\&alt=media)

图2、网络中数据形成和流转过程

图2 概要地描述了具体的数据和业务交互流程，这里以具体例子进行说明。以用户在DEX上Swap数字资产为例，说明数据是如何从用户端产生，然后存储在区块链网络上，再由索引节点分析存储，然后前端开发者取到数据进行展示的。

1. DApp 一般都是Serverless 应用，也就是说，在服务器端并没有数据库，也不存在动态脚本用于与用户直接相关的服务器端处理。程序由两部分组成，一部分是智能合约，负责路由、交易对生成、交易和流动性池逻辑处理等，部署在区块链上，另一部分是静态资源和脚本，包括图片、CSS、JavaScript等，部署在静态服务器上，通过CDN加速提供给用户，用户通过钱包对Web3 API的支持与DApp进行交互。
2. 用户使用DEX 由一种资产兑换另一种资产。比如使用HUSD兑换 WHT，用户在界面上选择交易对的币种，如图3所示。

![](https://3485192048-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fhypergraph-decentralized-data-engine%2F-MYh2jQqyO3fEnh3nsh0%2F-MYh3IhbxPROXUSN54t6%2F2.png?generation=1618885036106844\&alt=media)

图3、用户在DEX 上进行资产兑换

由于第一次使用HUSD HRC20 Token，所以先要Approve，Approve是授权合约使用你的Token额度，然后再Swap，由于HUSD和HT并没有直接的流动性池或者是直接的流动池并没有理想的价格，而现在有流动性更好或者价格更理想的HUSD和HBTC以及HBTC和WHT（WHT可以理解为原生Gas资产HT的HRC20映射）的池子，所以增加了一层中间兑换，由合约自动将HUSD兑换成HBTC然后再兑换成为WHT，从而完成用户得到HT的过程。

1. 这样的一次操作，涉及到了相当多的操作与实体，包括用户（某一个地址）、路由合约（用于转发交易路由）、交易合约（处理多层兑换逻辑）、交易对合约（更新交易对库存）、所参与的各币种合约（检查权属，余额等等）。
2. 在这个过程中，除了明显的从一个地址到另一个地址的 transaction这类交易，还会有大量的event产生，有授权的Approval、有交换资产的Swap、有同步Balance的Sync等等，如图4所示。

![](https://3485192048-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fhypergraph-decentralized-data-engine%2F-MYh2jQqyO3fEnh3nsh0%2F-MYh3Ihcl2h_rJCpOZTq%2F3.png?generation=1618885036122235\&alt=media)

图4、一个典型的Swap操作所产生的event

1. 正是由于这些event的产生与上链，不但有了数据分析的需要，也有了丰富的数据分析来源。HyperGraph 网络节点根据需求定义，持续地分析与扫描高性能区块链数据，分析出子图需求中定义的数据。由于HyperGraph 针对于高性能区块链而优化，所以相较于以太坊网络上的Graph Node，有更多的自定义优化手段和节点优化建议，以保证高效运行。
2. HyperGraph 节点根据定义的子图和事务处理程序处理数据。针对区块链网络中的事件，HyperGraph 内置程序在HyperGraph 的存储数据库中创建和更新实体。

DApp或者不支持Web3的页面，也可以获取远程查询数据。开发者使用GraphQL 向HyperGraph 远程节点进行查询。以JSON格式获得数据返回。然后开发者根据需要展示在界面上。

如此反复，就完成了HyperGraph 节点的使用过程。

在下面的章节中，我们将比较详细地讲解如何定义子图、部署子图以及如何查询子图。
