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

solana.io:开发者连接 Solana 真正需要什么

摘要

solana.io 并不是你需要的 Solana RPC 端点或开发者门户。Solana 网络通过 JSON-RPC 端点访问,实际问题是你的应用应该指向哪个端点。本文解释了域名混淆,展示了真实的 Solana mainnet RPC 和 WebSocket URL,并帮助你决定是使用公共端点还是专用节点基础设施。

你将获得一个可用的连接示例、公共访问与专用访问的对比,以及针对最常见 Solana RPC 故障的调试路径,以便从首次请求过渡到生产就绪的设置。

solana.io 是什么,以及不是什么

如果你在浏览器或配置文件中输入 solana.io,期望得到一个 Solana RPC 端点,那么你遇到了命名冲突。域名 solana.io 不是 Solana 的官方开发者门户,也不是你可以向其 POST 请求的 JSON-RPC 端点。Solana 网络通过暴露 HTTP 和 WebSocket 端点的 RPC 提供商访问,官方开发者文档位于 Solana 文档站点,而不是一个 .io 域名。

实际结论:不要再寻找 solana.io 作为端点。你真正需要的是一个 Solana mainnet 或 devnet RPC URL、正确的传输方式(HTTP 用于请求/响应,WebSocket 用于订阅),以及决定共享公共端点是否足够,还是你的工作负载需要专用容量。

本文直接回答这个问题,然后介绍连接设置、一个可用的请求,以及当 Solana 端点未针对你的流量进行规模调整时出现的故障模式。

你应该指向哪个 Solana 端点?

在复制任何 URL 之前,将端点与环境和工作负载匹配。下表是最快的决定方式。

你的情况环境传输推荐访问
第一个脚本,学习 JSON-RPCDevnetHTTP公共 devnet 端点
钱包或 dApp 测试DevnetHTTP + WebSocket公共或共享端点
生产 dApp 读取MainnetHTTP共享或专用 RPC
实时账户或 slot 更新MainnetWebSocket支持 WS 的端点
高请求量或索引MainnetHTTP + WebSocket专用节点
延迟敏感的交易或机器人MainnetHTTP + WebSocket专用节点,同地部署

两条规则让你远离麻烦。第一,永远不要将生产流量指向 devnet 端点,也永远不要将测试指向 mainnet。第二,如果你的应用打开 WebSocket 订阅,在发布前确认端点声明支持 WebSocket。

OnFinality 通过 HTTP 和 WebSocket 暴露 Solana mainnet,因此同一个提供商可以覆盖请求/响应调用和基于订阅的流程。你可以在 Solana RPC 网络页面 查看网络详情,并在仍在构建时使用 Solana Devnet

Solana 链设置一览

当你配置钱包、框架或自定义客户端时,以下是 Solana mainnet 的重要值。

设置
链名称Solana Mainnet
原生货币SOL(9 位小数)
HTTP RPChttps://solana.api.onfinality.io/public
WebSocket RPCwss://solana.api.onfinality.io/public-ws
区块浏览器https://explorer.solana.com

注意,Solana 不像以太坊网络那样使用 EVM 风格的数值链 ID。如果某个工具要求链 ID,请查看该工具的 Solana 特定文档,而不是猜测一个数字。

对于 devnet 工作,将 devnet 和 mainnet 配置保存在单独的环境变量中,这样复制粘贴错误就不会将测试交易发送到 mainnet。

# .env
SOLANA_MAINNET_RPC=https://solana.api.onfinality.io/public
SOLANA_MAINNET_WS=wss://solana.api.onfinality.io/public-ws
SOLANA_DEVNET_RPC=<your-devnet-endpoint>

一个可用的 Solana JSON-RPC 请求

Solana 使用基于 HTTP 的 JSON-RPC。下面的示例获取当前 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"}]
  }'

健康的响应看起来像一个 JSON 对象,其中 result 字段包含一个数字。如果你得到的是错误对象,请跳转到下面的调试部分。

使用 fetch 的 JavaScript 相同调用:

const res = await fetch("https://solana.api.onfinality.io/public", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "getSlot",
    params: [{ commitment: "confirmed" }],
  }),
});

