摘要
免费 Solana RPC 节点是公共或共享端点,允许你在没有付费计划的情况下读取链上数据并提交交易。它们适用于原型开发、本地开发、钱包设置和低流量脚本,但通常具有共享容量、请求限制且无运营保证。本页解释了如何连接到免费 Solana 端点、在负载下首先会出现什么问题,以及何时迁移到托管或专用节点。OnFinality 提供公共 Solana 端点以及托管 RPC API 和专用节点选项,当你的工作负载超出免费访问范围时可以使用。
免费 Solana RPC 节点是否适合你的工作负载?
免费 Solana RPC 节点是任何人都可以调用的共享端点,无需付费计划。它们是让钱包、脚本或原型与 Solana 通信的最快方式。代价是你与使用同一端点的所有人共享容量,并且无法控制节点的配置、保留策略或可用性。
在决定使用免费端点之前,请进行以下快速测试:
-
原型或本地开发: 免费端点通常足够。你发送少量请求,可以手动重试失败。
-
面向真实用户的钱包或 dApp: 免费端点可以在低流量下工作,但一旦有并发用户,共享速率限制和 WebSocket 断开就会显现。
-
索引器、交易机器人或分析任务: 免费端点通常无法胜任。大量的
getProgramAccounts、getSignaturesForAddress和日志订阅消耗的计算资源远超共享端点的规模。 -
需要 SLA 或支持的生产环境: 迁移到托管 RPC API 或专用节点,以便控制容量、传输和故障转移。
如果你仍在共享、托管和专用访问之间犹豫,Solana RPC 提供商比较和 RPC 提供商选择指南更深入地介绍了评估标准。
“免费”对 Solana RPC 意味着什么
Solana RPC 不是单一服务。它是由各个节点提供的 JSON-RPC 接口。免费端点是由提供商、基金会或社区团体向公众开放的节点(或小型节点池)。
这种模式有三个实际后果:
-
共享吞吐量。 每个用户的每个请求都在竞争相同的 CPU、内存和网络容量。当端点繁忙时,你的调用会排队或被拒绝。
-
速率限制和方法限制。 许多免费端点限制每秒或每分钟的请求数,有些会禁用昂贵的方法,如
getProgramAccounts,或限制getLogs风格的订阅。 -
无保留或支持保证。 免费节点可能不保留完整历史,可能修剪较旧的账本数据,并且通常没有支持渠道。
这些并不意味着免费端点不好。它们是一种特定工具:适合学习和轻量使用,不适合持续或延迟敏感的工作负载。
连接到免费 Solana 端点
对于 Solana 主网,OnFinality 提供公共 HTTP 和 WebSocket 端点。你可以直接用于开发和轻量测试。
# Solana 主网公共 HTTP 端点
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getLatestBlockhash",
"params": [{"commitment": "confirmed"}]
}'
成功响应返回当前区块哈希及其最后有效区块高度:
{
"jsonrpc": "2.0",
"result": {
"context": { "slot": 0 },
"value": {
"blockhash": "...",
"lastValidBlockHeight": 0
}
},
"id": 1
}
对于订阅,使用 WebSocket 端点:
// 订阅 slot 更新的 WebSocket
const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");
ws.onopen = () => {
ws.send(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "slotSubscribe"
}));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
console.log("slot notification", msg.params?.result);
};
如果你在主网之前构建或测试,请改用 Solana Devnet RPC 端点。Devnet 允许你从水龙头请求测试 SOL,并执行相同的 RPC 方法,而无需花费真实资金。
链设置一览
当你将 Solana 添加到钱包、dApp 配置或像 Anchor 这样的框架时,需要链参数与你目标网络匹配。
| 设置 | Solana 主网 | Solana Devnet |
|---|---|---|
| 链名称 | Solana Mainnet | Solana Devnet |
| 原生货币 | SOL(9 位小数) | SOL(9 位小数) |
| HTTP RPC | https://solana.api.onfinality.io/public | 参见 Solana Devnet |
| WebSocket RPC | wss://solana.api.onfinality.io/public-ws | 参见 Solana Devnet |
| 区块浏览器 | https://explorer.solana.com | https://explorer.solana.com/?cluster=devnet |
| 承诺级别 | processed, confirmed, finalized | processed, confirmed, finalized |
保持链名称、货币小数位和浏览器 URL 与你实际调用的网络一致。将主网 RPC URL 与 devnet 程序 ID 混合是最常见的设置错误之一。
免费端点首先在哪里出问题
免费 Solana RPC 节点很少在简单调用上失败。它们会在使 Solana 应用变得有趣的操作上失败。注意以下模式:
| 症状 | 可能原因 | 尝试方法 |
|---|---|---|
429 Too Many Requests | 达到共享速率限制 | 添加退避和抖动,降低轮询频率,尽可能批量处理 |
getProgramAccounts 超时 | 方法昂贵或被禁用 | 缩小过滤器,使用 dataSlice,或迁移到托管/专用节点 |
| WebSocket 断开 | 空闲超时或容量压力 | 实现重连和重新订阅逻辑;考虑专用 WebSocket 端点 |
发送时 Blockhash not found | 区块哈希在确认前过期 | 获取新的区块哈希,设置 lastValidBlockHeight,重试 |
| 槽高度不一致 | 请求命中池中的不同节点 | 固定到单个端点或使用具有一致路由的提供商 |
| 缺少旧交易 | 节点修剪了历史 | 使用支持归档的端点进行历史查询 |
如果你在同一会话中看到多个这些问题,端点是在告诉你它的规模不足以应对你的工作负载。这是评估托管或专用访问的信号,而不是无限调整重试。
对共享节点造成压力的 Solana 特有方法
Solana 的 RPC 接口比典型的 EVM 链更广泛,少数方法主导资源使用:
-
getProgramAccounts扫描程序拥有的账户。如果没有严格的过滤器,它可能返回数兆字节的数据,是免费端点超时的最常见原因。 -
getSignaturesForAddress在繁忙的程序上返回长历史。使用before和until分页,而不是一次性请求所有内容。 -
logsSubscribe和programSubscribe推送大量通知。共享 WebSocket 在负载下可能会丢弃或限制这些通知。 -
sendTransaction依赖于有效的近期区块哈希。如果你的端点速度慢,区块哈希可能在交易落地前过期,产生令人困惑的错误。
对于任何这些情况,解决方案通常是容量和控制,而不是巧妙的参数。托管 RPC API 为你提供稳定的端点和可预测的限制;专用节点为你提供节点本身,当你需要一致的 getProgramAccounts 性能或长期订阅时,这很重要。
生产就绪检查清单
在将真实用户指向任何 Solana RPC 端点(包括免费端点)之前,请确认以下内容:
-
故障转移: 你至少配置了两个端点,并且客户端可以在一个失败时切换。
-
重试策略: 对 429 和 5xx 响应使用带抖动的指数退避,并限制总重试次数。
-
承诺策略: 你知道哪些调用使用
processed、confirmed或finalized,以及为什么。 -
WebSocket 生命周期: 重连、重新订阅和心跳处理已实现,而不是假设。
-
可观测性: 你记录每个端点的错误率、延迟百分位数和速率限制响应。
-
成本模型: 你了解什么量会触发付费计划以及该计划包含什么。请参阅 RPC 定价了解当前层级。
-
网络覆盖: 如果你支持多条链,请确认每条链都列在支持的 RPC 网络下。
如果你无法满足大部分这些条件,免费端点对于开发仍然可以,但还不是生产依赖。
从免费迁移到托管或专用
迁移本身通常很小。决策才是困难的部分。
继续使用免费如果: 你正在原型设计、运行测试套件,或服务一个偶尔失败可接受的小型内部工具。
迁移到托管 RPC API 如果: 你有真实用户,需要具有定义限制的稳定端点,想要 WebSocket 支持,并且不想运行基础设施。OnFinality 的 RPC API 服务就是为此而建,提供 Solana 和其他网络的端点。
迁移到专用节点如果: 你需要在繁重方法上保持一致的性能,想要控制节点配置和保留策略,或运行共享端点无法吸收的工作负载。请参阅专用节点了解其工作原理。
一个实用的中间路径是保留免费端点作为备用,同时将主要流量路由到托管端点。这样可以在没有大量前期投入的情况下获得弹性。
关键要点
-
免费 Solana RPC 节点是共享端点,适用于原型、本地开发和低流量脚本。
-
它们通常施加速率限制,限制昂贵的方法,并且不提供保留或支持保证。
-
你会看到的第一个故障是 429 响应、
getProgramAccounts超时和 WebSocket 断开。 -
Solana 主网公共端点可通过 HTTP 和 WebSocket 使用;devnet 是主网之前的正确目标。
-
生产应用需要故障转移、重试逻辑、可观测性和清晰的成本模型,而不仅仅是一个可用的 URL。
-
当免费访问不再适合时,托管 RPC API 和专用节点是两条值得评估的升级路径。
常见问题
免费 Solana RPC 节点对于生产环境足够可靠吗?
在非常低的流量下可以,但它们是共享的,通常缺乏容量、保留和支持方面的保证。对于任何有真实用户或延迟敏感的场景,托管或专用端点是更安全的默认选择。
免费 Solana RPC 端点和专用节点有什么区别?
免费端点由许多用户共享,你无法控制其配置。专用节点为你的工作负载配置,因此你可以控制容量、保留和传输行为。
我可以使用免费端点进行 getProgramAccounts 吗?
有时可以,但这是最可能在共享端点上超时或被限制的方法。缩小过滤器,使用 dataSlice,如果你依赖它,请考虑托管或专用端点。
免费 Solana RPC 端点支持 WebSocket 吗?
许多支持,包括 OnFinality 的公共 Solana WebSocket 端点,但共享 WebSocket 连接在负载下可能会断开。无论使用哪个端点,都要实现重连和重新订阅逻辑。
如何在不花费 SOL 的情况下在 Solana 上测试?
使用 Solana Devnet,从水龙头请求测试 SOL,并运行你计划在主网上使用的相同 RPC 方法。
何时应该切换到付费 Solana RPC 计划?
当你看到反复出现的速率限制、核心方法超时或 WebSocket 不稳定时,或者当你需要支持和定义的容量时。查看 RPC 定价和支持的网络来规划迁移。