摘要
Solana 上的高级分析需要能够处理高吞吐量数据提取、历史查询和实时流而不会降低应用程序性能的 RPC 基础设施。本文概述了评估 Solana RPC 提供商时需要考察的关键 API 能力,从 getSignaturesForAddress 和 getTransaction 到 WebSocket 订阅和专用节点选项,帮助您选择支持分析工作负载的基础设施。
决策指南:将分析工作负载与 Solana RPC 能力匹配
在比较提供商之前,请将您的分析用例映射到实际需要的 RPC 方法和基础设施。一个跟踪近期交易的简单仪表板可以在共享公共端点上运行,但一个回填历史活动或实时监控内存池的数据管道将需要专用容量和归档访问。
尽早提出这些问题:
- 您需要哪些数据? 近期签名、完整交易详情,还是随时间变化的账户状态?
- 需要多少历史数据? 几小时、几天,还是自创世以来的完整账本?
- 访问模式是什么? 仪表板的突发查询、持续轮询,还是长期 WebSocket 订阅?
- 对速率限制的容忍度如何? 分析工具通常发出许多并行请求;共享端点可能会限制它们。
如果您的工作负载主要是历史性或高容量的,专用节点 可提供可预测的吞吐量,并允许您运行自己的索引。如果您需要快速启动原型,具有慷慨限制的共享 RPC 可能就足够了。OnFinality 提供共享和专用 Solana RPC 选项,以及用于测试的公共端点和用于扩展的生产级基础设施。
支持分析的 Solana RPC 方法
Solana 的 JSON-RPC API 公开了特别适用于分析的方法。以下是您可能依赖的方法:
- getSignaturesForAddress – 返回给定地址的交易签名列表,支持分页。对于跟踪钱包或程序的活动至关重要。
- getTransaction – 获取完整交易详情,包括费用、指令和日志。与 getSignaturesForAddress 结合使用以重建交易历史。
- getBlock – 检索包含所有交易、收据和奖励的区块。适用于链级分析。
- getBlocks – 列出范围内的区块编号,支持批量处理。
- getAccountInfo – 返回账户状态,包括数据和 lamports。对于跟踪代币余额或程序状态至关重要。
- getProgramAccounts – 获取由程序拥有的所有账户。对于索引程序特定数据非常强大,但可能对节点造成较大负载。
- getTokenAccountsByOwner – 列出钱包的代币账户,适用于投资组合分析。
- getSlot 和 getBlockHeight – 用于监控链进度和检测停滞。
对于实时分析,WebSocket 订阅(如 accountSubscribe、logsSubscribe 和 programSubscribe)提供基于推送的更新,减少轮询开销。
评估提供商 API 能力
在比较 Solana RPC 提供商的分析能力时,请关注以下能力:
| 能力 | 检查内容 | 重要性 |
|---|---|---|
| 方法覆盖 | 完整的 JSON-RPC 方法支持,包括 getSignaturesForAddress、getTransaction、getBlock | 缺少方法会破坏您的数据管道 |
| 历史数据深度 | 归档节点可用性、保留期 | 回测和趋势分析需要旧区块 |
| WebSocket 支持 | 稳定的订阅和低延迟 | 实时仪表板和警报依赖于此 |
| 速率限制 | 每秒请求数、并发连接数 | 高容量分析可能触及共享限制 |
| 专用节点选项 | 能够配置单租户节点 | 将您的工作负载与嘈杂邻居隔离 |
| 数据一致性 | 节点追上最新 slot 的速度 | 过时数据导致分析不准确 |
OnFinality 的 Solana RPC 服务支持 HTTP 和 WebSocket 传输,提供用于评估的公共端点和用于生产的专用节点。查看 Solana 网络页面 获取当前详细信息。
公共与专用:分析工作负载需要什么
公共端点便于测试和低容量使用。它们由许多用户共享,因此在高峰时段可能会受到速率限制或变慢。对于持续运行或需要大量数据拉取的分析,专用节点提供:
- 可预测的性能 – 无资源竞争。
- 更高的速率限制 – 您可以每秒发出更多请求。
- 自定义配置 – 您可以启用
--enable-rpc-transaction-history等标志以保留历史交易。 - 直接访问 – 没有中间人限制或过滤您的请求。
如果您正在构建严肃的分析平台,请从一开始就规划专用基础设施。OnFinality 的 专用节点服务 允许您使用所需设置部署 Solana 节点。
示例:使用 curl 拉取交易历史
以下是一个使用 curl 获取地址最近签名,然后获取最新交易详情的简单示例。将 YOUR_ADDRESS 替换为真实的 Solana 地址。
# 获取地址的最近签名
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getSignaturesForAddress",
"params": ["YOUR_ADDRESS", {"limit": 5}]
}'
# 获取最新交易的详情(使用前一个响应中的签名)
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "getTransaction",
"params": ["SIGNATURE", {"encoding": "jsonParsed"}]
}'
对于生产环境,请使用专用端点以避免速率限制。OnFinality 提供公共和专用端点;请参阅 Solana 网络页面 了解详情。
用于实时分析的 WebSocket 订阅
实时分析通常需要流式数据。Solana 的 WebSocket API 允许您订阅账户更改、日志和程序更新。以下是使用 ws 库的 Node.js 示例:
const WebSocket = require('ws');
const ws = new WebSocket('wss://solana.api.onfinality.io/public-ws');
ws.on('open', () => {
// 订阅特定程序的日志(例如,DEX 程序)
ws.send(JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'logsSubscribe',
params: [
{ mentions: ['PROGRAM_ID'] },
{ commitment: 'finalized' }
]
}));
});
ws.on('message', (data) => {
const msg = JSON.parse(data);
if (msg.method === 'logsNotification') {
console.log('新日志:', msg.params.result.value.signature);
// 处理日志数据以进行分析
}
});
ws.on('error', (err) => {
console.error('WebSocket 错误:', err);
});
WebSocket 连接是长连接,需要稳定的基础设施。专用节点可以处理许多并发订阅,而不会影响其他用户。
Solana 分析 RPC 使用中的常见陷阱
即使使用良好的提供商,您也可能遇到问题。以下是常见陷阱及避免方法:
- 共享端点上的速率限制 – 如果您收到 429 错误,请考虑升级到专用节点或批处理请求。
- 不完整的交易历史 – 某些节点除非配置了
--enable-rpc-transaction-history,否则不会保留历史交易。确保您的提供商支持此功能。 - 大型响应 –
getProgramAccounts可能返回巨大的负载。使用过滤器和分页来限制数据。 - 过时数据 – 如果您从落后的节点读取数据,您的分析将不准确。监控 slot 高度并适当使用承诺级别。
- WebSocket 断开 – 实现重连逻辑并处理错过的通知。
关键要点
- 高级 Solana 分析依赖于 RPC 方法,如
getSignaturesForAddress、getTransaction和getBlock,以及用于实时数据的 WebSocket 订阅。 - 评估提供商的方法覆盖、历史深度、WebSocket 稳定性、速率限制和专用节点可用性。
- 公共端点适合测试,但生产分析应使用专用基础设施以避免速率限制并确保一致性。
- OnFinality 提供共享和专用 Solana RPC 选项,以及用于评估的公共端点和用于扩展的生产级节点。
常见问题解答
用于分析的最佳 Solana RPC 提供商是什么?
最佳提供商取决于您的工作负载。对于高容量或历史分析,建议使用具有归档访问权限的专用节点。OnFinality 提供共享和专用 Solana RPC 服务;请参阅 Solana 网络页面 了解详情。
我可以将公共 Solana RPC 端点用于生产分析吗?
公共端点是共享的,可能有速率限制,因此不适合高吞吐量的生产分析。专用节点提供可预测的性能和更高的限制。
如何从 Solana 获取历史交易数据?
使用 getSignaturesForAddress 列出签名,然后使用 getTransaction 获取详情。确保您的节点启用了交易历史。OnFinality 的专用节点可以为此配置。
哪些 WebSocket 订阅对 Solana 分析有用?
logsSubscribe、accountSubscribe 和 programSubscribe 通常用于实时监控和分析。
OnFinality 是否支持 Solana WebSocket 连接?
是的,OnFinality 为 Solana 提供 WebSocket 端点,如上面的示例所示。查看 Solana 网络页面 获取最新 URL。
有关选择正确 RPC 提供商的更多信息,请参阅我们的 选择 RPC 提供商指南 和 RPC 定价。