开发者常见问题
子图是基于区块链数据构建的自定义API。子图使用GraphQL查询语言进行查询,并使用Graph CLI部署到Graph节点。一旦部署并发布到Graph的去中心化网络,索引人就会处理子图,并使其可供子图消费者查询。
子图一旦创建就无法删除。
不可以。一旦创建子图,就不能更改名称。 请务必在创建子图之前仔细考虑这一点,以便其他 dapp 可以轻松搜索和识别它。
不可以。一旦创建了子图,就不能更改关联的 GitHub 账户。 在创建子图之前,请务必仔细考虑这一点。
强烈建议您构建智能合约,以使事件与您有兴趣查询的数据相关联。 子图中的事件处理程序由合约事件触发,是迄今为止检索有用数据的最快方式。
如果您正在使用的合约不包含事件,您的子图可以使用调用和区块处理程序来触发索引。 因为这样做会严重影响性能,所以不建议。
在多个网络的情况下,您将需要不同的名称。 虽然您不能在同一个名称下拥有不同的子图,但有一些方便的方法可以为多个网络提供一个代码库。 请在我们的文档中找到更多相关信息:重新部署子图
模板允许您在子图索引时动态创建数据源。 当人们与之交互时,您的合约可能会产生新的合约,并且由于您预先知道这些合同的架构(ABI、事件等),您可以定义您希望如何在模板中索引它们,当这些合约创建您的子图时将通过提供合约地址来创建动态数据源。
请查看“实例化数据源模板”部分:数据源模板。
您可以运行以下命令:
docker pull graphprotocol/graph-node:latest
注意: docker / docker-compose 将始终使用您第一次运行时提取的任何 graph-node 版本,因此执行此操作非常重要,可以确保您使用的是最新版本的 graph-node。
查看AssemblyScript API 部分中的访问智能合约
状态。
不幸的是,目前这是不可能的。 graph init
旨在作为一个基本起点,然后您可以从中手动添加更多数据源。
如果在事件期间只创建了一个实体并且没有更好的其他方法,那么交易hash + 日志索引的组合是唯一的。 您可以先将其转换为字节,然后将调用 crypto.keccak256
来混淆这些内容,但这不会使其更加独特。
在子图中,无论是否跨多个合约,事件始终按照它们在区块中出现的顺序进行处理的。
是的。 您可以按照以下示例通过导入 graph-ts
来做到这一点:
import { dataSource } from '@graphprotocol/graph-ts'dataSource.network()dataSource.address()
是的。Goerli支持区块处理程序、调用处理程序和事件处理程序。应该注意的是,事件处理程序的性能远远高于其他两个处理程序,并且在每个EVM兼容的网络上都支持它们。
目前不能,因为映射是用 AssemblyScript 编写的。 一种可能的替代解决方案是将原始数据存储在实体中,并在客户端执行需要 JS 库的逻辑。
可以。 subgraph.yaml
文件中的 dataSources.source.startBlock
可以用来指定数据源开始索引的区块的编号。 在大多数情况下,我们建议使用创建合约的区块,也就是开始区块。
是的,您应该看看可选的起始区块功能,以便从部署合约的区块开始索引:起始区块
是的! 请尝试以下命令,并将“organization/subgraphName”替换为发布的组织和子图名称:
curl -X POST -d '{ "query": "{indexingStatusForCurrentVersion(subgraphName: \"organization/subgraphName\") { chains { latestBlock { hash number }}}}"}' https://api.thegraph.com/index-node/graphql
您可以在这里找到支持的网络列表。
您必须重新部署子图,但如果子图 ID(IPFS hash)没有更改,则不必从头开始同步。
虽然我们确实希望在未来支持联合(Federation),但目前还不支持。 目前,您可以在客户端或通过代理服务使用模式拼接。
默认情况下,每个集合的查询响应限制为 100 个项目。 如果您想收到更多,则每个收藏最多可以包含 1000 个项目,并且可以使用以下查询进行分页:
someCollection(first: 1000, skip: <number>) { ... }
目前,推荐的 dapp 方法是将密钥添加到前端并将其公开给最终用户。 也就是说,您可以将该键限制为主机名,例如 yourdapp.io 和子图。 网关目前由 Edge & Node 运营。 网关的部分职责是监控滥用行为,并阻止来自恶意客户端的流量。
请前往托管服务,查找您或其他人部署到托管服务的子图。 您可以在这里找到托管服务。
Graph 永远不会对托管服务收费。 Graph 是一个去中心化的协议,中心化服务的收费与 Graph 的价值观不一致。 托管服务始终是帮助进入去中心化网络的临时步骤。 开发人员将有足够的时间在他们适宜时迁移到去中心化网络。
如果您是子图开发人员,您可以使用 CLI 将新版本的子图升级到工作室。 届时子图将是私有的,但如果您对它感到满意,您可以发布到去中心化的 Graph浏览器。 这将创建一个新版本的子图,策展人可以开始对其发出信号。