Logo
新用户订阅 RPC,首月享 6.5 折优惠查看优惠
RPC Assistant

Solana 索引器:你需要什么样的基础设施?

摘要

构建 Solana 索引器需要在基于 Geyser 插件的 DIY 管道和抽象化流与存储的托管服务之间做出选择。本文比较了自托管与基于提供商的方法,包括 RPC 轮询、Yellowstone gRPC、Webhook 和数据仓库集成。在选择技术栈之前,评估数据新鲜度、吞吐量和运营开销。

Solana 索引器决策清单

构建 Solana 索引器涉及多个关键选择。使用此清单评估你的选项:

  • 数据新鲜度要求:你需要实时(亚秒级)还是近实时(秒到分钟级)?
  • 吞吐量:你的应用需要消耗多少每秒事务数?是否有突发流量?
  • 运营容忍度:你的团队能否管理验证器节点、Kafka 和 ClickHouse,还是更倾向于托管管道?
  • 成本模型:考虑基础设施成本(验证器、存储、计算)与 API 订阅费用。
  • 数据量与保留期:需要存储多少历史数据,保留多久?
  • 查询模式:你将运行即席 SQL 查询、GraphQL,还是仅预定义的聚合?
  • 团队技能:你的团队是否有 Rust、Node.js 或流式基础设施(如 Kafka)的经验?

索引 Solana 数据的方法

由于账户模型和高吞吐量(数千 TPS),索引 Solana 与 EVM 链有着根本区别。主要有三种方法:

  1. RPC 轮询 – 最简单,但大规模时缓慢且昂贵。
  2. Geyser 插件 + gRPC 流 – 实时、高效,但需要验证器访问。
  3. 托管 Webhook / 流 – 用控制换取便利。

RPC 轮询

使用 getSignaturesForAddressgetTransaction 获取程序或账户的事务。适用于低流量 dApp,但在公共 RPC 上很快会达到速率限制。

curl https://api.mainnet-beta.solana.com -X POST -H "Content-Type: application/json" -d '
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getSignaturesForAddress",
  "params": ["Vote111111111111111111111111111111111111111", {"limit": 5}]
}'

缺点:

  • 大多数 RPC 提供商限制速率。
  • 非实时;必须定期轮询。
  • 大型程序的请求成本高。

Geyser 插件 + Yellowstone gRPC

这是实时索引的黄金标准。运行一个带有 Geyser 插件的 Solana 验证器,该插件通过 gRPC 流式传输账户更新、事务和日志。Yellowstone gRPC 插件是最流行的。

要求:

  • 一个 Solana 验证器节点(或访问一个)。
  • 编译并配置 Geyser 插件。
  • gRPC 客户端(例如,使用 Node.js、Rust 或 Go)。

示例 Node.js gRPC 客户端:

const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');

const package = protoLoader.loadSync('geyser.proto');
const geyser = grpc.loadPackageDefinition(package).geyser;

const client = new geyser.Geyser('localhost:10000', grpc.credentials.createInsecure());
const call = client.subscribe();
call.write({
  slots: { filterByCommitment: { commitmentLevel: 1 } },
  transactions: { filter: { accounts: { any: ['Vote111111111111111111111111111111111111111'] } } }
});
call.on('data', (data) => console.log(data));

优点: 实时、低延迟、高效流式传输。 缺点: 需要运行验证器(高运营成本)或为托管 gRPC 流服务付费。

托管 Webhook / 流

像 Helius、QuickNode Streams 和 Shyft 等服务提供托管管道。它们处理验证器/Geyser 的复杂性,并通过 Webhook 或 gRPC 流交付数据。

Webhook 示例(Helius 风格):

POST /webhook
{
  "webhookURL": "https://your-backend.com/solana-webhook",
  "transactionTypes": ["ANY"],
  "accountAddresses": ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"],
  "webhookType": "enhanced"
}

