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 轮询

使用 getSignaturesForAddress 和 getTransaction 获取程序或账户的事务。适用于低流量 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 内容

网络 RPCMonad

peaq 主网何时上线,这对你的 2025 年构建意味着什么?

peaq 主网于 2024 年上线,将专注于 DePIN 的 Layer 1 从测试网实验转变为生产网络,机器、车辆和物联网设备可以在链上注册身份并结算价值。如果你现在正在 peaq 上构建,上线日期不如它引发的运营问题重要:随着设备流量增长,哪个 RPC 端点和节点设置能让你的 DePIN 应用保...

区块链基础设施Bittensor

在 Bittensor 上挖矿 TAO:如何保持矿工注册并获得奖励?

在 Bittensor 上挖矿 TAO 不是工作量证明哈希。你在子网上注册一个热键,运行一个矿工来产生该子网奖励的任务,并保持链连接足够健康以设置权重、领取排放,并在被注销时重新注册。这个循环的链上部分是大多数矿工亏损的地方:在设置权重或注册期间 RPC 连接断开可能会让你损失整个 tempo 的排...

区块链基础设施

免费加密货币水龙头:测试网代币、安全性与 RPC 设置

加密货币水龙头是一种发放少量加密货币的服务。对开发者而言,有用的是测试网水龙头:它会发送免费的测试代币(例如 Sepolia ETH 或测试网 POL),让你无需花费真实资金即可部署合约、运行集成测试并演练钱包流程。另一种是主网水龙头,通过完成任务或验证码支付少量真实代币,它主要是面向消费者的赚取类...

RPC 提供商选择Solana

有哪些可靠的服务提供用于Solana质押的API访问?

可靠的Solana质押API服务提供编程访问,用于在Solana网络上进行质押、解除质押和管理奖励。顶级选项包括Blockdaemon Staking API、Helius Staking API和Figment Staking API。选择提供商时,评估正常运行时间保证、支持的操作、用于实时更新的...

故障排查

'authentication failed: encrypted http response nonce mismatch' 是什么意思?如何修复?

'authentication failed: encrypted http response nonce mismatch' 错误是 TLS 重放保护失败。当加密 HTTP 响应中的 nonce 值与客户端期望的值不匹配时会发生此错误。最常见的原因是并发 HTTP/2 请求共享 TLS 会话 no...

测试网 RPCAleph Zero

什么是 Sepolia 测试网以及如何连接?

Sepolia 测试网是以太坊主要的权益证明测试网络。它紧密镜像主网行为,足以在不花费真实 ETH 的情况下部署合约、运行集成测试和演练升级。开发者使用它是因为它稳定、被工具广泛支持,并且与已退役的测试网相比有较长的支持期限。 连接 Sepolia 主要是一项配置工作:你需要一个 RPC 端点、正确...

永远不用担心基础设施

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

开始