摘要
公共 Solana RPC 端点是一个共享的、无需注册的 URL,允许你读取 Solana 主网数据并提交交易,而无需运行自己的验证器或 RPC 节点。它非常适合学习、原型设计、黑客松演示和低流量脚本,但共享容量意味着在负载下性能可能波动并受到速率限制。
本页解释了公共 Solana RPC 的工作原理、如何通过 curl 和 JavaScript 连接、所需的确切主网设置,以及何时托管或专用端点会成为生产应用的更好选择。
公共 Solana RPC 端点是一个共享的、可公开访问的 URL,允许任何客户端读取 Solana 状态并提交交易,而无需运行验证器或 RPC 节点。你将 URL 粘贴到钱包、脚本或 dApp 中,它通过 HTTP 或 WebSocket 响应 JSON-RPC 调用。代价是你需要与使用同一 URL 的所有其他人共享该容量。
本页涵盖公共 Solana RPC 的实际行为、确切的主网设置、可用的请求示例,以及表明是时候迁移到托管或专用端点的信号。
公共 Solana RPC 端点是否适合你的项目?
在将公共端点用于快速测试之外的任何用途之前,请使用此简短指南。
| 你的情况 | 公共端点 | 托管/共享端点 | 专用节点 |
|---|---|---|---|
| 学习 Solana、教程、黑客松 | 适合 | 可以 | 过度 |
| 少量用户的钱包或 dApp 演示 | 可用 | 更好 | 过度 |
| 有真实流量的生产应用 | 有风险 | 推荐 | 最适合高负载或延迟敏感型负载 |
索引、getProgramAccounts、回填 | 不适用 | 有限制可能 | 推荐 |
| 交易机器人、WebSocket 订阅 | 不适用 | 可能 | 推荐 |
如果你仍在探索,公共端点是开始的最快方式。如果你要发布给真实用户,请尽早规划升级路径,而不是在第一次遇到速率限制事件后才考虑。
公共 Solana RPC 与私有端点的区别
公共端点通常作为免费服务或付费服务的入口运营。它们是共享的、有速率限制的,并且不是为持续吞吐量设计的。私有或托管端点为你提供专用的 API 密钥、更高的请求配额,以及在出现问题时提供支持渠道。
实际差异体现在三个方面:
- 吞吐量。 公共端点会限制激进的客户端。突发的大量
getProgramAccounts或日志订阅是最先被削减的。 - 一致性。 共享负载意味着延迟在一天中会变化。对于区块浏览器刷新来说没问题,但对于交易循环来说很痛苦。
- 支持。 当公共端点返回错误时,你通常没有渠道询问原因。托管提供商提供状态页面和升级途径。
Solana 主网设置一览
如果你要将 Solana 接入钱包、dApp 或脚本,这些是你需要的值。它们与 OnFinality Solana 网络配置匹配。
| 设置 | 值 |
|---|---|
| 网络 | Solana Mainnet |
| 原生货币 | SOL(9 位小数) |
| HTTP RPC | https://solana.api.onfinality.io/public |
| WebSocket RPC | wss://solana.api.onfinality.io/public-ws |
| 区块浏览器 | https://explorer.solana.com |
| 支持的传输方式 | HTTP、WebSocket |
对于 devnet 工作,请使用 Solana Devnet RPC 页面,而不是将测试代码指向主网。
使用 curl 和 JSON-RPC 连接
Solana 使用 JSON-RPC 2.0。最简单的健全性检查是 getHealth 调用,它告诉你节点是否已同步并正在处理请求。
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getHealth"
}'
健康的节点返回 {"jsonrpc":"2.0","result":"ok","id":1}。如果你得到超时或 429,那是端点承受压力的第一个信号。
要读取余额,请使用 getBalance 和 base58 公钥:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getBalance",
"params": ["11111111111111111111111111111111"]
}'
结果以 lamports 为单位。除以 1,000,000,000 得到 SOL。
从 JavaScript 使用公共 Solana RPC
大多数 Solana 应用使用 @solana/web3.js。将其指向公共端点只需更改一行,但你仍应包装调用,以便以后可以更换 URL。
import { Connection, PublicKey, LAMPORTS_PER_SOL } from "@solana/web3.js";
const connection = new Connection(
"https://solana.api.onfinality.io/public",
"confirmed"
);
const wallet = new PublicKey("11111111111111111111111111111111");
const lamports = await connection.getBalance(wallet);
console.log("Balance:", lamports / LAMPORTS_PER_SOL, "SOL");
将端点保留在环境变量中,这样你就可以从公共 URL 迁移到托管或专用 URL,而无需触及业务逻辑。
共享端点上的 WebSocket 订阅
Solana 的 WebSocket API 是公共端点最吃力的地方。accountSubscribe、logsSubscribe 和 slotSubscribe 保持长连接,而共享基础设施在负载下往往会断开它们。
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);
if (msg.method === "slotNotification") {
console.log("New slot:", msg.params.result.slot);
}
};
如果你依赖订阅来实现实时 UI 或机器人,请将公共 WebSocket 视为开发便利,而非生产传输。规划重连、退避和备用端点。
公共 Solana RPC 开始崩溃的地方
这些是开发人员将公共端点推得太远时最常遇到的故障模式。
| 症状 | 可能原因 | 如何处理 |
|---|---|---|
| HTTP 429 响应 | 超出共享速率限制 | 降低请求速率、批量调用或迁移到托管端点 |
| WebSocket 断开 | 长连接在负载下被丢弃 | 添加重连逻辑并考虑专用端点 |
getProgramAccounts 超时 | 共享容量上的繁重扫描 | 使用过滤查询或索引器;避免在公共端点上使用 |
| 读取陈旧或滞后 | 节点落后于最新区块 | 检查 getHealth 和 getSlot;故障转移到另一个端点 |
| 延迟不一致 | 邻居干扰负载 | 将延迟敏感的调用迁移到专用节点 |
何时迁移到托管或专用 Solana RPC
公共端点是起点,不是终点。迁移通常由以下之一触发:
- 你正在向真实用户发布,无法承受发布或空投期间的 429 错误。
- 你运行交易或清算逻辑,其中 WebSocket 断开会导致资金损失。
- 你需要归档历史、
getProgramAccounts或公共端点不提供的跟踪式调试。 - 你想要一个支持渠道和一个可以指向待命轮换的状态页面。
OnFinality 提供 Solana RPC 作为托管 API,并在你需要隔离容量时提供 专用节点。你可以查看 RPC 定价 和完整的 支持的 RPC 网络 列表来规划升级。Solana 网络页面 有当前的端点详细信息。
实用的迁移清单
当你决定离开公共端点时,请按顺序完成以下步骤:
- 外部化端点。 将 URL 移入配置或环境变量。
- 添加健康检查。 定期探测
getHealth和getSlot并记录失败。 - 监控延迟。 跟踪每个方法的 p50 和 p95,以便公平比较提供商。
- 添加备用。 保留第二个端点并在重复错误时切换。
- 分离工作负载。 将繁重读取发送到与交易提交路径不同的端点。
- 负载测试。 在切换前重放真实流量。
- 审查数据。 比较切换前后的错误率和延迟。
关键要点
- 公共 Solana RPC 端点是一个共享 URL,非常适合学习和原型设计,但不是为持续生产流量构建的。
- Solana 主网使用基于 HTTP 和 WebSocket 的 JSON-RPC;OnFinality 公共端点是
https://solana.api.onfinality.io/public和wss://solana.api.onfinality.io/public-ws。 - 速率限制、WebSocket 连接断开和
getProgramAccounts超时是最常见的公共端点故障模式。 - 将端点保留在配置中,以便你可以迁移到托管或 专用节点 而无需重写应用逻辑。
- 在扩展之前,请查看 RPC 定价 和 支持的 RPC 网络。
常见问题
公共 Solana RPC 端点免费使用吗?
公共端点通常可以免费调用,但它们是共享的且有速率限制。免费访问通常伴随着较低的吞吐量和无支持保证,这就是生产团队迁移到托管或专用端点的原因。
公共 Solana RPC URL 是什么?
OnFinality 在 https://solana.api.onfinality.io/public 提供 Solana 主网 HTTP 访问,在 wss://solana.api.onfinality.io/public-ws 提供 WebSocket 访问。请始终在 Solana 网络页面 上确认当前 URL。
我可以将公共 Solana RPC 用于交易机器人吗?
不推荐。机器人依赖低延迟读取和稳定的 WebSocket 订阅,这两者在共享公共容量上都不可靠。专用节点为你提供隔离的吞吐量和可预测的连接。
为什么我的公共 Solana RPC 返回 429 错误?
429 表示你已超出共享速率限制。降低请求速率,尽可能批量调用,并将延迟敏感或高流量的方法迁移到托管或专用端点。
如何从公共端点切换到私有端点?
将端点保留在环境变量中,添加健康和延迟探测,然后将 URL 替换为你的托管或专用端点。由于 Solana 使用相同的 JSON-RPC 接口,除了连接字符串外,无需更改应用代码。
OnFinality 提供 Solana devnet RPC 吗?
是的。请参阅 Solana Devnet RPC 页面了解 devnet 端点详细信息,并在将代码指向主网之前使用它进行测试。