摘要
免费 Solana API 为你提供一个支持 Solana JSON-RPC 方法的 HTTP 和 WebSocket 端点,让你无需运行验证节点即可读取账户、发送交易和订阅日志。问题在于,免费套餐是共享的、有速率限制的,通常不适合生产流量或大量归档查询。
本文解释了免费 Solana API 实际能处理什么,如何用真实的 JSON-RPC 调用进行测试,以及哪些信号表明你应该转向付费共享方案或 OnFinality 的专用 Solana 节点。
免费 Solana API 是一个支持 Solana JSON-RPC 方言的 HTTP 和 WebSocket 端点,让你无需运行验证节点即可读取账户、提交交易和订阅日志。这是让钱包、脚本或原型与 Solana 主网通信的最快方式。代价是免费端点共享、有速率限制,通常不适合生产流量、归档查询或高频 WebSocket 订阅。
本页面帮助你判断免费 Solana API 是否足以应对当前工作负载,如何用真实的 JSON-RPC 调用验证它,以及当它无法满足需求时应该关注什么。
免费 Solana API 是否足以应对你的工作负载?
在编写更多代码之前,先将端点与任务匹配。免费套餐适合学习和轻量读取,但在持续负载、大型 getProgramAccounts 扫描或大量并发 WebSocket 客户端下会迅速崩溃。
| 工作负载 | 免费 API 适用性 | 需要注意什么 |
|---|---|---|
| 钱包或 dApp 原型 | 通常可以 | 演示期间偶尔出现 429 |
| 针对 devnet 的 CI 测试 | 如果隔离则没问题 | 并行任务间共享速率限制 |
| 读取密集型后端(余额、代币账户) | 勉强 | 按 IP 和按方法限流 |
索引器或 getProgramAccounts 扫描 | 差 | 超时、响应被截断 |
| 交易机器人或 WebSocket 订阅 | 差 | 套接字断开、重连风暴 |
| 面向用户的生产 dApp | 不推荐 | 无 SLA、无支持渠道 |
如果你的工作负载位于前两行,免费 Solana API 是合理的起点。如果位于后三行,请规划通往付费共享方案或专用 Solana 节点的路径。OnFinality 两者都提供,你可以在 Solana 网络页面 和 RPC 定价 上比较选项。
对于 Solana JSON-RPC 来说,“免费”意味着什么
Solana 节点通过 HTTP 暴露 JSON-RPC 接口,对于订阅则通过 WebSocket。免费端点通常为你提供:
- 用于标准方法(如
getBalance、getAccountInfo、getLatestBlockhash和sendTransaction)的公共 HTTP URL。 - 用于
logsSubscribe、accountSubscribe和slotSubscribe的公共 WebSocket URL。 - 无需 API 密钥,或易于获取的低配额密钥。
它通常不提供:
- 有保证的吞吐量或并发性。
- 超出有限窗口的归档或历史状态。
- 网络拥塞时的优先访问。
- 凌晨两点出问题时的支持渠道。
免费端点是共享基础设施。当一个用户运行重型扫描时,该端点上的所有人都会受到影响。这就是免费套餐适合学习但生产环境有风险的核心原因。
用真实调用测试免费 Solana API
在将代码提交到端点之前,先运行一些检查。首先使用 curl 对 OnFinality 公共 Solana 端点进行基本健康探测:
curl -s 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}。接下来,确认你可以读取账户并获取最近的区块哈希,这是大多数交易流程所需要的:
curl -s https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getLatestBlockhash","params":[{"commitment":"confirmed"}]}'
如果你使用 JavaScript,同样的调用可以通过 @solana/web3.js 工作:
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection("https://solana.api.onfinality.io/public", "confirmed");
const slot = await connection.getSlot();
const balance = await connection.getBalance(new PublicKey("11111111111111111111111111111111"));
console.log({ slot, balance });
对于订阅,使用 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: "logsSubscribe",
params: [{ mentions: ["11111111111111111111111111111111"] }, { commitment: "confirmed" }]
}));
};
ws.onmessage = (event) => console.log(event.data);
针对候选端点运行这些测试,并记录响应时间、错误率,以及并行负载下是否出现 429 响应。这些数据(而非营销文案)才能告诉你免费套餐是否合适。
链设置一览
如果你要将 Solana 接入钱包或配置文件,请确保这些值与你要定位的网络一致。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 |
对于 devnet 工作,请使用 Solana Devnet 网络页面 确认正确的端点,然后再将测试指向它。混合主网和 devnet URL 是“我的交易消失了”报告最常见的原因之一。
免费 Solana API 在哪里会出问题
免费端点会以可预测的方式失败。识别故障模式可以节省数小时的调试时间。
| 症状 | 可能原因 | 下一步 |
|---|---|---|
| HTTP 429 响应 | 触达共享速率限制 | 降低并发或转向付费方案 |
getProgramAccounts 超时 | 共享节点上的大型扫描 | 使用 dataSlice 过滤或转向专用节点 |
| WebSocket 断开 | 空闲超时或节点重启 | 添加重连逻辑,或使用专用端点 |
sendTransaction 返回“blockhash not found” | 滞后节点提供的过期区块哈希 | 刷新区块哈希并重试 |
| 槽高度不一致 | 节点落后于链尖 | 对照第二个端点检查 getSlot |
| 缺少历史数据 | 免费套餐无归档访问 | 使用支持归档的提供商 |
如果你在同一周内看到其中两个或更多症状,免费套餐就不再是合适的工具。这是评估付费共享方案或专用 Solana 节点的信号,而不是添加更多重试逻辑。
从免费转向生产级 Solana API
当你决定升级时,将其视为迁移而非切换。一份简短的清单可以防止你用一种问题换另一种问题。
- 清点你的方法。 列出你的应用调用的每个 JSON-RPC 方法,包括 WebSocket 订阅。归档和追踪方法通常需要与标准读取不同的方案。
- 衡量峰值,而非平均值。 免费套餐通常能承受平均负载,但在峰值时失败。按峰值并发和请求速率来规划规模。
- 决定共享还是专用。 共享方案适合大多数 dApp 和后端。专用 Solana 节点适合索引器、交易系统以及需要可预测吞吐量和隔离的团队。有关区别,请参阅 专用节点。
- 规划故障转移。 在客户端中配置至少两个端点,这样单个提供商的问题不会导致应用宕机。
- 添加监控。 跟踪错误率、p95 延迟和 WebSocket 重连次数。对变化而非绝对值设置警报。
- 切换前测试。 在 staging 环境中针对新端点运行完整的方法清单,然后逐步转移生产流量。
OnFinality 提供 Solana RPC API 访问和专用节点基础设施,因此你可以从共享方案开始,随着工作负载增长转向专用节点。在提交之前,请查看 RPC 定价 和 支持的 RPC 网络 列表以确认当前覆盖范围。
在共享和专用 Solana 访问之间选择
决策通常归结为你需要对吞吐量和隔离有多少控制权。
- 共享 RPC 方案 对于具有中等、突发流量的 dApp、钱包和后端来说具有成本效益。你获得一个托管端点,其限制高于免费套餐,而无需运行节点。
- 专用 Solana 节点 为你的团队提供一个不与其他客户共享的节点。它们适合索引器、做市商以及有严格延迟或数据完整性要求的团队。
- 自托管节点 提供最大控制权,但需要硬件、监控和升级工作。许多团队从自托管开始,一旦运营成本超过节省的费用,就转向托管基础设施。
如果你不确定哪种适合,RPC 提供商选择指南 更详细地介绍了评估标准。
关键要点
- 免费 Solana API 是通过 HTTP 和 WebSocket 提供的共享 JSON-RPC 端点,适合原型、学习和轻量读取。
- 免费套餐有速率限制,通常缺乏归档访问、有保证的吞吐量和支持。
- 在基于任何端点构建之前,用
getHealth、getLatestBlockhash和 WebSocket 订阅进行测试。 - 注意 429、
getProgramAccounts超时和 WebSocket 断开,这些是升级的信号。 - 当峰值负载、数据完整性或隔离成为需求时,转向付费共享方案或专用 Solana 节点。
- 保持主网和 devnet 端点分离,并始终配置故障转移。
常见问题
免费 Solana API 对生产环境安全吗?
对于大多数生产应用来说,不安全。免费端点共享且有速率限制,没有吞吐量保证或支持渠道。它们最适合原型、测试和低流量内部工具。生产应用应使用付费共享方案或专用节点。
免费 Solana API 和付费 API 有什么区别?
付费方案通常增加更高的速率限制、更好的隔离、归档或历史数据访问、拥塞时的优先级以及支持渠道。JSON-RPC 方法相同;区别在于容量、可靠性和责任。
我可以使用免费 Solana API 进行 WebSocket 订阅吗?
可以,但预计会出现断开和空闲超时。构建重连逻辑,避免将任何面向用户的内容依赖于单个免费 WebSocket。对于持续订阅,请使用付费或专用端点。
OnFinality 提供免费 Solana API 吗?
OnFinality 提供公共 Solana RPC 端点供入门使用,以及用于生产工作负载的付费共享方案和专用 Solana 节点。查看 Solana 网络页面 和 RPC 定价 了解当前选项。
为什么 getProgramAccounts 在免费端点上失败?
这是一个昂贵的调用,会扫描许多账户。共享免费节点通常会超时或拒绝它。使用 dataSlice 和过滤器来缩小查询范围,或转向具有归档访问权限的专用节点。
在使用免费 Solana API 之前如何测试它?
发送 getHealth 请求,获取最近的区块哈希,读取一个已知账户,并打开一个简短的 WebSocket 订阅。在并行负载下测量错误率和延迟,而不仅仅是单个请求。