导览 > 将现有子图升级到Graph网络

将现有子图升级到Graph网络

介绍

链到本节

这是一个关于如何将子图从托管服务升级到Graph的去中心化网络的指南。超过1000个子图已经成功升级到The Graph Network,包括Snapshot、Loopring、Audius、Premia、Livepeer、Uma、Curve、Lido等项目!

升级过程很快,您的子图将永远受益于Graph网络上独有的高可靠性和高性能。

先决条件

链到本节
  • 您已经在托管服务上部署了子图。
  • The subgraph is indexing a chain available on The Graph Network.
  • 您钱包里有ETH去在链上发布子图
  • 您有10,000GRT去策展你的子图使得索引人可以索引子图

将现有子图升级到Graph网络

链到本节

你能在此找到子图的命令 Subgraph Studio.

  1. 获取已安装的最新版本的 graph-cli:
npm install -g @graphprotocol/graph-cli
yarn global add @graphprotocol/graph-cli

还要确保subgrap.yaml中的apiVersion为0.0.5或更高版本。

  1. 在子图的主项目存储库中,对子图进行身份验证,以便在studio上部署和构建:
graph auth --studio <DEPLOY_KEY>
  1. 生成文件并构建子图:
graph codegen && graph build

如果您的子图有编译问题,请看 AssemblyScript Migration Guide.

  1. 用您的钱包登录Subgraph Studio并部署子图。您可以在Studio UI中找到您的基于子图名称的<SUBGRAPH_SLUG>
graph deploy --studio <SUBGRAPH_SLUG>
  1. 在子图工作室内测查询语句. 这里是一些示例 Sushi - Mainnet Exchange Subgraph:
{
users(first: 5) {
id
liquidityPositions {
id
}
}
bundles(first: 5) {
id
ethPrice
}
}
  1. 此时,您的子图现在已经部署在Subgraph Studio上,但还没有发布到去中心化网络上。现在,您可以使用上面右列顶部的临时查询URL来测试子图,以确保它正常工作。正如这个名称已经表明的那样,这是一个临时URL,不应该在生产环境中使用。
  • 升级是在链上发布您已有子图的另一版本.
  • 因为这样会造成损失, 推荐您在子图工作室里发布和测试子图, 发布前使用"Development Query URL" . 请看示例交易 here. Prices are roughly around 0.0425 ETH at 100 gwei.
  • 任何时候您需要升级您的子图,您将支付升级费用。记住,升级只是发布现有子图的另一个版本。因为这会带来成本,所以强烈建议在将子图部署到主网之前在Goerli进行部署和测试。在某些情况下,如果该子图上没有信号,那么它也需要一些GRT。在子图版本(使用自动迁移) 上有信号/策展的情况下,税收将被切分。
  1. 通过点击“发布”按钮在Graph的去中心化网络上发布子图。

您可以使用GRT管理子图,以确保它被Indexers索引。为了节省gas成本,您可以在将子图发布到网络的同一交易中管理子图。为了获得高质量的服务,建议使用至少10,000个GRT来策展子图。

