摘要
免费 Solana 节点端点是一个共享的 RPC URL,无需付费即可调用,通常用于学习、原型设计或低流量脚本。它适用于 getBalance 和 getLatestBlockhash 等基本读取操作,但共享容量意味着速率限制、延迟波动以及在高负载下偶尔出现故障。
本页解释了免费 Solana 端点的适用场景、在哪些情况下会失效,以及何时应迁移到托管或专用 Solana RPC 设置。它还展示了如何测试端点、配置钱包,并判断你的工作负载是否可以保持免费,还是需要付费计划。
快速建议:免费 Solana 节点是否足以满足你的工作负载?
大多数搜索免费 Solana 节点的开发者想要以下三件事之一:一个可以粘贴到钱包中的 URL、一种运行脚本或机器人的廉价方式,或者在为基础设施付费之前测试一个想法的方法。正确的选择取决于你正在做哪件事。
| 你的情况 | 免费 Solana 节点通常 | 下一步做什么 |
|---|---|---|
| 学习、教程、一次性脚本 | 可以 | 使用共享端点并保持低请求量 |
| 本地钱包或 devnet 测试 | 可以,但使用 devnet | 将钱包指向 Solana devnet 端点 |
| 拥有几百用户的小型 dApp | 有风险 | 测量错误率,然后转向托管计划 |
| 交易机器人、索引器或高频读取 | 不适合 | 评估专用 Solana 节点 |
| 有付费用户的生产应用 | 不适合 | 使用托管或专用 RPC 提供商 |
如果你仍在探索,免费端点是最快的起步方式。如果你要发布给真实用户,请将免费访问视为临时桥梁,而非基础。
“免费 Solana 节点”实际意味着什么
Solana 不会像云提供商提供免费套餐那样提供免费节点。人们所说的免费 Solana 节点几乎总是以下之一:
- 由基金会、提供商或社区团体运行的公共 RPC 端点。
- 共享 RPC 层级,在一定请求量内免费,之后限速或计费。
- 你在自己硬件上运行的自托管验证器或 RPC 节点,其中“免费”仅意味着你不向提供商付费。
每种选项都有不同的权衡。公共端点最容易上手,但你与所有找到相同 URL 的人共享它。自托管节点给你控制权,但 Solana RPC 节点有真实的硬件要求,同步和维护是一项持续的工作。
免费端点最好被理解为共享资源。你获得访问权,但没有容量保证、延迟保证或支持渠道。
连接前需要的 Solana RPC 设置
在将任何 URL 粘贴到钱包或脚本之前,请确认网络和传输方式。Solana 主网和 devnet 是独立的集群,具有独立的状态,指向错误网络的钱包即使端点健康也会看起来像坏了。
| 设置 | Solana 主网 | Solana devnet |
|---|---|---|
| 集群 | Mainnet Beta | Devnet |
| 原生货币 | SOL(9 位小数) | SOL(9 位小数,无实际价值) |
| 典型用途 | 生产读写 | 测试、水龙头资助的实验 |
| 浏览器 | https://explorer.solana.com | https://explorer.solana.com(devnet 切换) |
| 传输 | HTTP 和 WebSocket | HTTP 和 WebSocket |
OnFinality 通过 HTTP 和 WebSocket 暴露 Solana 主网。公共端点是:
https://solana.api.onfinality.io/public
wss://solana.api.onfinality.io/public-ws
对于 devnet 工作,请使用专用的 Solana Devnet RPC 页面,而不是将测试代码指向主网。混合两者是导致令人困惑的故障的最常见原因之一。
在一分钟内测试免费 Solana 端点
你不需要 SDK 来检查端点是否存活并返回合理数据。一个 JSON-RPC 调用就能告诉你很多信息。
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"}]
}'
健康的响应包括最近的区块哈希和 lastValidBlockHeight。如果调用超时、返回速率限制错误,或返回远落后于当前 slot 的区块哈希,则端点要么过载,要么跟不上。
在确定使用某个端点之前,还值得运行另外两个调用:
# 检查当前 slot 以及节点是否跟上
curl https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment":"confirmed"}]}'
# 检查钱包余额
curl https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getBalance","params":["<WALLET_ADDRESS>",{"commitment":"confirmed"}]}'
如果 getSlot 返回的值持续攀升,并且 getLatestBlockhash 返回新鲜数据,则该端点可用于基本读取。这是底线,不是上限。
免费 Solana 端点在何处失效
免费和公共端点往往以可预测的方式失败。了解症状有助于你决定是重试、重新配置,还是转向付费计划。
| 症状 | 可能原因 | 尝试什么 |
|---|---|---|
| 429 响应 | 触及共享速率限制 | 降低请求速率、批量调用,或转向托管计划 |
| getProgramAccounts 超时 | 共享节点上的繁重扫描 | 添加过滤器、分页,或使用专用节点 |
| WebSocket 断开连接 | 共享连接限制 | 使用退避重连,或使用专用 WebSocket 端点 |
| 区块哈希过时错误 | 节点落后于链尖 | 使用新鲜区块哈希重试,或切换端点 |
| 调用间结果不一致 | 在不均匀节点间负载均衡 | 固定到单个端点或使用状态一致的提供商 |
getProgramAccounts 值得特别关注。它是最昂贵的 Solana RPC 调用之一,在共享端点上它往往是第一个失败的。如果你的应用依赖它,请计划使用专用节点或能可靠支持它的提供商。
何时从免费转向托管或专用
没有适用于每个应用的单一每秒请求数,但有明确信号表明免费端点不再适合:
- 你的用户看到失败交易,但重试后成功。
- 你的日志显示 429 或超时响应比例上升。
- 你需要长时间保持打开的 WebSocket 订阅。
- 你依赖归档数据或历史查询。
- 当出现问题时,你需要支持渠道。
此时,决定是在托管共享计划和专用节点之间。托管共享计划更便宜,适合中等流量。专用节点提供隔离容量,这对交易机器人、索引器和具有突发负载的应用很重要。你可以在 RPC 定价 页面比较选项,如果你跨链运营,可以查看 支持的 RPC 网络。
OnFinality 同时提供托管 RPC API 访问和 专用节点,因此你可以从共享开始,然后迁移到隔离容量,而无需更改集成模式。
配置钱包或应用以使用 Solana 端点
大多数 Solana 工具接受集群 URL。在钱包中,你通常添加自定义 RPC 端点并选择它。在代码中,你将 URL 传递给客户端。
import { Connection, PublicKey, clusterApiUrl } from "@solana/web3.js";
// 用于轻量读取的免费/共享端点
const connection = new Connection(
"https://solana.api.onfinality.io/public",
{ commitment: "confirmed" }
);
const balance = await connection.getBalance(
new PublicKey("<WALLET_ADDRESS>")
);
console.log("lamports:", balance);
对于 WebSocket 订阅,使用匹配的 WebSocket URL:
const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");
ws.onopen = () => {
ws.send(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "slotSubscribe",
params: []
}));
};
ws.onmessage = (event) => {
console.log("slot update:", event.data);
};
在你的应用中保持 commitment 级别一致。在同一流程中混合 processed、confirmed 和 finalized 是导致令人困惑的状态错误的常见原因。
监控端点健康的简单方法
如果你在免费端点上运行,请监控它,以便知道何时不再足够好。每分钟运行一次的轻量级探测足以捕获大多数问题。
async function probe(url) {
const start = Date.now();
try {
const res = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "getSlot",
params: [{ commitment: "confirmed" }]
})
});
const latency = Date.now() - start;
const body = await res.json();
return { ok: res.ok, latency, slot: body.result };
} catch (err) {
return { ok: false, error: String(err) };
}
}
随时间跟踪三件事:成功率、中位延迟和 slot 新鲜度。当成功率下降或 slot 新鲜度滞后时,这就是你改变计划的信号。
关键要点
- “免费 Solana 节点”几乎总是共享公共端点或免费层级,而不是私有节点。
- 免费端点适合学习、devnet 测试和低流量脚本。
- 它们在高负载下会失效,尤其是对于
getProgramAccounts、长期 WebSocket 订阅和突发流量。 - 在依赖任何端点之前,使用
getLatestBlockhash、getSlot和getBalance进行测试。 - 当用户开始看到失败交易或你需要支持时,转向托管或专用 Solana RPC。
- OnFinality 通过 HTTP 和 WebSocket 提供 Solana 主网,以及用于隔离容量的专用节点。
常见问题
是否存在真正免费的 Solana 节点?
有免费使用的公共端点和免费层级,但它们是共享的。你得到的不是私有节点;你获得的是对共享节点的访问,没有容量保证。
我可以免费运行 Solana RPC 节点吗?
你可以运行自己的节点,但“免费”仅意味着你不向提供商付费。Solana RPC 节点需要大量的 CPU、RAM、磁盘和带宽,以及持续的维护和监控。
为什么我的免费 Solana 端点返回 429 错误?
429 响应通常意味着你触及了共享速率限制。降低请求速率,尽可能批量调用,如果限制持续阻碍你,考虑托管计划。
我应该为交易机器人使用免费端点吗?
通常不应该。机器人需要一致的延迟和可靠的 WebSocket 流。共享端点可能引入延迟和断开连接,直接影响执行。
如何从免费端点切换到付费端点?
在大多数情况下,你更改配置或钱包中的 RPC URL,并保持相同的客户端代码。先在暂存环境测试,然后推出。
OnFinality 提供免费 Solana 端点吗?
OnFinality 提供用于轻量使用的公共 Solana 端点,以及托管和专用选项。查看 Solana 网络页面 和 RPC 定价 了解当前详情。