摘要
Stellar RPC 让你能够实时访问 Stellar 网络数据,用于 Soroban 智能合约、账户余额和交易提交。不同提供商在网络覆盖、归档支持、专用节点访问和定价方面有所差异,因此正确选择取决于你的应用工作负载。
本指南介绍了什么是 Stellar RPC、需要比较的功能,以及如何在做出承诺之前测试提供商性能。它还涵盖了常见陷阱,例如依赖 RPC 获取历史数据,或在给定任务中使用错误的网络。
Stellar RPC 提供商决策清单
在比较提供商之前,先明确你的应用对 Stellar RPC 的需求。以下清单涵盖了大多数团队需要做的决策。
- 确认你需要哪些网络:Mainnet、Testnet 或 Futurenet。有些提供商只提供其中一种或两种。
- 决定你是否需要归档数据。如果你的应用显示账本历史,检查提供商是否支持
getLedgers归档方法。 - 估算你的流量。共享公共端点可能适合开发,但生产环境的 Soroban 应用通常需要私有端点或专用节点。
- 使用真实请求进行测试。调用你在生产中会使用的相同 JSON-RPC 方法,而不只是健康检查。
- 查看速率限制和公平使用政策。公共端点通常比专用选项有更严格的限制。
- 检查 SDK 兼容性。Stellar SDK(
stellar-sdk、soroban-client)应能直接使用提供商端点,无需自定义包装。 - 规划故障转移。多个端点或具有冗余路由的提供商可以减少单点故障的机会。
- 将定价与你的预期用量进行比较,包括任何归档或 WebSocket 附加功能。
如果你还在比较通用 RPC 提供商的权衡,请参阅 如何选择 RPC 提供商。要查看支持的链和端点类型的完整列表,请查看 受支持的 RPC 网络 页面。
什么是 Stellar RPC?
Stellar RPC 是一种 JSON-RPC API,让应用能够实时访问 Stellar 网络数据。它最初以 Soroban RPC 的名称推出,用于支持 Soroban 智能合约,并于 2024 年底更名为 Stellar RPC。如今,它是以下操作的标准方式:
- 查询当前账本和网络状态
- 读取账户、合约和资产的账本条目
- 提交交易并跟踪其状态
- 获取智能合约事件和模拟
Stellar RPC 有意比 Horizon 更轻量。它公开了一小组方法,并保持有限时间窗口的近期历史记录,默认约为七天。它不是 Horizon 的替代品,也不是历史数据的索引器。在评估提供商时,这一区别很重要,因为归档支持是与普通 RPC 访问分开的一项能力。
如果你想了解协议本身,官方 Stellar RPC 文档 和 stellar-rpc GitHub 仓库 是不错的参考资料。不过,在比较托管选项时,以下标准比底层服务器实现更重要。
如何在 Stellar RPC 提供商之间进行比较
在评估 Stellar RPC 提供商时,可将此表作为起点。
| 标准 | 要检查的内容 | 为什么重要 |
|---|---|---|
| 网络覆盖 | Mainnet、Testnet、Futurenet | 你需要一个与部署环境匹配的提供商。 |
| 归档数据 | 是否支持 getLedgers 以及历史记录可追溯多远 | 显示原始账本历史的 Soroban 应用需要支持归档的端点。 |
| 专用节点 | 是否可配置隔离节点 | 共享端点可能嘈杂;专用节点提供可预测的吞吐量。 |
| 速率限制 | 每秒/每分钟的请求数和公平使用政策 | 公共和共享端点通常受到更严格的限制。 |
| 端点可靠性 | 冗余 URL、负载均衡、故障转移行为 | 单个节点对生产流量来说是单点故障。 |
| 工具和 SDK | 与 stellar-sdk、soroban-client 以及常见 JSON-RPC 库的兼容性 | 不匹配会迫使你编写自定义请求层。 |
| 定价模式 | 按需付费、订阅或按方法计费 | 归档和大量 getEvents 流量可能大幅改变成本。 |
许多相同的标准适用于任何链,但 Stellar 有一些独特的角度。首先,由于 RPC 是 Soroban 合约的主要接口,你的提供商选择直接影响到你发送合约调用和跟踪交易的可靠性。其次,普通 RPC 与归档 RPC 之间的区别对 Stellar 来说仍然较新,因此并非每个提供商都支持 getLedgers。Stellar 网络页面 显示了 OnFinality 提供的 mainnet RPC、归档支持和专用节点选项,这符合许多生产团队所需的功能集。
示例:使用 cURL 查询最新账本
测试 Stellar RPC 提供商的最快方法是调用 getLatestLedger。请求遵循 JSON-RPC 2.0 格式:
curl -X POST https://stellar.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getLatestLedger","params":[]}'
成功的响应如下所示:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"hash": "8e8d0b...",
"seq": 1283922,
"ledgerCloseTime": 1699999999,
"protocolVersion": 22
}
}
seq 字段告诉你最新的账本序号,protocolVersion 告诉你节点正在运行的 Stellar 协议版本。如果请求失败,提供商可能宕机、同步落后,或阻止来自你所在区域的请求。请对你的节点或第二个提供商尝试相同请求,以缩小原因范围。
对于事务密集型应用,你还会使用 sendTransaction、getTransaction、getLedgerEntries 和 getEvents 等方法。在承诺之前测试这些方法,因为提供商实现可能在参数编码和响应格式的处理上有所不同。
使用 Stellar RPC 提供商时的常见陷阱
由于 Stellar RPC 仍是 Stellar Core 之上的一个相对较新的层,开发者经常遇到相同的问题。
将 RPC 视为索引器。 RPC 只保留有限时间窗口的历史记录。如果你的应用需要显示过去的交易或余额,你需要单独的索引解决方案或提供归档支持的提供商。要获取完整的账本历史,请询问提供商是否支持 getLedgers 方法。
忽视网络差异。 Mainnet、Testnet 和 Futurenet 具有不同的配置和数据。如果你对网络口令或 testnet 合约地址进行了硬编码,在 Testnet 上有效的交易可能在 Mainnet 上失败。
在生产环境依赖公共共享端点。 公共端点便于原型开发,但它们由许多用户共享,可能被限速或暂时不可用。生产应用应根据流量使用经过身份验证的端点或专用节点。
在构建历史功能前未检查归档支持。 Stellar 文档现在列出了具有“RPC Archive”能力的提供商。如果你需要账本历史,请选择明确支持它的提供商,而不是假设所有 RPC 提供商都支持。
在费用不足或未模拟的情况下提交交易。 Soroban 合约调用通常需要在提交前进行模拟。确保你的提供商允许你调用 simulateTransaction,并且你使用的是提供商期望的 SDK 版本。
专用节点与共享 Stellar RPC 端点
你的流量模式决定了共享端点是否足够。开发、小型钱包和低频事件监听器通常可以使用共享的公共或经过身份验证的端点。高吞吐量交易、索引管道或需要一致延迟的应用应考虑专用节点。
专用节点为你提供:
- 隔离的请求容量
- 对速率限制的更多控制
- 调整节点配置的能力
- 更少的邻居噪音影响
OnFinality 同时提供 RPC API 服务 和 专用节点。当你希望拥有运行节点的操作控制权,又不想自己管理硬件时,专用的 Stellar 节点非常有用。如果你不确定哪种选项适合你的工作负载,请通过 网络页面 联系 OnFinality 团队,并描述你的流量情况。
如何开始使用 Stellar RPC 提供商
如果你准备好试用 Stellar RPC,请从简单的工作流程开始:
- 选择支持你所需网络的提供商。
- 使用公共或免费端点运行上面的
getLatestLedger示例。 - 编写一个小脚本,向 Testnet 发送交易并轮询
getTransaction。 - 查看提供商的定价页面并估算你的每月请求量。
- 应用正常运行后,迁移到经过身份验证的端点或专用节点。
OnFinality 为 mainnet 提供托管的 Stellar RPC 端点:https://stellar.api.onfinality.io/public。查看 Stellar 网络页面 获取最新的端点详细信息以及 testnet 访问信息。有关定价指导,请参阅 RPC 定价 页面。
关键是使用与生产中预期相同的方法、负载大小和流量模式进行验证。在健康检查中看起来很快的提供商,在处理大量 getEvents 流量或大型合约模拟时可能仍然吃力。
常见问题
Stellar RPC 和 Horizon 之间有什么区别?
Stellar RPC 是一种轻量级 JSON-RPC API,专注于账本状态、智能合约和交易提交。Horizon 是一个功能更丰富的 API,支持历史查询和索引。RPC 不是 Horizon 的直接替代品。
Stellar RPC 支持 Soroban 智能合约吗?
是的。Stellar RPC 就是为了支持 Soroban 合约而构建的。它包括模拟交易、获取合约事件和读取账本条目的方法。
我能否从 Stellar RPC 提供商获取历史账本数据?
普通的 Stellar RPC 只保留有限时间窗口的近期历史。一些提供商现在通过 getLedgers 方法提供归档 RPC 支持,该方法可以返回更早的账本数据。
Stellar RPC 提供商支持哪些网络?
大多数提供商支持 Mainnet 和 Testnet,少数支持 Futurenet。在开始开发之前,务必确认提供商的网络列表。
公共 Stellar RPC 端点是否足够用于生产环境?
对于低流量应用,可能足够。对于生产级应用,你通常需要经过身份验证的端点或专用节点,以获得可预测的速率限制和可靠性。在决定之前评估你的流量需求。
关键要点
- Stellar RPC 是用于 Soroban 智能合约和账本状态的主要 JSON-RPC 接口,它不是索引器。
- 选择提供商时,比较网络覆盖、归档支持、专用节点可用性、速率限制和 SDK 兼容性。
- 使用真实方法(如
getLedgerEntries、sendTransaction和getEvents)进行测试,而不只是getHealth。 - 对
getLedgers的归档支持是一项独特的能力,并非每个提供商都提供。 - 公共共享端点适合开发;生产应用应考虑私有端点或专用节点。
- OnFinality 在其 网络页面 上列出了 Stellar RPC,并提供共享 RPC 和专用节点选项。