摘要
# Solana API 指南:RPC 端点、方法及最佳实践 Solana API 是一个 JSON-RPC 接口,允许开发者与 Solana 区块链交互。它提供了读取网络状态、发送交易、模拟执行以及订阅实时更新的方法。本指南涵盖了核心 API 方法、如何连接到不同集群,以及为生产应用选择可靠 RPC 提供商的注意事项。
关键要点
- Solana API 使用 JSON-RPC 2.0 协议,通过 HTTP POST 和 WebSocket 进行订阅。
- 关键的 HTTP 方法包括 getBalance、getTransaction、sendTransaction 和 getProgramAccounts。
- 公共 RPC 端点有速率限制,不适合生产环境;应使用专用提供商。
- Solana 提供三个主要集群:Mainnet、Devnet 和 Testnet,各有不同用途。
- WebSocket 订阅支持账户、日志和程序的实时更新。
- 选择低延迟和高可靠性的提供商对用户体验至关重要。
- OnFinality 提供可扩展的 Solana RPC 端点,并支持生产工作负载的专用节点选项。
什么是 Solana API?
Solana API 是一个 JSON-RPC 接口,使应用程序能够与 Solana 区块链通信。它遵循 JSON-RPC 2.0 规范,支持 HTTP 和 WebSocket 传输。通过此 API,开发者可以查询账户余额、发送交易、获取区块数据以及订阅实时事件。
官方 Solana 文档提供了全面的 RPC 方法列表,但对于生产应用,由于速率限制和可靠性问题,不建议使用公共端点。相反,开发者通常使用提供专用基础设施的第三方 RPC 提供商。
- Use HTTP POST for request-response methods.
- Set
Content-Type: application/json. - Check the
errorobject in responses for RPC-specific failures.
Solana API 方法概览
Solana API 包含数十种方法,分为以下几类:账户、代币、交易、区块、集群信息和经济数据。一些最常用的方法包括:
- getBalance – 返回账户的 SOL 余额。
- getTransaction – 根据签名检索已确认的交易。
- sendTransaction – 向集群提交已签名的交易。
- getProgramAccounts – 返回某个程序拥有的所有账户。
- getLatestBlockhash – 获取用于构建交易的最新区块哈希。
- simulateTransaction – 模拟交易而不提交。
- getSlot – 返回当前槽位号。
- getBlock – 根据槽位号获取区块。
连接到 Solana 集群
Solana 运行三个主要集群:Mainnet、Devnet 和 Testnet。每个集群都有公共 RPC 端点,但这些端点是共享且受速率限制的。对于生产应用,应使用提供更高吞吐量和可靠性的专用 RPC 提供商。
公共端点如下:
Mainnet: https://api.mainnet.solana.com
Devnet: https://api.devnet.solana.com
Testnet: https://api.testnet.solana.com
- Mainnet – 使用真实 SOL 的生产网络。用于正式 dApp。
- Devnet – 开发者测试网络,可通过水龙头获取免费 SOL。适合开发和测试。
- Testnet – 验证者测试网络。用于网络性能测试。
发起您的第一个 API 调用
以下是一个使用 curl 通过公共端点调用 Solana Mainnet 上 getSlot 方法的简单示例:
curl https://api.mainnet.solana.com -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[]}'
对于生产环境,您应将公共端点替换为提供商特定的 URL。例如,使用 OnFinality 的 Solana RPC 端点:
curl https://solana.api.onfinality.io/public -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[]}'
- 1. Call
getLatestBlockhash - 2. Build and sign transaction with your keypair
- 3. Test with
simulateTransaction - 4. Submit with
sendTransaction - 5. Confirm with
getSignatureStatusesorsignatureSubscribe
WebSocket 订阅
Solana API 还支持 WebSocket 订阅以获取实时更新。您可以订阅账户变更、程序日志和槽位更新。这对于构建响应链上事件的 dApp 非常有用。
订阅账户变更的示例:
wscat -c wss://api.mainnet.solana.com
> {"jsonrpc":"2.0","id":1,"method":"accountSubscribe","params":["PUBLIC_KEY",{"commitment":"finalized"}]}
accountSubscribe– account data changeslogsSubscribe– program logsprogramSubscribe– program-owned account updatessignatureSubscribe– transaction confirmationslotSubscribe– new slot notifications
选择 Solana RPC 提供商
在选择生产级 Solana RPC 提供商时,请考虑以下标准:
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| 正常运行时间与可靠性 | 服务等级协议(support terms)和历史正常运行时间统计。 | 停机可能导致应用中断并失去用户信任。 |
| 延迟 | 端点的地理分布和响应时间。 | 低延迟可改善用户体验,尤其对于实时应用。 |
| 速率限制 | 每秒请求数(RPS)限制以及是否可根据需求扩展。 | 速率限制可能在高峰使用期间限制您的应用。 |
| 专用节点 vs 共享节点 | 提供商是否提供具有有保障资源的专用节点。 | 专用节点提供一致的性能,对于高流量应用至关重要。 |
| 网络支持 | Mainnet、Devnet 和 Testnet 端点的可用性。 | 您需要访问测试网络以进行开发和预发布。 |
为什么选择 OnFinality 的 Solana RPC?
OnFinality 提供可靠的 Solana RPC 端点,支持 Mainnet、Devnet 和 Testnet。我们的基础设施专为生产工作负载设计,具有低延迟和高可用性。无论您需要共享公共端点还是专用节点,OnFinality 都提供灵活的选项以满足您的规模需求。
立即使用免费 API 密钥开始体验 OnFinality 带来的性能和可靠性。
- Test the exact request patterns your frontend and backend will use.
- Confirm WebSocket access if you use subscriptions.
- Check archive support if you need historical data beyond recent slots.
- Verify rate limits and upgrade paths for sustained traffic.
- Use devnet for staging and test SOL from the official faucet.
- Monitor error rates, latency, and usage before full rollout.
常见问题
什么是 Solana API?
Solana API 是一个 JSON-RPC 接口,允许开发者与 Solana 区块链交互。它提供了查询网络状态、发送交易和订阅实时事件的方法。
如何获取 Solana API 密钥?
您可以从 OnFinality 等提供商处获取免费 API 密钥。只需注册并创建 API 密钥即可访问 Solana RPC 端点。
Solana Mainnet、Devnet 和 Testnet 之间有什么区别?
Mainnet 是使用真实 SOL 的生产网络。Devnet 供开发者使用免费 SOL 测试应用。Testnet 用于验证者测试和网络性能。
我可以在生产环境中使用公共 Solana RPC 端点吗?
公共端点有速率限制且是共享的,不适合生产环境。请使用专用 RPC 提供商以获得可靠、可扩展的访问。
最常见的 Solana API 方法有哪些?
常见方法包括 getBalance、getTransaction、sendTransaction、getProgramAccounts、getLatestBlockhash 和 getSlot。