就是这样!在您完成发布之后,您将能够通过Graph浏览器(https://thegraph.com/explorer)在去中心化的网络上实时查看您的子图。

Feel free to leverage the #Curators channel on Discord to let Curators know that your subgraph is ready to be signaled. It would also be helpful if you share your expected query volume with them. Therefore, they can estimate how much GRT they should signal on your subgraph.

创建一个API密钥

链到本节

你可以在Subgraph Studio这里生成一个API密钥(https://thegraph.com/studio/apikeys/)。

API key creation page

在每周结束时,将根据在此期间发生的查询费用生成发票。此发票将自动使用您的余额中的GRT支付。您的查询费用的成本被撤回后,您的余额将被更新。查询费用通过Arbitrum网络以GRT支付。您需要将GRT添加到Arbitrum计费合同中,通过以下步骤启用您的API密钥:

  • 在你选择的交换机上购买GRT。
  • 把GRT送到你的钱包里。
  • 在Studio中的Billing page上,单击Add GRT。

Add GRT in billing

  • 按照以下步骤将GRT添加到您的账单余额中。
  • 您的GRT将自动连接到Arbitrum网络并添加到您的账单余额。

Billing pane

注意:有关将GRT添加到您的账单余额的完整说明(../billing.mdx) ,请参阅正式账单页。

保护您的API密钥

链到本节

建议您通过以下两种限制API使用的方式来保护API:

  1. 授权子图
  2. 授权域名

您可以点击这里保护您的API密钥。

Subgraph lockdown page

在去中心化网络上查询子图

链到本节

现在,您可以在Graph浏览器中检查网络上的索引人的索引状态(这里的示例)。顶部的绿线表示在发布8个索引人时,成功索引该子图。另外,在索引人选项卡中,您可以看到哪些索引人选择了您的子图。

Rocket Pool subgraph

一旦第一个索引人完全索引您的子图,您就可以开始在去中心化的网络上查询子图。为了检索子图的查询URL,您可以通过单击查询URL旁边的符号来复制/粘贴它。你会看到这样的东西:

https://gateway.thegraph.com/api/[api-key]/subgraphs/id/S9ihna8D733WTEShJ1KctSTCvY1VJ7gdVwhUujq4Ejo

重要提示:确保用上一节中生成的实际API密钥替换[api-key]。

现在可以在dapp中使用该查询URL发送GraphQL请求。

恭喜! 你现在是去中心化的先驱了!

注意:由于网络的去中心化特性,不同的索引人可能会索引不同的区块。为了只接收新数据,你可以指定索引人必须索引的最小区块,以便为查询提供区块参数:{ number_gte: $minBlock }字段参数如下例所示:

{
stakers(block: { number_gte: 14486109 }) {
id
}
}

关于网络的性质以及如何处理重组的更多信息将在Distributed Systems(/querying/distributed-systems/) 文档文章中描述。

升级网络上的子图

链到本节

如果您想升级网络上的现有子图,可以通过使用 Graph CLI 将新版本的子图部署到 Subgraph Studio 来实现。

  1. 更改您当前的子图。一个好主意是通过向Goerli发布内容来测试Subgraph Studio的小修补程序。
  2. 部署以下内容并在命令中指定新版本(例如 v0.0.1、v0.0.2 等):
graph deploy --studio <SUBGRAPH_SLUG>
  1. 通过在 Playground 中查询来测试 Subgraph Studio 中的新版本。
  2. 在 The Graph Network 上发布新版本。 请记住,这需要gas(如上一节所述)。

所有者升级费用:Deep Dive

链到本节

Note: Curation on Arbitrum has a flat bonding curve. Learn more about Arbitrum here.

升级要求GRT从子图的旧版本迁移到新版本。这意味着每次升级都会创建一条新的收益率曲线(这里更多与收益率曲线相关)。

新的收益率曲线对迁移到新版本的所有GRT收取1%的策展税。所有者必须支付其中的50%或1.25%。其余的1.25%由所有策展人承担作为费用。这种激励设计是为了防止子图的所有者能够通过递归升级调用耗尽策展人的所有资金。如果没有策展,您将不得不支付至少100GRT以标记自己的子图。

让我们举个例子,仅当您的子图正在获得积极时才策展会出现这种情况:

  • 在子图的 v1 上使用自动迁移发出 100,000 GRT 信号
  • 所有者升级到 v2。 100,000 GRT 被迁移到新粘合曲线,其中 97,500 GRT 进入新曲线,2,500 GRT 被燃烧
  • 然后,所有者耗费了 1250 GRT 以支付一半的费用。 升级前所有者钱包里必须有这个,否则升级不会成功。 这发生在与升级相同的交易中。

虽然这种机制目前在网络上运行,但社区目前正在讨论降低子图开发人员升级成本的方法。

维护子图的稳定版本

链到本节

If you're making a lot of changes to your subgraph, it is not a good idea to continually update it and front the update costs. Maintaining a stable and consistent version of your subgraph is critical, not only from the cost perspective but also so that Indexers can feel confident in their syncing times. Indexers should be flagged when you plan for an update so that Indexer syncing times do not get impacted. Feel free to leverage the #Indexers channel on Discord to let Indexers know when you're versioning your subgraphs.

子图是外部开发人员正在利用的开放 API。 开放 API 需要遵循严格的标准,以免破坏外部开发人员的应用程序。 在 Graph网络中,子图开发人员必须考虑索引人以及同步新子图、使用子图的其他开发人员需要多长时间。

更新子图的元数据

链到本节

您可以更新子图的元数据,而无需发布新版本。 元数据包括子图名称、图像、描述、网站 URL、源代码 URL 和类别。 开发人员可以通过在 Subgraph Studio 中更新他们的子图详细信息来实现,您可以在其中编辑所有适用的字段。

确保选中Update Subgraph Details in Explorer,然后点击保存。 如果选中此项,将生成一个链上交易,更新浏览器中的子图详细信息,而无需发布具有新部署的新版本。

将子图部署到Graph网络的最佳实践

链到本节
  1. 利用 ENS 名称进行子图开发:
  1. 您的个人资料填写得越多,您的子图被索引和管理的机会就越大。

弃用Graph网络上的子图

链到本节

按照这里的步骤废弃您的子图并将其从Graph 网络中删除。

在Graph网络上查询子图 + 计费

链到本节

托管服务的设置允许开发人员不受任何限制地部署他们的子图。

为了使Graph 网络真正去中心化,查询费用必须作为协议激励的核心部分支付。有关订阅API和支付查询费用的详细信息,请参阅此处的账单文档。

估算网络上的查询费用

链到本节

虽然这不是产品 UI 中的实时功能,但您可以通过将每月愿意支付的金额除以预期查询量来设置每次查询的最大预算。

虽然您可以决定查询预算,但不能保证索引人愿意以该价格提供查询服务。 如果网关可以将您与您愿意支付的价格或低于您愿意支付价格提供查询的索引人相匹配,您将支付预算的增量/差异 与他们的价格。 因此,较低的查询价格会减少可供您使用的索引人池,这可能会影响您获得的服务质量。 收取高额查询费用是有益的,因为这可能会吸引策展和知名索引人到您的子图。

请记住,这是一个充满活力且不断增长的市场,但您如何与之互动在您的控制之下。 协议或网关中没有指定最高或最低价格。 例如,您可以查看网络上一些 dapps 支付的价格(每周),如下所示。 请参阅最后一列,它显示了 GRT 中的查询费用。 例如,Pickle Finance 每秒有 个请求,支付 GRT 一周。

QueryFee

其他资源

链到本节

如果您仍然感到困惑,请不要害怕! 查看以下资源或观看我们的视频指南,了解将子图迁移到下面的去中心化网络:

编辑

上页
在Base上构建子图
下页
使用分叉快速轻松地调试子图
编辑