优点: 无需基础设施管理,内置重试机制,数据丰富。 缺点: 供应商锁定,成本随数据量增长,控制有限。

Solana 索引器基础设施评估标准

标准检查什么为什么重要
数据新鲜度交付是亚秒级还是批量?实时应用需要低延迟;分析可以容忍秒级。
吞吐量容量最大事件/秒;突发处理Solana 可产生超过 10K TPS;管道必须跟上。
运营开销验证器管理、队列设置、数据库运维直接影响团队速度和基础设施成本。
可扩展性消费者和存储的水平扩展数据量会随着程序和用户呈指数增长。
查询灵活性SQL、GraphQL 或预聚合视图分析师需要即席查询;仪表板需要快速聚合。
成本可预测性固定订阅 vs. 可变计算/存储托管服务按事件收费;DIY 有硬件+DevOps 成本。
可靠性与故障转移重试逻辑、重放能力、SLA索引器停机意味着数据丢失;必须支持回填。
数据保留热存储 vs. 冷存储;归档策略历史数据支持趋势分析,但增加存储成本。

常见陷阱与故障排除

  • 速率限制: 公共 RPC 会限制轮询;始终使用具有更高限制的专用 RPC 进行索引工作负载。OnFinality 提供适合中等轮询需求的可扩展 RPC 端点。
  • 遗漏事务: Geyser 插件在高负载下可能丢失事件。确保管道具有回填机制(例如,定期从 RPC 批量获取)。
  • 模式漂移: 程序更新可能改变指令布局。使用 IDL 解析或处理动态解码。
  • 存储扩展: Solana 每月产生约 1 TB 的事务数据。计划冷存储或数据剪枝。
  • gRPC 连接断开: 使用带有指数退避的重连逻辑;许多托管流包括自动重连。

关键要点

  • 对于实时应用,避免 RPC 轮询;使用 Geyser gRPC 或托管流。
  • 评估总成本:DIY 验证器 + 流式基础设施 vs. 托管 API 订阅。
  • 始终规划回填:即使最好的流也可能在中断期间错过事件。
  • 选择符合查询模式的存储后端:ClickHouse 用于分析,Postgres 用于事务查询。
  • 托管服务减少运维,但引入可变成本;DIY 提供控制但需要专门的 DevOps。

常见问题

什么是 Solana 索引器? Solana 索引器摄取链上数据(事务、账户、日志)并将其存储在可查询格式(数据库、数据仓库)中,用于分析、仪表板或应用程序功能。

我可以使用标准 RPC 端点进行索引吗? 可以,适用于低流量场景。但生产索引需要更高的吞吐量和实时流,因此 Geyser 插件或托管 Webhook 更可取。

我需要运行自己的验证器来索引 Solana 吗? 不一定。你可以使用托管的 gRPC 流或使用专用节点进行 RPC 轮询。然而,为了最大的灵活性和控制,运行带有 Geyser 插件的验证器很常见。

OnFinality 如何支持 Solana 索引? OnFinality 提供 Solana RPC 端点,适用于轮询和事务获取,以及为需要自定义验证器设置的团队提供 专用节点基础设施。参见我们的 RPC 定价 了解速率限制和计划。

Geyser 和 Yellowstone 有什么区别? Geyser 是 Solana 的插件接口,发出账户和事务更新。Yellowstone 是一个特定的开源 Geyser 插件,暴露 gRPC 流。它们通常一起使用。

我应该使用 Webhook 还是 gRPC 流? Webhook 更易于设置,但延迟较高且没有排序保证。gRPC 流提供有序、低延迟的数据,推荐用于实时用例。

常见问题

What is a Solana indexer?

A Solana indexer is a service that ingests data from the Solana blockchain—transactions, account updates, and block metadata—and stores it in a queryable database for applications like explorers, dashboards, and analytics tools.

Can I use public RPC endpoints for indexing?

