Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update subsquid.md #418

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
147 changes: 106 additions & 41 deletions builders/integrations/indexers/subsquid.md
Expand Up @@ -11,7 +11,8 @@ description: 学习如何在Moonbeam和Moonriver上使用Subsquid运行Substrate

Subsquid为以太坊虚拟机(EVM)和Substrate数据均提供原生的完整支持。由于Moonbeam是一个基于Substrate的EVM兼容的智能合约平台,Subsquid可用于索引EVM的和基于Substrate的数据。Subsquid提供了一个Substrate Archive和Processor,还有一个EVM Archive和Processor。 Substrate Archive和Processor可用于索引Substrate和EVM数据。这使得开发者在单个项目中可以从任何Moonbeam网络中提取链上数据并处理EVM记录和Substrate实体(事件、extrinsics和储存项),并利用单个GraphQL端点提供搜索结果的相关数据。如果你只想索引EVM数据,推荐使用EVM Archive和Processor。

本指南将向您展示如何使用Subsquid创建Substrate和EVM项目,并将其配置为可以在Moonbeam上索引数据。
本快速指南将向您展示如何使用Subsquid创建Substrate和EVM项目,并将其配置为可以在Moonbeam上索引数据。如果需要更完整的端到端教程,请查看[使用Subsquid索引本地Moonbeam开发节点](/tutorials/integrations/local-subsquid/){target=_blank}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
本快速指南将向您展示如何使用Subsquid创建Substrate和EVM项目,并将其配置为可以在Moonbeam上索引数据。如果需要更完整的端到端教程,请查看[使用Subsquid索引本地Moonbeam开发节点](/tutorials/integrations/local-subsquid/){target=_blank}
本快速指南将向您展示如何使用Subsquid创建Substrate和EVM项目,并将其配置为可以在Moonbeam上索引数据。如果需要更完整的端到端教程,请查看[使用Subsquid索引本地Moonbeam开发节点](/tutorials/integrations/local-subsquid/){target=\_blank}



--8<-- 'text/_disclaimers/third-party-content-intro.md'

Expand All @@ -21,7 +22,7 @@ Subsquid为以太坊虚拟机(EVM)和Substrate数据均提供原生的完整

