Docs
搜索⌘ K
  • 主页
  • 关于 The Graph
  • 支持的网络
  • 协议合约
  • 子图
    • 子流
      • 代币 API
        • 索引
          • 资源
            子流 > Substreams-powered Subgraphs

            4 分钟

            教程:在Solana上设置基于Substreams的子图

            已成功为Solana SPL代币设置基于触发器的Substreams驱动子图。

            开始

            有关视频教程,请查看如何使用Substreams驱动的子图对Solana进行索引

            先决条件

            开始之前,请确保:

            • 完成入门指南⁠使用Dev容器设置开发环境。
            • 熟悉The Graph和基本的区块链概念,如交易和Protobuf。

            步骤1:初始化您的项目

            1. 打开Dev容器并运行以下命令以初始化项目:

              1substreams init
            2. 选择“最小”项目选项。

            3. 将生成的substreams.yaml文件的内容替换为以下配置,该配置过滤SPL代币程序ID上Orca帐户的交易:

            1specVersion: v0.1.02package:3  name: my_project_sol4  version: v0.1.056imports: # Pass your spkg of interest7  solana: https://github.com/streamingfast/substreams-solana-spl-token/raw/master/tokens/solana-spl-token-v0.1.0.spkg89modules:10  - name: map_spl_transfers11    use: solana:map_block # Select corresponding modules available within your spkg12    initialBlock: 2600000821314  - name: map_transactions_by_programid15    use: solana:solana:transactions_by_programid_without_votes1617network: solana-mainnet-beta1819params: # Modify the param fields to meet your needs20  # For program_id: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA21  map_spl_transfers: token_contract:orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE

            步骤2:生成子图清单

            项目初始化后,通过在Dev容器中运行以下命令生成子图清单:

            1substreams codegen subgraph

            您将生成asubgraph.yaml清单,该清单将Substreams包作为数据源导入:

            1---2dataSources:3  - kind: substreams4    name: my_project_sol5    network: solana-mainnet-beta6    source:7      package:8        moduleName: map_spl_transfers # Module defined in the substreams.yaml9        file: ./my-project-sol-v0.1.0.spkg10    mapping:11      apiVersion: 0.0.912      kind: substreams/graph-entities13      file: ./src/mappings.ts14      handler: handleTriggers

            步骤3:在schema.graphql中定义实体

            通过更新schema.graphql文件来定义要保存在子图实体中的字段。

            以下是一个示例:

            1type MyTransfer @entity {2  id: ID!3  amount: String!4  source: String!5  designation: String!6  signers: [String!]!7}

            此模式定义了一个名为MyTransfer的实体,其字段包括 id, amount, source, designation, 和signers。

            步骤4:在mappings.ts中处理Substreams数据

            生成Protobuf对象后,您现在可以在./src目录里找到的mappings.ts文件中处理解码的Substreams数据。

            下面的示例演示了如何将与Orca帐户id关联的非派生传输提取到子图实体中:

            1import { Protobuf } from 'as-proto/assembly'2import { Events as protoEvents } from './pb/sf/solana/spl/token/v1/Events'3import { MyTransfer } from '../generated/schema'45export function handleTriggers(bytes: Uint8Array): void {6  const input: protoEvents = Protobuf.decode<protoEvents>(bytes, protoEvents.decode)78  for (let i = 0; i < input.data.length; i++) {9    const event = input.data[i]1011    if (event.transfer != null) {12      let entity_id: string = `${event.txnId}-${i}`13      const entity = new MyTransfer(entity_id)14      entity.amount = event.transfer!.instruction!.amount.toString()15      entity.source = event.transfer!.accounts!.source16      entity.designation = event.transfer!.accounts!.destination1718      if (event.transfer!.accounts!.signer!.single != null) {19        entity.signers = [event.transfer!.accounts!.signer!.single!.signer]20      } else if (event.transfer!.accounts!.signer!.multisig != null) {21        entity.signers = event.transfer!.accounts!.signer!.multisig!.signers22      }23      entity.save()24    }25  }26}

            步骤5:生成Protobuf文件

            要在AssemblyScript中生成Protobuf对象,请运行以下命令:

            1npm run protogen

            此命令将Protobuf定义转换为AssemblyScript,允许您在子图的处理程序中使用它们。

            结论

            恭喜!您已成功为Solana SPL代币设置了基于触发器的Substreams驱动子图。现在,您可以进一步定制您的模式、映射和模块,以适应您的特定用例。

            视频教程

            How to Index Solana with a Substreams-powered Subgraph

            其他资源

            如需更高级的定制和优化,请查看官方Substreams文档⁠。

            ⁠在GitHub上编辑⁠

            Substreams触发器常见问题
            在此页面上
            • 开始
            • 先决条件
            • 步骤1:初始化您的项目
            • 步骤2:生成子图清单
            • 步骤3:在schema.graphql中定义实体
            • 步骤4:在mappings.ts中处理Substreams数据
            • 步骤5:生成Protobuf文件
            • 结论
            • 视频教程
            • 其他资源
            The GraphStatusTestnetBrand AssetsForum安全Privacy PolicyTerms of Service