摘要
Solana RPC 端点让您的 dApp 读取链上状态、提交交易并订阅实时更新。本指南解释 Solana RPC 如何工作、如何连接公共和专用端点,以及在生产环境选择基础设施时应评估哪些因素。
快速建议:如何选择 Solana RPC 端点
如果您正在构建一个小脚本或在 Devnet 上测试,公共端点就足够了。如果您正在运行生产级 dApp,共享或专用 RPC 提供商可以提供更一致的性能、更高的速率限制以及用于实时订阅的 WebSocket 支持。从像 OnFinality 的 Solana RPC 这样的托管提供商开始,可以避免运行自己的验证器或 RPC 节点的运维开销。
什么是 Solana 的 RPC?
Solana RPC(远程过程调用)是让您的应用程序与 Solana 区块链通信的接口。通过 JSON-RPC,您可以查询账户余额、获取交易详情、发送已签名的交易,并订阅账户或程序更新。Solana 的 RPC API 基于 HTTP,并支持 WebSocket 用于流式更新。
与以太坊的 JSON-RPC 不同,Solana 使用自己的一套方法,例如 getBalance、getLatestBlockhash 和 sendTransaction。您使用的端点决定了服务质量:公共端点是免费的,但通常有速率限制,而托管提供商提供更高的吞吐量和可靠性。
Solana RPC 端点选项
| 端点类型 | 使用场景 | 注意事项 |
|---|---|---|
| 公共端点 | 开发、测试、低流量调用 | 有速率限制,可能不适合生产环境 |
| 共享 RPC 提供商 | 中等流量的生产 dApp | 更好的可靠性、更高的速率限制、支持 WebSocket |
| 专用节点 | 高吞吐量应用、自定义需求 | 完全控制、最高性能、成本更高 |
OnFinality 提供共享和专用 Solana RPC 选项。您可以先使用公共端点进行测试,当流量增长时再升级到专用节点。
如何连接 Solana RPC
要连接 Solana RPC,您需要一个端点 URL。OnFinality 的公共 Solana 端点是 https://solana.api.onfinality.io/public。对于 WebSocket 订阅,请使用 wss://solana.api.onfinality.io/public-ws。
以下是一个使用 curl 获取最新区块哈希的基本示例:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getLatestBlockhash"}'
在 JavaScript 中,您可以使用 @solana/web3.js 库:
import { Connection, clusterApiUrl } from '@solana/web3.js';
const connection = new Connection('https://solana.api.onfinality.io/public', 'confirmed');
async function getBalance(address) {
const balance = await connection.getBalance(address);
console.log(`Balance: ${balance / 1e9} SOL`);
}
对于 WebSocket 订阅,请使用 wss 端点:
import { Connection, PublicKey } from '@solana/web3.js';
const connection = new Connection('wss://solana.api.onfinality.io/public-ws', 'confirmed');
const account = new PublicKey('...');
connection.onAccountChange(account, (accountInfo) => {
console.log('Account changed:', accountInfo);
});
选择 Solana RPC 提供商时应评估什么
在比较 Solana 的 RPC 提供商时,请考虑以下因素:
- 吞吐量和速率限制:您每秒可以发送多少请求?公共端点通常将您限制为每秒几个请求,这对于生产环境来说太低了。
- WebSocket 支持:实时订阅需要 WebSocket 端点。检查提供商是否提供稳定的 WebSocket 连接。
- 存档数据:如果您需要历史状态,请寻找提供存档节点的提供商。
- 地理分布:对于时间敏感的应用程序,低延迟很重要。具有全球边缘节点的提供商可以减少往返时间。
- 正常运行时间和可靠性:寻找具有高可用性记录的提供商,但要警惕绝对保证。
OnFinality 的 RPC 定价 页面概述了这些选项,您可以在 网络页面 上查看支持的网络的完整列表。
使用 Solana RPC 时的常见陷阱
- 速率限制:公共端点通常在您超过限制时返回 429 错误。使用指数退避实现重试逻辑。
- 交易确认:Solana 使用
confirmed或finalized提交级别。对于大多数用例,使用confirmed,但要了解权衡。 - WebSocket 断开:WebSocket 连接可能会断开。实现重连逻辑以维护订阅。
- 区块哈希过期:交易必须引用最近的区块哈希。在发送每笔交易之前获取新的区块哈希。
调试 Solana RPC 调用
当 RPC 调用失败时,检查错误代码和消息。常见错误包括:
-32000– 服务器错误,通常是由于参数无效。-32001– 资源耗尽,例如速率限制。-32002– 不支持的方法。
使用 getHealth 方法检查节点是否健康:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'
如果您收到 ok 响应,则节点健康。如果没有,请尝试其他端点或联系您的提供商。
何时使用专用 Solana 节点
专用节点为您提供对 RPC 服务器的独占访问。这在以下情况下很有用:
- 您有超过共享限制的高吞吐量需求。
- 您需要自定义配置,例如启用特定功能。
- 您希望避免可能影响性能的嘈杂邻居。
OnFinality 为 Solana 提供 专用节点。您可以在几分钟内配置一个节点并获得专用端点。
关键要点
- Solana RPC 是与 Solana 区块链交互的标准方式。
- 公共端点适合开发,但生产应用需要可靠的托管基础设施。
- 根据吞吐量、WebSocket 支持、存档数据和地理覆盖范围评估提供商。
- OnFinality 提供共享和专用 Solana RPC 选项,并提供用于测试的公共端点。
常见问题解答
公共和专用 Solana RPC 端点有什么区别?
公共端点在许多用户之间共享,并且通常有速率限制。专用端点是专门为您的项目配置的,提供更高的性能和可靠性。
我可以免费使用 Solana RPC 吗?
是的,您可以免费使用公共端点,但由于速率限制和潜在的停机时间,它们不适合生产工作负载。
如何获取 Solana RPC 端点?
您可以使用公共端点,例如 https://solana.api.onfinality.io/public,或注册托管提供商以获得专用端点。
最好的 Solana RPC 提供商是什么?
最好的提供商取决于您的需求。比较吞吐量、WebSocket 支持和定价等因素。OnFinality 为共享和专用节点提供有竞争力的选项。
如何监控 Solana RPC 性能?
使用 Prometheus 等工具跟踪请求延迟和错误率。您也可以使用 Solana 的 getHealth 方法检查节点状态。
我可以将 WebSocket 与 Solana RPC 一起使用吗?
是的,Solana 支持 WebSocket 进行实时订阅。使用您的 RPC 提供商提供的 wss 端点。
Solana Devnet 和 Mainnet RPC 有什么区别?
Devnet 是一个测试网络,提供免费的 SOL 用于开发。Mainnet 是生产网络,拥有真实资产。使用 Solana Devnet 进行测试,使用 Mainnet 进行生产。
如何在共享和专用 Solana 节点之间选择?
如果您的应用程序流量适中,共享节点更具成本效益。如果您需要高吞吐量或自定义配置,专用节点更好。
常见的 Solana RPC 错误代码有哪些?
常见错误包括 -32000(参数无效)、-32001(资源耗尽)和 -32002(不支持的方法)。有关完整列表,请参阅 Solana 的文档。
如何开始使用 Solana RPC?
从公共端点和简单的 curl 请求开始。然后,将 @solana/web3.js 库集成到您的应用程序中。对于生产环境,请考虑像 OnFinality 这样的托管提供商。