# 业务交互流程

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

## 2.1、云端基础设施

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

![](/files/-MYh3Ih_gmLSXZSBj2qx)

图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，然后也通过权限认证口令来通知索引节点开始为子图索引数据。下图比较详细地展示了比较详细的数据流程，讲述子图部署后是如何处理区块链网络的交易与数据。

![](/files/-MYh3IhakpaXyXsinhiK)

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

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

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

![](/files/-MYh3IhbxPROXUSN54t6)

图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所示。

![](/files/-MYh3Ihcl2h_rJCpOZTq)

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

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

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.hg.network/product-chan-pin-bang-zhu/cheng-xu-kai-fa/hypergraph-gong-zuo-yuan-li.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