const data = await res.json();
console.log(data.result);

一旦基本调用正常工作,就转向你的应用实际需要的方法:getAccountInfo 用于余额和账户数据,getTransaction 用于确认检查,sendTransaction 用于写入,getProgramAccounts 用于程序范围的查询。getProgramAccounts 是最可能暴露端点能力不足的方法,因为它可能返回大量结果集。

公共端点还是专用节点?

这是决定你的应用随着使用增长是否保持响应的决策。公共或共享端点适用于开发、低流量脚本和早期测试。当你的流量可预测但很大时,当你需要一致地访问 WebSocket 订阅时,或者当你运行发出许多并发调用的索引器和机器人时,专用节点就有意义。

你已经超出共享端点的信号:

  • 在高峰时段看到间歇性的 429 响应。
  • WebSocket 订阅频繁断开和重连。
  • getProgramAccounts 或大型 getTransaction 批次超时。
  • 你的 p95 延迟在一天中变化很大。
  • 你需要为发布或交易窗口提供可预测的容量。

如果其中两个或更多适用,请评估专用容量。OnFinality 为需要隔离资源的团队提供 专用节点,你可以在 RPC 定价页面 比较访问层级。有关涵盖归档访问、trace 方法和故障转移的更广泛框架,请参阅 如何选择 RPC 提供商

常见 Solana RPC 故障的调试路径

当调用失败时,错误通常指向少数几个原因之一。在更换提供商之前,请先处理此表。

症状可能原因下一步
429 Too Many Requests共享端点上的速率限制降低并发或迁移到专用容量
Method not found该端点未启用该方法与提供商确认方法支持
getProgramAccounts 超时结果集大,端点限制添加过滤器、分页或使用更强的端点
WebSocket 断开订阅限制或网络不稳定添加重连逻辑,确认 WS 支持
Blockhash not found交易中的 blockhash 过期在签名前获取新的 blockhash
账户的 result 为空错误的 commitment 级别或账户尚未创建使用 confirmedfinalized 重试

两个调试习惯会带来回报。第一,记录原始 JSON-RPC 错误对象,而不仅仅是 HTTP 状态,因为 Solana 在响应体中返回有用的错误代码。第二,对第二个端点测试相同的调用,以区分应用程序错误和端点问题。

如果你特别关注速率限制和身份验证问题,Solana RPC 访问文章 会更深入地探讨这些故障模式。

Commitment 级别及其为何改变结果

Solana 允许你选择响应必须达到的最终性程度。这会影响正确性和延迟。

  • processed 返回最快但最不稳定的数据。
  • confirmed 是面向用户读取的常见默认值。
  • finalized 对于任何不可逆的操作(如存入存款)是最安全的。

一个常见的错误是在 processed 级别读取余额并将其视为最终。对于任何涉及价值转移的操作,请在 confirmedfinalized 级别读取,并在每次调用中明确指定 commitment,而不是依赖默认值。

通过 WebSocket 运行订阅

实时功能(如监视账户或跟踪 slot)需要 WebSocket 连接。Solana 通过 WebSocket 传输暴露订阅方法,如 accountSubscribeslotSubscribe

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(JSON.parse(event.data));
};

生产订阅代码应包括带退避的重连逻辑、用于检测死连接的心跳,以及每个客户端同时订阅数量的上限。静默停止传递更新的丢失订阅是最难注意到的错误之一,因此请监控消息到达,而不是假设套接字健康。

关键要点

  • solana.io 不是 Solana RPC 端点或官方开发者门户;请改用真实的 JSON-RPC URL。
  • Solana mainnet 可通过 HTTP 访问 https://solana.api.onfinality.io/public,通过 WebSocket 访问 wss://solana.api.onfinality.io/public-ws
  • 将端点与环境匹配:devnet 用于构建,mainnet 用于生产,切勿混用两者。
  • 有意识地选择 commitment 级别;对于任何涉及价值转移的操作,使用 confirmedfinalized
  • 当你看到持续的 429、订阅丢失或大型查询超时时,从共享容量迁移到专用容量。
  • 记录原始 JSON-RPC 错误体,并对第二个端点进行测试,以区分应用错误和端点限制。

