摘要
Solana RPC 端点是您的 dApp 或验证器用来向 Solana 网络发送 JSON-RPC 请求的 URL。本页介绍主网和开发网端点、如何在代码中配置它们,以及如何调试常见的连接问题。对于生产环境的工作负载,OnFinality 提供的托管或专用 RPC 端点可提供可靠性和可扩展性。
快速决策指南:您应该使用哪个 Solana RPC 端点?
在深入配置之前,请决定哪种端点类型适合您的用例:
- 公共 RPC 端点(如
https://solana.api.onfinality.io/public)是免费的,适用于开发、测试和低流量应用。它们有速率限制且是共享的,因此不适合生产环境的工作负载。 - 托管 RPC 端点来自 OnFinality 等提供商,提供更高的速率限制、WebSocket 支持以及生产级 dApp 的可靠性。对于大多数项目来说,这是一个很好的中间选择。
- 专用 Solana 节点为您提供私有、隔离的端点,无共享且完全可控。对于高吞吐量应用、验证器或需要一致性能的场景,请选择此选项。
如果您正在构建生产应用,请跳过公共端点,直接使用托管或专用解决方案。查看 RPC 定价 和 支持的网络 以了解您的选项。
什么是 Solana RPC 端点?
Solana RPC 端点是一个接受通过 HTTP 或 WebSocket 发送的 JSON-RPC 请求的 URL。它充当您的应用程序与 Solana 区块链之间的网关。每笔交易、账户查询和程序调用都通过 RPC 端点进行。
Solana 的 RPC API 基于 JSON-RPC 2.0。您发送一个带有方法和参数的 POST 请求,端点返回结果或错误。WebSocket 端点允许您订阅账户变更、程序日志和交易确认。
Solana 主网和开发网端点
Solana 有多个集群。最常见的两个是 mainnet-beta(生产)和 devnet(开发)。以下是 OnFinality 的官方公共端点:
| 集群 | HTTP 端点 | WebSocket 端点 |
|---|---|---|
| 主网 | https://solana.api.onfinality.io/public | wss://solana.api.onfinality.io/public-ws |
| 开发网 | 参见 Solana 开发网 | 参见 Solana 开发网 |
注意: 公共端点有速率限制且是共享的。对于生产环境,请使用 OnFinality 提供的托管或专用端点。
如何连接 Solana RPC 端点
您可以使用 curl、JavaScript 库(如 @solana/web3.js)或任何 HTTP 客户端与 Solana RPC 端点交互。以下是一个基本的 curl 示例,用于获取最新的区块哈希:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getLatestBlockhash"}'
响应将如下所示:
{
"jsonrpc": "2.0",
"result": {
"blockhash": "5xYk...",
"lastValidBlockHeight": 123456
},
"id": 1
}
使用 @solana/web3.js
对于 JavaScript dApp,@solana/web3.js 库是标准。使用您的端点配置连接:
import { Connection } from '@solana/web3.js';
const connection = new Connection('https://solana.api.onfinality.io/public', 'confirmed');
// 获取最新的区块哈希
const { blockhash } = await connection.getLatestBlockhash();
console.log(blockhash);
对于 WebSocket 订阅,请使用 WebSocket URL:
import { Connection } from '@solana/web3.js';
const wsEndpoint = 'wss://solana.api.onfinality.io/public-ws';
const connection = new Connection(wsEndpoint, 'confirmed');
// 订阅账户变更
const subscriptionId = connection.onAccountChange(
somePublicKey,
(accountInfo) => console.log(accountInfo)
);
常见的 Solana RPC 方法
Solana 的 RPC API 包含许多方法。以下是最常用的:
getBalance– 获取账户的 SOL 余额。getLatestBlockhash– 获取用于交易签名的当前区块哈希。sendTransaction– 提交已签名的交易。getTransaction– 获取交易详情。getAccountInfo– 检索账户数据。getProgramAccounts– 获取由程序拥有的所有账户。getSlot– 获取当前时隙。getBlock– 获取区块信息。getSignaturesForAddress– 列出地址的交易签名。onAccountChange(WebSocket)– 订阅账户更新。onLogs(WebSocket)– 订阅程序日志。
有关完整列表,请参阅 Solana 文档。
调试 Solana RPC 连接问题
如果您遇到连接问题,以下是常见症状和修复方法:
| 症状 | 可能原因 | 修复方法 |
|---|---|---|
429 Too Many Requests | 超出速率限制 | 使用托管或专用端点,或降低请求频率。 |
403 Forbidden | IP 被阻止或未授权 | 检查您的 API 密钥或使用公共端点。 |
| 超时 | 网络问题或端点过载 | 使用退避重试,或切换到更可靠的提供商。 |
Invalid params | JSON-RPC 请求格式错误 | 验证您的请求结构。 |
| WebSocket 断开 | 连接不稳定 | 实现重连逻辑。 |
Blockhash not found | 交易太旧 | 获取新的区块哈希并重新提交。 |
使用 curl 快速测试
要验证您的端点是否可达,请运行:
curl https://solana.api.onfinality.io/public -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'
健康的节点返回 {"result":"ok"}。
Solana RPC 的生产注意事项
当迁移到生产环境时,请考虑以下事项:
- 速率限制: 公共端点有严格的限制。托管端点提供更高的吞吐量。
- WebSocket 稳定性: 对于实时功能,请确保您的提供商支持 WebSocket 并处理重连。
- 地理延迟: 选择靠近用户的端点以减少延迟。
- 存档数据: 如果您需要历史状态,您可能需要一个存档节点。
- 故障转移: 实现多个端点和故障转移逻辑以避免停机。
OnFinality 提供 专用 Solana 节点 和 托管 RPC 服务 来解决这些问题。
关键要点
- Solana RPC 端点是向 Solana 网络发送 JSON-RPC 请求的 URL。
- 使用公共端点进行开发,但在生产环境中切换到托管或专用端点。
- 使用正确的 HTTP 或 WebSocket URL 配置您的连接。
- 通过检查速率限制、请求格式和网络稳定性来调试常见问题。
- 对于生产环境,根据速率限制、WebSocket 支持和可靠性评估提供商。
常见问题解答
Solana RPC 端点 URL 是什么?
公共主网端点是 https://solana.api.onfinality.io/public。对于 WebSocket,请使用 wss://solana.api.onfinality.io/public-ws。对于开发网,请参阅 Solana 开发网。
如何获取 Solana RPC 端点?
您可以免费使用公共端点,或注册 OnFinality 等托管 RPC 服务以获得具有更高限制的专用端点。
HTTP 和 WebSocket RPC 端点有什么区别?
HTTP 用于请求-响应调用,而 WebSocket 允许实时订阅。对于实时账户更新等功能,请使用 WebSocket。
我可以免费使用 Solana RPC 端点吗?
可以,公共端点是免费的,但有速率限制。对于生产环境,请考虑付费计划。
如何选择 Solana RPC 提供商?
根据速率限制、WebSocket 支持、正常运行时间和定价来评估提供商。请参阅我们的 Solana RPC 提供商对比 获取指导。