- [Node.js](https://nodejs.org/en/download/){target=\_blank} 版本16及后续版本
- [Docker](https://docs.docker.com/get-docker/){target=\_blank}
- [Squid CLI](https://docs.subsquid.io/squid-cli/installation/){target=\_blank} 版本2.1.0及后续版本
- [Squid CLI](https://docs.subsquid.io/squid-cli/installation/){target=\_blank}

!!! 注意事项
squid模板与`yarn`不兼容,因此您需要改用`npm`。
Expand All @@ -38,37 +39,43 @@ Subsquid为以太坊虚拟机(EVM)和Substrate数据均提供原生的完整

有关开始使用此模板的更多信息,请查看Subsquid文档网站上的[快速入门:Substrate链](https://docs.subsquid.io/quickstart/quickstart-substrate/){target=\_blank}指南。

2. 要配置您的Subsquid项目以在Moonbeam上运行,您需要更新`typegen.json`文件。`typegen.json`文件负责为您的数据生成TypeScript接口类。根据您在其上索引数据的网络,`typegen.json`文件中的`specVersions`值应配置如下:
2. 导航至Squid项目的根目录并运行以下命令安装依赖项:

```bash
npm ci
```

3. 要配置您的Subsquid项目以在Moonbeam上运行,您需要更新`typegen.json`文件。`typegen.json`文件负责为您的数据生成TypeScript接口类。根据您在其上索引数据的网络,`typegen.json`文件中的`specVersions`值应配置如下:

=== "Moonbeam"

```json
"specVersions": "https://moonbeam.archive.subsquid.io/graphql",
"specVersions": "https://v2.archive.subsquid.io/network/moonbeam-mainnet",
```

=== "Moonriver"

```json
"specVersions": "https://moonriver.archive.subsquid.io/graphql",
"specVersions": "https://v2.archive.subsquid.io/network/moonriver-mainnet",
```

=== "Moonbase Alpha"

```json
"specVersions": "https://moonbase.archive.subsquid.io/graphql",
"specVersions": "https://v2.archive.subsquid.io/network/moonbase-testnet",
```

3. 修改`src/processor.ts`文件,squid在该文件中实例化处理器、配置处理器并附加处理函数。处理器从[Archive](https://docs.subsquid.io/archives/overview/){target=\_blank}(一个专门的数据湖)中获取历史链上数据。您需要将处理器配置为从与您索引数据的网络相对应的Archive(存档)中提取数据:
4. 修改`src/processor.ts`文件,squid在该文件中实例化处理器、配置处理器并附加处理函数。处理器从[Archive](https://docs.subsquid.io/archives/overview/){target=\_blank}(一个专门的数据湖)中获取历史链上数据。您需要将处理器配置为从与您索引数据的[网络](https://docs.subsquid.io/substrate-indexing/supported-networks/){target=_blank}相对应的Archive(存档)中提取数据:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
4. 修改`src/processor.ts`文件,squid在该文件中实例化处理器、配置处理器并附加处理函数。处理器从[Archive](https://docs.subsquid.io/archives/overview/){target=\_blank}(一个专门的数据湖)中获取历史链上数据。您需要将处理器配置为从与您索引数据的[网络](https://docs.subsquid.io/substrate-indexing/supported-networks/){target=_blank}相对应的Archive(存档)中提取数据:
4. 修改`src/processor.ts`文件,squid在该文件中实例化处理器、配置处理器并附加处理函数。处理器从[Archive](https://docs.subsquid.io/archives/overview/){target=\_blank}(一个专门的数据湖)中获取历史链上数据。您需要将处理器配置为从与您索引数据的[网络](https://docs.subsquid.io/substrate-indexing/supported-networks/){target=\_blank}相对应的Archive(存档)中提取数据:


=== "Moonbeam"

```js
const processor = new SubstrateBatchProcessor();
processor.setDataSource({
chain: '{{ networks.moonbeam.rpc_url }}',
// Resolves to 'https://moonbeam.archive.subsquid.io'
archive: lookupArchive('moonbeam', { type: 'Substrate' }),
});
// Resolves to 'https://v2.archive.subsquid.io/network/moonbeam-mainnet'
archive: lookupArchive('moonbeam', {type: 'Substrate', release: 'ArrowSquid'}),
})
```

=== "Moonriver"
Expand All @@ -77,8 +84,9 @@ Subsquid为以太坊虚拟机(EVM)和Substrate数据均提供原生的完整
const processor = new SubstrateBatchProcessor();
processor.setDataSource({
chain: '{{ networks.moonriver.rpc_url }}',
// Resolves to 'https://moonriver.archive.subsquid.io'
archive: lookupArchive('moonriver', { type: 'Substrate' }),
// Resolves to 'https://v2.archive.subsquid.io/network/moonriver-mainnet'
archive: lookupArchive('moonriver', {type: 'Substrate', release: 'ArrowSquid'}),
})
});
```

Expand All @@ -88,12 +96,32 @@ Subsquid为以太坊虚拟机(EVM)和Substrate数据均提供原生的完整
const processor = new SubstrateBatchProcessor();
processor.setDataSource({
chain: '{{ networks.moonbase.rpc_url }}',
// Resolves to 'https://moonbase.archive.subsquid.io'
archive: lookupArchive('moonbase', { type: 'Substrate' }),
// Resolves to 'https://v2.archive.subsquid.io/network/moonbase-testnet'
archive: lookupArchive('moonbase', {type: 'Substrate', release: 'ArrowSquid'}),
})
});
```

这就是配置Subsquid项目以索引Moonbeam上的Substrate数据所需要做的全部工作!现在您可以更新`schema.graphql`、`typgen.json`和`src/processor.ts`文件来索引项目所需的数据!
!!! note
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
!!! note
!!! 注意事项

--8<-- 'text/_common/endpoint-setup.md'

5. 接下来我们还需要微调一下模板。Subsquid Substrate模板配置为处理Substrate账户类型,但 Moonbeam使用的是以太坊风格账户。`src/main.ts` 文件中的 `getTransferEvents` 函数迭代所有由 `processor.ts` 注入的事件,并将相关的 `transfer` 事件存储在数据库中。在 `getTransferEvents` 函数中,请移除 `from` 和 `to` 字段的ss58编码。在未修改的Substrate模板中,`from` 和 `to` 字段使用 ss58 编码如下所示:

```ts
from: ss58.codec('kusama').encode(rec.from),
to: ss58.codec('kusama').encode(rec.to),
```

移除ss58编码后,相应的行如下:

```ts
from: rec.from,
to: rec.to,
```

这就是配置Subsquid项目以索引Moonbeam上的Substrate数据所需要做的全部工作!现在您可以更新`schema.graphql`、`typgen.json`和`src/processor.ts`文件来索引项目所需的数据!接下来,按照 [运行索引器](#run-your-indexer)部分中的步骤运行您的索引器并查询您的Squid。



## 索引Moonbeam上的以太坊数据 {: #index-ethereum-contracts }

Expand All @@ -118,37 +146,23 @@ Subsquid为以太坊虚拟机(EVM)和Substrate数据均提供原生的完整
- [快速入门:EVM链](https://docs.subsquid.io/quickstart/quickstart-ethereum/){target=\_blank}
- [快速入门:从ABI生成](https://docs.subsquid.io/quickstart/quickstart-abi/){target=\_blank}

2. 要配置您的Subsquid项目以在Moonbeam上运行,您需要更新`typegen.json`文件。`typegen.json`文件负责为您的数据生成TypeScript接口类。根据您在其上索引数据的网络,`typegen.json`文件中的`specVersions`值应配置如下:

=== "Moonbeam"

```json
"specVersions": "https://moonbeam.archive.subsquid.io/graphql",
```

=== "Moonriver"

```json
"specVersions": "https://moonriver.archive.subsquid.io/graphql",
```
2. 导航到您的Squid项目的根目录并通过运行以下命令安装依赖项:

=== "Moonbase Alpha"

```json
"specVersions": "https://moonbase.archive.subsquid.io/graphql",
```
```bash
npm ci
```

3. 修改`src/processor.ts`文件,squid在该文件中实例化处理器、配置处理器并附加处理函数。处理器从[Archive](https://docs.subsquid.io/archives/overview/){target=\_blank}(一个专门的数据湖)中获取历史链上数据。您需要将处理器配置为从与您索引数据的网络相对应的Archive(存档)中提取数据:
3. 修改`src/processor.ts`文件,squid在该文件中实例化处理器、配置处理器并附加处理函数。处理器从[Archive](https://docs.subsquid.io/archives/overview/){target=\_blank}(一个专门的数据湖)中获取历史链上数据。您需要将处理器配置为从与您索引数据的[网络](https://docs.subsquid.io/evm-indexing/supported-networks/){target=_blank}相对应的Archive(存档)中提取数据:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
3. 修改`src/processor.ts`文件,squid在该文件中实例化处理器、配置处理器并附加处理函数。处理器从[Archive](https://docs.subsquid.io/archives/overview/){target=\_blank}(一个专门的数据湖)中获取历史链上数据。您需要将处理器配置为从与您索引数据的[网络](https://docs.subsquid.io/evm-indexing/supported-networks/){target=_blank}相对应的Archive(存档)中提取数据:
3. 修改`src/processor.ts`文件,squid在该文件中实例化处理器、配置处理器并附加处理函数。处理器从[Archive](https://docs.subsquid.io/archives/overview/){target=\_blank}(一个专门的数据湖)中获取历史链上数据。您需要将处理器配置为从与您索引数据的[网络](https://docs.subsquid.io/evm-indexing/supported-networks/){target=\_blank}相对应的Archive(存档)中提取数据:


=== "Moonbeam"

```js
const processor = new EvmBatchProcessor();
processor.setDataSource({
chain: '{{ networks.moonbeam.rpc_url }}',
// Resolves to 'https://moonbeam-evm.archive.subsquid.io'
// Resolves to 'https://v2.archive.subsquid.io/network/moonbeam-mainnet'
archive: lookupArchive('moonbeam', { type: 'EVM' })
});
})
```

=== "Moonriver"
Expand All @@ -157,9 +171,9 @@ Subsquid为以太坊虚拟机(EVM)和Substrate数据均提供原生的完整
const processor = new EvmBatchProcessor();
processor.setDataSource({
chain: '{{ networks.moonriver.rpc_url }}',
// Resolves to 'https://moonriver-evm.archive.subsquid.io'
// Resolves to 'https://v2.archive.subsquid.io/network/moonriver-mainnet'
archive: lookupArchive('moonriver', { type: 'EVM' }),
});
})
```

=== "Moonbase Alpha"
Expand All @@ -168,12 +182,63 @@ Subsquid为以太坊虚拟机(EVM)和Substrate数据均提供原生的完整
const processor = new EvmBatchProcessor();
processor.setDataSource({
chain: '{{ networks.moonbase.rpc_url }}',
// Resolves to 'https://moonbase-evm.archive.subsquid.io'
// Resolves to 'https://v2.archive.subsquid.io/network/moonbase-testnet'
archive: lookupArchive('moonbase', { type: 'EVM' }),
});
})
```

这就是配置Subsquid项目以索引Moonbeam上的EVM数据所需要做的全部工作!现在您可以更新`schema.graphql`、`typgen.json`和`src/processor.ts`文件来索引项目所需的数据!
!!! note
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
!!! note
!!! 注意事项

--8<-- 'text/_common/endpoint-setup.md'

这就是配置Subsquid项目以索引Moonbeam上的EVM数据所需要做的全部工作!现在您可以更新`schema.graphql`、`typgen.json`和`src/processor.ts`文件来索引项目所需的数据!接下来继续执行以下部分以运行您的索引器并查询您的Squid。

## 运行索引器 {: #run-your-indexer }

以下步骤适用于Substrate和EVM索引器。正确配置后,运行Subsquid索引器只需几个步骤:

1. 启动Postgres:

```bash
sqd up
```

2. 检查并运行处理器:

```bash
sqd process
```

3. 在同一目录中打开另一个终端窗口,然后启动 GraphQL 服务器:

```bash
sqd serve
```

4. 您可以使用以下示例查询模板Substrate或EVM Squid。如果您修改了Squid模板以索引不同的数据,则需要相应地修改查询语句。

=== "Substrate索引器"

```graphql
query MyQuery {
accountsConnection(orderBy: id_ASC) {
totalCount
}
}
```

=== "EVM索引器"

```graphql
query MyQuery {
burns(orderBy: value_DESC) {
address
block
id
txHash
value
}
}
```

如果您对开始索引在Moonbeam上数据的分步教程感兴趣,可以查看[使用Subsquid索引在Moonbeam上的NFT代币转账](/tutorials/integrations/nft-subsquid){target=\_blank}教程!

Expand Down