摘要
# Solana RPC API:开发者指南 Solana RPC API 是与 Solana 区块链交互的主要接口。它提供了一组 JSON-RPC 方法,允许开发者读取网络状态、发送交易、模拟执行以及订阅实时更新。无论你是在构建 DeFi 应用、钱包还是 NFT 市场,RPC API 都是你通往 Solana 集群的门户。 本指南涵盖了核心概念、可用方法以及有效使用 Solana RPC API 的最佳实践。我们还将讨论如何为生产工作负载在公共端点和托管 RPC 服务之间做出选择。
关键要点
- Solana RPC API 使用 JSON-RPC 2.0 协议,通过 HTTP 和 WebSocket 实现请求-响应和订阅方法。
- 像 api.mainnet.solana.com 这样的公共端点有速率限制,不适合生产应用。
- 关键的 RPC 方法包括 getAccountInfo、getBalance、getTransaction、sendTransaction 和 getProgramAccounts。
- 状态确认级别(processed、confirmed、finalized)控制数据被视为最终确认的时效性。
- 对于生产环境,使用像 OnFinality 这样的托管 RPC 提供商,以获得专用节点、更高吞吐量和可靠运行时间。
- WebSocket 订阅支持账户、日志和交易的实时更新。
- 通过缓存响应、批量请求以及尽可能避免轮询来优化 RPC 使用。
什么是 Solana RPC API?
Solana RPC API 是一个 JSON-RPC 2.0 接口,允许应用与 Solana 节点通信。它公开了用于查询账户余额、检索交易历史、发送交易以及通过 WebSocket 订阅事件的方法。与 Solana 区块链的每一次交互——无论是来自钱包、dApp 还是后端服务——都通过 RPC 端点进行。
Solana 的架构专为高吞吐量设计,RPC API 通过针对性能优化的方法反映了这一点。然而,公共 RPC 端点是共享基础设施,并带有可能阻碍生产应用的速率限制。为了可靠访问,许多开发者转向像 OnFinality 这样的托管 RPC 提供商。
- 通过 HTTP POST 使用 JSON-RPC 2.0 进行请求-响应调用
- 用于实时订阅的 WebSocket 连接
- 支持主网、开发网和测试网集群
- 方法涵盖账户、代币、交易、区块和集群信息
Solana RPC 端点和集群
Solana 运行三个公共集群:mainnet-beta、devnet 和 testnet。每个集群都有一个公共 RPC 端点,但这些端点有速率限制,不建议用于生产环境。官方端点是:
对于开发和测试,开发网和测试网提供免费访问,并配有测试 SOL 的水龙头。生产应用应使用专用 RPC 提供商以确保可靠性和可扩展性。
- List the exact RPC methods, chains, and environments your app will call.
- Test with the same request pattern your frontend, backend, bot, dashboard, or indexer will use.
- Check whether archive, trace, WebSocket, testnet, analytics, or dedicated-node access is actually required.
- Review pricing, usage visibility, and upgrade paths before moving sustained traffic.
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| 集群 | 公共端点 | 用于测试或轻度使用 |
| 主网 | https://api.mainnet.solana.com | 使用真实 SOL 的生产网络 |
| 开发网 | https://api.devnet.solana.com | 开发者测试,可从水龙头获取免费 SOL |
| 测试网 | https://api.testnet.solana.com | 验证者测试,稳定性较低 |
关键的 Solana RPC 方法
每个方法接受参数并返回 JSON 响应。例如,getBalance 接受 base58 编码的公钥并返回 lamport 余额。始终查看官方文档以了解参数详情和响应格式。
- 账户:getAccountInfo、getBalance、getMultipleAccounts
- 交易:getTransaction、sendTransaction、simulateTransaction
- 代币:getTokenAccountBalance、getTokenAccountsByOwner、getTokenSupply
- 区块:getBlock、getBlocks、getBlockHeight
- 集群:getEpochInfo、getSlot、getHealth
- 程序:getProgramAccounts(重型方法,请配合过滤器使用)
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| Cluster | Public Endpoint | Use for testing or light usage |
| Mainnet | https://api.mainnet.solana.com | Production network with real SOL |
| Devnet | https://api.devnet.solana.com | Developer testing with free SOL from faucet |
| Testnet | https://api.testnet.solana.com | Validator testing, less stable |
状态确认和最终性
Solana RPC 方法接受一个可选的 commitment 参数,用于控制数据必须被确认的时效性。三个级别是:
选择合适的确认级别对你的应用至关重要。例如,钱包可能使用 'confirmed' 来获取交易状态,而区块浏览器可能使用 'finalized' 来获取历史数据。
- Accounts: getAccountInfo, getBalance, getMultipleAccounts
- Transactions: getTransaction, sendTransaction, simulateTransaction
- Tokens: getTokenAccountBalance, getTokenAccountsByOwner, getTokenSupply
- Blocks: getBlock, getBlocks, getBlockHeight
- Cluster: getEpochInfo, getSlot, getHealth
- Programs: getProgramAccounts (heavy method, use with filters)
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| 确认级别 | 描述 | 速度与最终性之间的权衡 |
| processed | 节点最新的区块(可能被回滚) | 最快,但非最终 |
| confirmed | 集群投票的区块(超级多数) | 对大多数应用来说平衡良好 |
| finalized | 整个集群确认的区块(>= 32 次确认) | 最高安全性,速度较慢 |
WebSocket 订阅
除了 HTTP 方法,Solana RPC API 还支持用于实时更新的 WebSocket 订阅。你可以订阅账户变更、程序日志、交易确认和插槽更新。这比轮询更高效。
要使用订阅,请连接到 WebSocket 端点(例如 wss://api.mainnet.solana.com)并发送 JSON-RPC 订阅请求。服务器将推送通知,直到你取消订阅。
- accountSubscribe:当账户数据发生变化时通知
- logsSubscribe:监听程序日志
- signatureSubscribe:当交易被确认时获得通知
- slotSubscribe:当产生新插槽时接收更新
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| Commitment | Description | Trade-off between speed and finality |
| processed | Node's most recent block (may be rolled back) | Fastest, but not final |
| confirmed | Block voted by cluster (supermajority) | Good balance for most apps |
| finalized | Block confirmed by full cluster (>= 32 confirmations) | Maximum safety, slower |
使用 Solana RPC API 的最佳实践
对于高吞吐量应用,考虑使用专用节点。OnFinality 提供具有隔离资源的专用 Solana 节点,确保即使在重负载下也能保持一致的性能。
- 避免轮询不常变化的数据;改用 WebSocket 订阅。
- 缓存 getProgramAccounts 和 getSignaturesForAddress 等昂贵方法的响应。
- 尽可能使用 JSON-RPC 批量调用进行批量请求。
- 使用托管 RPC 提供商进行生产,以避免速率限制并确保运行时间。
- 监控你的 RPC 使用情况,并为错误率或延迟峰值设置警报。
- 在部署到主网之前先在开发网上进行测试。
选择 Solana RPC 提供商
公共 RPC 端点适合开发,但不足以用于生产。托管提供商提供更高的速率限制、专用节点、增强的 API 和支持。评估提供商时,请考虑:
OnFinality 提供 Solana RPC 端点,具有灵活的方案,包括共享和专用节点选项。你可以通过免费层快速入门,并随着应用的增长进行扩展。
- Avoid polling for data that changes infrequently; use WebSocket subscriptions instead.
- Cache responses for expensive methods like getProgramAccounts and getSignaturesForAddress.
- Batch requests when possible using JSON-RPC batch calls.
- Use a managed RPC provider for production to avoid rate limits and ensure availability.
- Monitor your RPC usage and set up alerts for error rates or latency spikes.
- Test on devnet before deploying to mainnet.
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| 特性 | 为何重要 | 对你的应用的影响 |
| 速率限制 | 允许的每秒请求数 | 限制你的吞吐量 |
| 运行时间 support terms | 保证的可用性 | 用户的可靠性 |
| 专用节点 | 隔离的基础设施 | 一致的性能 |
| 增强的 API | 超出标准 RPC 的额外端点 | 简化开发 |
| 全球覆盖 | 端点的地理分布 | 全球更低的延迟 |
Choosing a Solana RPC Provider
Public RPC endpoints are fine for development but insufficient for production. Managed providers offer higher rate limits, dedicated nodes, enhanced APIs, and support. When evaluating providers, consider:
OnFinality provides Solana RPC endpoints with flexible plans, including shared and dedicated node options. You can get started quickly with a free tier and scale as your application grows.
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| Feature | Why It Matters | Impact on your app |
| Rate limits | Requests per second allowed | Limits your throughput |
| support and monitoring options | documents availability | Reliability for users |
| Dedicated nodes | Isolated infrastructure | Consistent performance |
| Enhanced APIs | Additional endpoints beyond standard RPC | Simplify development |
| Global coverage | Geographic distribution of endpoints | Lower latency worldwide |
常见问题
Solana RPC HTTP 和 WebSocket 方法有什么区别?
HTTP 方法是请求-响应模式:你发送请求并得到响应。WebSocket 方法允许你订阅事件,并在数据变化时接收推送通知,这对于实时更新更高效。
如何在 Solana 开发网上获取免费 SOL 进行测试?
你可以使用 Solana 水龙头 https://faucet.solana.com 请求开发网 SOL。一些 RPC 提供商也提供水龙头端点。
什么是 Solana 上的“重型”RPC 方法?
像 getProgramAccounts 这样的重型方法会消耗大量节点资源,因为它们会扫描大型账户空间。始终使用过滤器(例如按数据大小或所有者)来限制结果集。
我可以在生产环境中使用公共 Solana RPC 端点吗?
公共端点有速率限制,并且所有用户共享,因此不适合生产环境。请使用像 OnFinality 这样的托管 RPC 提供商,以获得可靠、可扩展的访问。
如何通过 Solana RPC API 发送交易?
使用 sendTransaction 方法,并传入 base58 或 base64 编码的已签名交易。如果成功,该方法将返回交易签名。