摘要
Solana RPC 节点是暴露 Solana JSON-RPC API 的服务器,允许应用程序读取链上数据并提交交易。本文解释了 Solana RPC 节点的工作原理、如何连接到公共和专用端点,以及为生产应用选择基础设施时应评估的内容。
快速决策指南:哪种 Solana RPC 设置适合您的应用?
在深入研究端点和方法之前,先决定您希望如何消费 Solana 数据。正确的选择取决于您的工作负载,而不是哪个选项最流行。
| 工作负载 | 推荐设置 | 原因 |
|---|---|---|
| 原型开发、黑客松、低流量 | 公共 RPC 端点 | 免费、零设置,适合轻量读取 |
| 中等流量的生产应用 | 共享托管 RPC | 无需运行节点即可获得可靠的吞吐量 |
| 高吞吐量交易、索引、重型分析 | 专用节点 | 隔离容量、一致性能、自定义调优 |
| 在类似生产环境中测试 | Devnet RPC | 免费测试网,提供 SOL 水龙头用于开发 |
如果您需要可预测的性能,并且您的应用依赖 Solana RPC 调用,专用节点可以让您免受嘈杂邻居的影响。对于大多数团队来说,从托管共享 RPC 开始,在达到限制时升级到专用节点,是一条务实的路径。
什么是 Solana RPC 节点?
Solana RPC 节点是运行 Solana 客户端软件并暴露 JSON-RPC API 的服务器。应用程序使用此 API 查询账户余额、交易状态、区块数据,并提交已签名的交易。与以太坊的 JSON-RPC 不同,Solana 使用自己的 JSON-RPC 方法,具有不同的命名和响应格式。
Solana 的架构针对高吞吐量进行了优化,采用权益证明共识和称为历史证明的中央时钟。RPC 节点不是验证者;它们向客户端提供数据,并且可以以不同的配置运行,例如存储历史状态的归档节点。
Solana RPC 端点:链设置一览
当您连接到 Solana 时,需要正确的网络设置。以下是 Solana 主网和 Devnet 的关键参数。
| 设置 | 主网 | Devnet |
|---|---|---|
| 链名称 | Solana 主网 | Solana Devnet |
| 原生货币 | SOL(9 位小数) | SOL(9 位小数) |
| HTTP RPC URL | https://solana.api.onfinality.io/public | 参见 Solana Devnet |
| WebSocket URL | wss://solana.api.onfinality.io/public-ws | 参见 Solana Devnet |
| 浏览器 | https://explorer.solana.com | https://explorer.solana.com |
注意:公共端点用于测试和轻量使用。对于生产环境,请考虑使用像 OnFinality 这样的提供商提供的托管或专用 RPC。
如何连接到 Solana RPC 节点
您可以使用 curl、JavaScript 库(如 @solana/web3.js)或特定语言的 SDK 与 Solana RPC 交互。以下是一个基本的 curl 示例,用于获取最新区块高度:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getBlockHeight"}'
预期响应:
{"jsonrpc":"2.0","result":123456789,"id":1}
对于 JavaScript,使用 @solana/web3.js:
import { Connection } from '@solana/web3.js';
const connection = new Connection('https://solana.api.onfinality.io/public');
const slot = await connection.getSlot();
console.log('Current slot:', slot);
对于 WebSocket 订阅,连接到 WebSocket 端点:
const wsConnection = new Connection('wss://solana.api.onfinality.io/public-ws');
wsConnection.onAccountChange(accountPublicKey, (accountInfo) => {
console.log('Account changed:', accountInfo);
});
您最常使用的 Solana RPC 方法
Solana 的 RPC API 包括用于读取账户、交易和区块的方法。以下是一些常见方法:
| 方法 | 用途 |
|---|---|
getBalance | 获取账户的 SOL 余额 |
getAccountInfo | 获取账户数据和 lamports |
getTransaction | 按签名获取交易详情 |
getBlock | 检索区块数据 |
sendTransaction | 提交已签名的交易 |
getSignaturesForAddress | 列出地址的交易签名 |
getLatestBlockhash | 获取最新区块哈希用于交易签名 |
有关完整列表,请参阅 Solana 文档。
公共与专用 Solana RPC 节点
公共 RPC 端点很方便,但有速率限制,并且在负载下可能不可靠。专用节点提供具有专用资源的私有端点,这对于需要一致性能的生产应用至关重要。
| 因素 | 公共 RPC | 专用 RPC |
|---|---|---|
| 成本 | 免费 | 付费 |
| 速率限制 | 有 | 更高或无 |
| 性能 | 共享、可变 | 隔离、可预测 |
| 可靠性 | 取决于提供商 | 更高的正常运行时间潜力 |
| 定制化 | 无 | 可能(例如,归档、WebSocket) |
OnFinality 提供 专用 Solana 节点,您可以在几分钟内部署,并提供归档数据和 WebSocket 支持选项。
如何选择 Solana RPC 提供商
在评估 RPC 提供商时,请考虑以下标准:
- 可靠性:寻找具有正常运行时间记录的提供商,但通过您自己的监控进行验证。
- 性能:针对您的特定工作负载测试延迟和吞吐量。
- 速率限制:了解免费和付费层的限制。
- 支持:检查提供商是否为生产问题提供专门支持。
- 网络覆盖:确保提供商支持您需要的网络(主网、devnet、testnet)。
如需更深入的了解,请参阅我们的 选择 RPC 提供商指南。
常见陷阱和故障排除
以下是开发人员在使用 Solana RPC 节点时遇到的典型问题及其解决方法:
| 症状 | 可能原因 | 修复 |
|---|---|---|
429 Too Many Requests | 超出速率限制 | 升级到付费计划或使用专用节点 |
sendTransaction 超时 | 网络拥塞或交易无效 | 检查交易费用并使用最近的区块哈希重试 |
| WebSocket 断开 | 空闲连接或提供商限制 | 实现重连逻辑和心跳 |
Slot skipping | 节点落后 | 使用同步更好或归档节点的提供商 |
关键要点
- Solana RPC 节点暴露 JSON-RPC API,用于读取数据和发送交易。
- 公共端点适合测试,但生产应用需要可靠、可扩展的基础设施。
- 根据性能、速率限制和支持来评估提供商。
- OnFinality 提供共享和专用 Solana RPC 选项,支持 HTTP 和 WebSocket。
常见问题解答
Solana RPC 节点和验证者有什么区别?
验证者参与共识并产生区块。RPC 节点向客户端提供数据,不参与共识。有些节点可以同时担任两个角色,但它们是独立的角色。
我可以自己运行 Solana RPC 节点吗?
可以,您可以使用官方客户端运行 Solana 节点。但是,这需要大量的硬件和维护。像 OnFinality 这样的托管服务可以为您处理这些。
什么是归档节点?
归档节点存储区块链的完整历史状态,允许查询历史账户数据。这对于分析和索引很有用。
如何获取 devnet 的 SOL?
您可以使用 devnet 水龙头请求 SOL 用于测试。有关详细信息,请参阅 Solana Devnet 页面。
OnFinality 是否支持 Solana WebSocket?
是的,OnFinality 为 Solana 提供 WebSocket 端点,如上面的链设置所示。
有关定价和网络的更多详细信息,请访问 RPC 定价 和 支持的 RPC 网络。