Public endpoints such as https://api.mainnet-beta.solana.com are rate-limited and intended for development and testing. For production indexing, use a dedicated RPC provider or managed stream service that offers higher throughput and reliability.

What is the difference between RPC polling and Geyser/gRPC?

RPC polling repeatedly calls JSON-RPC methods to fetch data on an interval; it is simple but can be slow and rate-limited. Geyser plugins (including Yellowstone gRPC) push data in real time from a validator, offering low latency and high efficiency but requiring validator infrastructure.

How do I handle reorgs and missed data in a Solana indexer?

Implement checkpointing to track the last processed slot or signature, use idempotent writes keyed by unique identifiers, and design a backfill mechanism to re-ingest data from archive RPC endpoints when gaps occur. Track commitment levels to respond to chain rollbacks.

Does OnFinality support Solana indexing infrastructure?

OnFinality provides Solana RPC endpoints with HTTP and WebSocket access, archive support, and regions in N. Virginia and Hong Kong. These can be used as the data source for a custom indexer. For a managed approach, see the blog post Deploy a Solana indexer with OnFinality. Verify current capabilities on the Solana network page.

Should I build my own indexer or use a managed service like SubQuery?

Build your own if you need deep customization, own the data completely, and have DevOps capacity. Use a managed service like SubQuery to reduce operational overhead and get a GraphQL API quickly, accepting some limitations in control and query flexibility.

RPC 知识库

相关 RPC 内容

网络 RPCSORA

关于SORA网络RPC端点,我需要了解什么?

SORA是一个基于Substrate的区块链货币系统,为数字货币提供去中心化框架。在SORA上构建的开发者需要可靠的RPC端点来读取链上数据、提交交易以及与Polkaswap DEX交互。本指南涵盖主网和Taira测试网的链设置、公共和专用RPC选项、水龙头详情以及常见调试技巧。...

网络 RPCAvalanche

什么是 TON 网络 RPC URL,如何使用它?

TON 网络 RPC URL 是你的 dApp 或机器人用来与 TON 区块链通信的端点。本文解释了官方公共端点、如何在代码中配置它,以及何时应考虑使用像 OnFinality 这样的托管 RPC 服务用于生产工作负载。...

网络 RPCOptimism

关于 Optimism RPC 端点,我需要了解什么?

# 关于 Optimism RPC 端点,我需要了解什么? Optimism RPC 端点之所以重要,是因为 Web3 应用依赖稳定的端点访问来进行读取、交易、仪表盘和后端工作流。正确的设置应匹配你的工作负载,支持你所需的网络和测试网,使限制可见,并在共享 RPC 不再足够时提供扩展路径。 对于 O...

网络 RPCSolana

solana.io:开发者连接 Solana 真正需要什么

solana.io 并不是你需要的 Solana RPC 端点或开发者门户。Solana 网络通过 JSON-RPC 端点访问,实际问题是你的应用应该指向哪个端点。本文解释了域名混淆,展示了真实的 Solana mainnet RPC 和 WebSocket URL,并帮助你决定是使用公共端点还是专...

网络 RPCSonic

Sonic RPC:链设置、端点和提供商选择

Sonic 是一个高性能的 EVM Layer-1 区块链,具有亚秒级最终性。本文涵盖 Sonic 主网和测试网的链设置、公共和提供商 RPC 端点,以及如何为生产应用选择可靠的 RPC 提供商。...

网络 RPCPhala

Phala RPC 端点:链设置、连接指南和开发者资源

Phala Network 是一个 Polkadot 平行链,利用可信执行环境(TEE)提供机密智能合约。要与 Phala 交互,开发者需要可靠的 RPC 端点来读取链上数据、提交交易和部署 Phat Contracts。本文涵盖 Phala RPC 链设置、如何连接以及选择 RPC 提供商时的注意...

永远不用担心基础设施

OnFinality 消除了 DevOps 的繁重工作,让您能够更聪明、更快地构建。

开始