常见问题

solana.io 是官方的 Solana RPC 端点吗?

不是。solana.io 不是 JSON-RPC 端点。Solana 通过暴露 HTTP 和 WebSocket URL 的 RPC 提供商访问,官方开发者文档位于 Solana 文档站点。

Solana mainnet RPC URL 是什么?

OnFinality 通过 HTTP 暴露 Solana mainnet:https://solana.api.onfinality.io/public,通过 WebSocket:wss://solana.api.onfinality.io/public-ws。你可以在 Solana RPC 网络页面 查看网络。

我需要为 Solana 使用 WebSocket 端点吗?

仅当你的应用使用订阅(如 accountSubscribeslotSubscribe)时才需要。如果你只进行请求/响应调用,HTTP 就足够了。如果你需要实时更新,请在发布前确认端点支持 WebSocket。

我什么时候应该从公共 Solana 端点迁移?

当你看到持续的速率限制错误、WebSocket 订阅丢失或大型查询(如 getProgramAccounts)超时时。此时,评估 专用节点 并在 RPC 定价页面 比较层级。

如何快速测试 Solana 端点?

使用 curl 发送 getSlot 请求,如上所示。数字 result 确认端点可达并响应;错误对象告诉你检查方法、commitment 或速率限制。

在哪里可以看到 OnFinality 支持的所有网络?

完整列表在 支持的 RPC 网络 页面上,包括 Solana mainnet 和 devnet。

下一步

首先将测试脚本指向 Solana mainnet 端点并确认 getSlot 响应。然后添加你的应用所需的方法,设置明确的 commitment 级别,如果你使用订阅,则添加 WebSocket 重连逻辑。当你的流量增长到共享端点无法轻松处理时,查看 专用节点RPC 定价,并在扩展到其他链时保留 支持的 RPC 网络 页面。

RPC 知识库

相关 RPC 内容

区块链基础设施

什么是区块链节点基础设施,何时应租用而不是自行运行?

区块链节点基础设施是维持区块链网络运行的硬件、软件和网络。它包括全节点、归档节点和验证器,每种都有不同的存储和计算需求。运行自己的节点可以让你掌控一切,但也带来了同步、监控和扩展等运维负担。像 OnFinality 这样的托管 RPC 服务提供了可靠的节点基础设施访问,而无需自行托管的负担。...

RPC 提供商选择Optimism

如何为你的 dApp 选择合适的 Optimism RPC 提供商

选择合适的 Optimism RPC 提供商对于 dApp 的性能和可靠性至关重要。本指南涵盖了关键评估标准、提供商类型以及实际设置步骤,帮助你在生产环境中做出明智的决策。...

网络 RPCStellar

What Is Stellar RPC and How to Use It for Your dApp?

Stellar RPC refers to the remote procedure call interface that allows applications to interact with the Stellar blockchain. Unlike Ethereum, Stellar u...

网络 RPCSolana

最新的 Solana RPC 更新有哪些,它们如何影响您的 dApp?

Solana RPC 更新包括新的 JSON-RPC 方法、现有端点的更改,以及公共和托管基础设施处理负载的方式的变化。及时了解这些更新很重要,因为 Solana 的高吞吐量和频繁的功能发布可能会改变您查询账户、提交交易和订阅实时数据的方式。 本文涵盖最新的 Solana RPC 更改、如何在 de...

RPC 故障排查

什么是加密中的 nonce?

# 什么是加密中的 nonce? Nonce(“一次性使用的数字”)是在加密通信中仅使用一次的独特任意数字。在像以太坊这样的区块链网络中,nonce 是一个顺序计数器,确保来自给定地址的交易按顺序处理,并防止重放攻击。每笔交易的 nonce 必须比同一账户的上一笔交易高 1;否则,网络会拒绝该交易。...

区块链基础设施Kusama

Kusama 验证人:要求、设置和运营权衡

了解运行 Kusama 验证人所需的条件,从硬件和质押要求到节点设置和持续运营。比较自托管与托管基础设施,并了解风险,包括削减和佣金。为新手和经验丰富的验证人提供实用指导。...

永远不用担心基础设施

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

开始