Logo
新用户订阅 RPC,首月享 6.5 折优惠查看优惠
RPC Assistant

什么是公共 Solana RPC 端点,何时应该使用它?

摘要

公共 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 RPChttps://solana.api.onfinality.io/public
WebSocket RPCwss://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 是公共端点最吃力的地方。accountSubscribelogsSubscribeslotSubscribe 保持长连接,而共享基础设施在负载下往往会断开它们。

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 超时共享容量上的繁重扫描使用过滤查询或索引器;避免在公共端点上使用
读取陈旧或滞后节点落后于最新区块检查 getHealthgetSlot;故障转移到另一个端点
延迟不一致邻居干扰负载将延迟敏感的调用迁移到专用节点

何时迁移到托管或专用 Solana RPC

公共端点是起点,不是终点。迁移通常由以下之一触发:

  • 你正在向真实用户发布,无法承受发布或空投期间的 429 错误。
  • 你运行交易或清算逻辑,其中 WebSocket 断开会导致资金损失。
  • 你需要归档历史、getProgramAccounts 或公共端点不提供的跟踪式调试。
  • 你想要一个支持渠道和一个可以指向待命轮换的状态页面。

OnFinality 提供 Solana RPC 作为托管 API,并在你需要隔离容量时提供 专用节点。你可以查看 RPC 定价 和完整的 支持的 RPC 网络 列表来规划升级。Solana 网络页面 有当前的端点详细信息。

实用的迁移清单

当你决定离开公共端点时,请按顺序完成以下步骤:

  1. 外部化端点。 将 URL 移入配置或环境变量。
  2. 添加健康检查。 定期探测 getHealthgetSlot 并记录失败。
  3. 监控延迟。 跟踪每个方法的 p50 和 p95,以便公平比较提供商。
  4. 添加备用。 保留第二个端点并在重复错误时切换。
  5. 分离工作负载。 将繁重读取发送到与交易提交路径不同的端点。
  6. 负载测试。 在切换前重放真实流量。
  7. 审查数据。 比较切换前后的错误率和延迟。

关键要点

  • 公共 Solana RPC 端点是一个共享 URL,非常适合学习和原型设计,但不是为持续生产流量构建的。
  • Solana 主网使用基于 HTTP 和 WebSocket 的 JSON-RPC;OnFinality 公共端点是 https://solana.api.onfinality.io/publicwss://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 端点详细信息,并在将代码指向主网之前使用它进行测试。

RPC 知识库

相关 RPC 内容

网络 RPCMonad

关于 Monad RPC 端点,我需要了解什么?

# 关于 Monad RPC 端点,我需要了解什么? Monad RPC 端点之所以重要,是因为 Web3 应用程序依赖稳定的端点访问来进行读取、交易、仪表盘和后端工作流。正确的设置应匹配你的工作负载,支持你所需的网络和测试网,使限制可见,并在共享 RPC 不再足够时为你提供扩展路径。 对于 Mon...

网络 RPCGnosis

Gnosis API 暴露了什么,以及如何连接到它?

Gnosis API 是 Gnosis Chain 节点暴露的 JSON-RPC 接口。它允许钱包、Safe 智能账户、索引器和后端服务在一条以 xDAI 结算并运行 EVM 兼容执行层的链上读取余额、提交交易、查询日志和检查状态。 本页面涵盖了您需要的链设置、如何发出第一个请求、哪些方法对常见的 ...

测试网 RPCBitcoin

什么是比特币测试网,开发者如何使用它?

比特币测试网是一个公共区块链,它镜像了比特币主网,但使用没有实际价值的测试币。开发者可以在没有财务风险的情况下,用它来试验交易、钱包和智能合约。本文涵盖测试网设置、RPC端点、水龙头以及选择测试网RPC提供商的最佳实践。...

网络 RPCAvalanche

Avalanche RPC 节点:端点设置、提供商选项和调试

Avalanche RPC 节点公开了 C 链的以太坊兼容 JSON-RPC API,让 dApp 能够读写链上数据。本文涵盖端点配置、提供商选择以及常见故障模式,帮助你在生产环境中可靠连接。...

测试网 RPCEthereum

Sepolia RPC 端点:链设置、水龙头和开发者指南

Sepolia 是以太坊智能合约开发的主要测试网。本页面提供官方链设置、RPC 端点、水龙头链接以及常见用法模式,帮助您快速测试 dApp。无论您需要公共端点还是专用 RPC 提供商,我们都会介绍需要注意的事项。...

网络 RPCSolana

免费 Solana RPC 节点:何时足以满足你的应用需求?

免费 Solana RPC 节点是公共或共享端点,允许你在没有付费计划的情况下读取链上数据并提交交易。它们适用于原型开发、本地开发、钱包设置和低流量脚本,但通常具有共享容量、请求限制且无运营保证。本页解释了如何连接到免费 Solana 端点、在负载下首先会出现什么问题,以及何时迁移到托管或专用节点。...

永远不用担心基础设施

OnFinality 消除了 DevOps 的繁重工作,让您能够更聪明、更快地构建。

开始