# 开发部署 FAQ

### 1、**子图创建命名对格式是有要求的吗？**

&#x20;     是的，强烈建议遵照HyperGraph 控制台页面上要求的格式命名您的子图。在添加子图时，只能填写小写字母，- 和数字 组成的名字，比如 subgraphdemo，dodoex-v2 等，而部署在HyperGraph 网络上的实际子图将为：“子图名称/公链名称”，也就是在控制台子图详情中显示的名字。如果所解析的合约在Heco网络上，子图名称为：“subgraphdemo/heco”, 如果是所解析的命约在BSC 网络上，而子图名称为：“subgraphdemo/bsc”。

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

### **2、现在支持在哪些网络创建子图？**

目前HyperGraph 支持在 Heco 和BSC 等高性能区块链网络上的合约创建子图，后续将支持更多的网络，包括 Heco、BSC 的测试网、其他基于 EVM 的高性能区块链网络，甚至以太坊网络。

### 3、在不同的网络是否支持同样的子图名称？

暂时HyperGraph 网络中的子图名称是全局唯一的。即使在不同的网络中，也不能有相同的名字。系统也会给出检测，请按提示操作。

### 4、是否可以更改部署类型，比如开始是Github 类型，调整成为API方式部署？

不支持自行调整部署方式，如有特殊需求，请跟技术支持联系调整

### 5、是否支持子图部署改名或者删除？

暂时不提供子图部署改名或者删除。

### 6、子图索引的数据源来自于哪里？

子图索引的数据一般来源于合约，在合约中定义了事件，索引程序会根据合约检索区块，分析事件进行分析存储，形成查询数据源。正像在web3.js 中调用合约需要ABI等信息一样，在子图开发中同样是如此。

### 7、要进行数据查询，对于合约编写有何建议？

对于需要查询的数据，建议在合约中，使用事件（events）来进行关联。这是索引子图数据最为快捷的方式。也是强烈推荐的方式。

如果合约不包含事件，子图可以使用合约调用以及区块处理器来触发索引，但是这样的话，速度会慢很多。

​另外，由于GraphQL会基于合约的事件生成查询实体，所以，在事件的参数中，参数名不要用id这样的定义，不然会跟实体自动生成的id字段名相冲突。

### 8、graph init 能支持多个合约创建子图吗？

graph init 命令用于创建一个初始项目的脚手架，所以功能并不是很复杂，所以不支持多个合约创建子图。如果想添加多个合约，可以后续在配置文件中加入更多的数据源。

### 9、我想获得数据索引的状态，有办法吗？

HyperGraph 在控制台提供了各个网络的健康状态查询功能。

Heco 网络是： <https://h.hg.network/graphql/playground>

BSC 网络是：<https://ph.hg.network/graphql/playground>

查询的典型 GraphQL 是：

`{`

&#x20;`indexingStatusesForSubgraphName(subgraphName:"pancakeswap/blocks") {`

&#x20;`subgraph`

&#x20;`health`

&#x20;`synced`

&#x20;`fatalError {`

&#x20;`handler`

&#x20;`message`

&#x20;`deterministic`

&#x20;`}`

&#x20;`nonFatalErrors {`

&#x20;`handler`

&#x20;`}`

&#x20;`chains {`

&#x20;`chainHeadBlock {`

&#x20;`number`

&#x20;`__typename`

&#x20;`}`

&#x20;`latestBlock {`

&#x20;`number`

&#x20;`__typename`

&#x20;`}`

&#x20;`}`

&#x20;`}`

`}`

你可以将上述代码中的“pancakeswap/blocks”换成你想要的子图进行查询。

如果有多个版本，也可以将上述查询中的 indexingStatusesForSubgraphName 替换成为： "indexingStatusForCurrentVersion" 或 "indexingStatusForPendingVersion" 进行有针对性的查询。

### 10、我能否使用其他项目的子图代码进行索引？

子图代码公开的情况下，可以基于其他项目的子图代码来进行数据查询与索引。

### 11、我能否在子图开发中使用 ethers.js 等开发程序库？

由于子图开发用 AssemblyScript 编写，所以并不能使用这类程序库，建议如果有其他的库需要调用数据，可以在数据存储之后，在查询端，使用你想要的库对数据进行调用。

### 12、子图中对于合约事件的处理顺序是什么样的？

在子图中，事件处理的顺序跟他们在区块中的顺序是一致的。跟所监听的合约个数、顺序等无关。

### 13、在代码中可以取得数据源的网络和合约地址等信息吗？

可以，通过引入 “graph-ts”，使用如下示例代码即可：

`import { dataSource } from '@graphprotocol/graph-ts'`

`dataSource.network()`

`dataSource.address()`

### 14、有什么提高子图索引性能的做法？

HyperGraph 的部署网络，已经进行了一定程度的部署优化，让用户可以快速添加子图和索引数据。对于用户自行添加的子图查询程序，强烈建议在 subgraph.yaml 中使用 startBlock ，以指定从某个区块开始进行索引。一般起始区块指定为合约创建所在的区块。

### 15、有没有对子图查询合并查询的计划？

确实在某些业务中，一个应用或者页面，需要大量地用到查询请求，已经在规划与开发查询子图查询合并的网关，以实现子图查询的缓存、连接复用等，以提高查询的效率。

### 16、查询时最多可以取回多少条数据？

默认每个查询集合返回100条数据，如果想要查询更多数据，可以用分页式的查询代码，比如

someCollection(first: 1000, skip: \<number>) { ... }

来最多一次查询1000条数据
