摘要
TON 公共节点是一个共享的 RPC 端点,允许你读取 TON 区块链数据并提交交易,而无需运行自己的节点。这是让钱包、脚本或原型与 TON 通信的最快方式,但共享端点存在速率限制、延迟波动,且没有运营保证。
本文解释了 TON RPC 与 EVM 链的区别、如何连接到公共端点、何时公共节点足够,以及何时应迁移到托管 RPC API 或专用节点以应对生产工作负载。
TON 公共节点是合适的起点吗?
TON 公共节点是一个共享的 RPC 端点,让你的应用程序无需运行自己的基础设施即可读取 TON 区块链并提交交易。它是大多数开发者的默认入口:复制一个 URL,发送请求,获得响应。无需同步、无需磁盘、无需维护服务器。
问题在于“公共”意味着共享。你是众多调用者之一,同时访问同一个端点,无法控制容量,没有服务级别协议,也无法保证你依赖的方法会一直可用。对于原型、脚本或正在测试的钱包来说,这没问题。但一旦真实用户依赖你的应用,它就会成为问题。
使用本文来判断你处于这条线的哪一侧,以及下一步该怎么做。
快速建议:公共节点、托管 RPC 还是专用节点?
| 你的情况 | 合理的起点 | 原因 |
|---|---|---|
| 学习 TON、测试钱包、运行一次性脚本 | 公共节点 | 零设置、无成本,对于低请求量足够 |
| 流量不可预测的原型或黑客松 | 先用公共节点,然后使用托管 RPC API | 快速启动,然后在演示日之前消除速率限制风险 |
| 有真实用户、后端或机器人的 dApp | 托管 RPC API | 可预测的吞吐量、监控和出问题时的支持 |
| 高容量索引、分析或交易 | 专用节点 | 隔离的容量和对所查询节点的控制 |
| 需要稳定的测试环境 | TON 测试网 RPC | 独立的网络、独立的端点,无主网副作用 |
如果你只需要回答“我的代码能在 TON 上运行吗?”,公共节点是最快的路径。如果你需要回答“我的应用在负载下能保持运行吗?”,那么你已经超越了它。
TON RPC 与 EVM 链的区别
如果你来自以太坊、BNB Chain 或 Polygon,TON 会让你感到陌生。TON 不是 EVM 链,因此你不会调用 eth_getBalance 或 eth_call。相反,TON 暴露自己的基于 HTTP 的 API 接口,并且你处理账户、发送消息和读取状态的方式不同。
在选择端点时,有几个实际差异很重要:
- 账户地址格式不同。 TON 使用自己的地址格式,同一个账户可以有多种表示形式。你的工具需要在比较或存储地址之前对其进行规范化。
- 交易是消息驱动的。 你不能像在 EVM 链上那样简单地“发送交易”。你需要构建并发送消息,网络会生成相应的交易。
- 方法名称是 TON 特有的。 不是
eth_*方法,而是使用 TON 自己的端点来处理账户状态、区块、交易和消息提交。 - 库很重要。 大多数开发者通过 TON SDK 而不是原始 HTTP 进行交互,因为 SDK 会为你处理地址解析、单元格序列化和消息构建。
因此,“我应该使用哪个 TON 公共节点?”实际上是两个问题:哪个端点,以及在其之上使用哪个客户端库。
连接到 TON 端点
OnFinality 通过 HTTP 暴露 TON RPC 端点。你可以在 TON 网络页面 上查看当前的端点详细信息。原始 JSON-RPC 风格调用的模式如下:
curl -s https://ton.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getMasterchainInfo",
"params": []
}'
对于大多数应用程序代码,你不会直接调用端点。你会将 TON SDK 指向它。典型的配置如下所示:
import { TonClient } from "@ton/ton";
const client = new TonClient({
endpoint: "https://ton.api.onfinality.io/public",
apiKey: process.env.ONFINALITY_API_KEY, // required for managed plans
});
const masterchain = await client.getMasterchainInfo();
console.log(masterchain);
有两点需要注意。首先,确切的端点路径以及是否需要 API 密钥取决于你使用的计划,因此请对照 TON 网络页面 进行确认,而不是从旧教程中复制 URL。其次,将端点保存在环境变量中。硬编码会使在公共端点、托管端点和测试网端点之间切换变得痛苦。
切换到 TON 测试网
测试网是一个独立的网络,有自己的端点。当你想要测试消息流而不触及主网余额时,将客户端指向 TON 测试网 RPC 配置。将测试网和主网配置保存在单独的环境文件中,这样你就不会意外地从测试运行中提交主网消息。
公共 TON 节点的不足之处
公共端点并非设计上就有缺陷;它们只是不是为生产流量构建的。故障模式是可预测的:
- 速率限制。 共享端点会限制调用者以保护资源池。即使你的平均负载很低,来自后端的突发流量也可能被拒绝。
- 延迟波动。 你与其他所有人共享容量,因此响应时间会随整体需求而变化。
- 方法缺失。 某些端点只暴露部分方法。如果你需要更深入的历史记录或更重的查询,公共节点可能无法提供。
- 无支持路径。 当出现故障时,没有人可以升级处理。你只能独自调试。
- 无可见性。 你无法判断速度变慢是你的代码还是端点的问题。
这些对于原型来说都不是致命的。但对于有用户的产品来说,所有这些都是致命的。
生产就绪检查清单
在任何端点上(包括公共端点)发布 TON 应用之前,请检查以下列表:
- 端点可配置。 它存在于环境变量中,而不是源代码中。
- 存在故障转移。 你至少有一个备用端点,或者一个为你处理故障转移的提供商。
- 重试有界。 你对瞬时错误进行带退避的重试,并在达到限制后停止。
- 你能看到错误。 日志记录将端点故障与应用程序错误分开捕获。
- 你了解你的请求概况。 大致每秒多少调用,以及哪些方法占主导。
- 你有测试网路径。 你可以在 TON 测试网 上重现问题,而不会危及主网资金。
- 你知道升级触发条件。 现在就决定什么指标(错误率、延迟或请求量)意味着“迁移到托管 RPC”。
如果你无法勾选大部分选项,那么公共节点仍然是合适的选择。如果你能勾选它们,而端点是薄弱环节,那么是时候迁移了。
何时迁移到托管 RPC 或专用节点
托管 RPC 和专用节点解决不同的问题,将它们分开考虑会有所帮助。
托管 RPC API 为你提供一个带有密钥、监控和支持路径的稳定端点。你不需要运行任何东西。这是大多数生产应用的正确选择:它消除了速率限制的意外,并在查询失败时有人可以沟通。OnFinality 通过 RPC API 服务 在多个网络上提供此服务,包括 TON。
专用节点 为你提供隔离的容量。你不与其他调用者共享吞吐量,这对于高容量索引、分析或具有严格延迟需求的工作负载很重要。当你的请求概况足够重,以至于共享容量成为瓶颈时,这是正确的选择。有关其工作原理,请参阅 专用节点。
一个简单的决定方法:
- 原型、脚本或低容量工具:公共节点。
- 有用户和后端的应用:托管 RPC API。
- 繁重、持续或延迟敏感的负载:专用节点。
你可以在 RPC 定价 页面上比较成本和吞吐量预期,并在 支持的 RPC 网络 上查看覆盖的网络。
调试 TON RPC 调用
当 TON 调用失败时,错误通常属于以下几类。在更改代码之前,将症状与可能的原因匹配。
| 症状 | 可能原因 | 首先检查 |
|---|---|---|
| 请求立即被拒绝 | 速率限制或缺少 API 密钥 | 你的计划以及端点是否需要密钥 |
| 账户状态为空或意外 | 地址格式错误 | 在查询前规范化地址 |
| 消息已提交但没有交易 | 消息尚未处理 | 轮询交易,而不是假设失败 |
| 负载下超时 | 共享容量 | 请求概况以及是否需要专用容量 |
| 本地正常,生产失败 | 端点或密钥不同 | 每个环境中的环境变量 |
| 调用之间结果不一致 | 读取不同的端点 | 每个环境固定一个端点 |
一个有用的习惯是在每个错误旁边记录端点 URL。一半的“TON RPC 坏了”的报告最终发现是两个环境指向了不同的端点。
节省时间的运维习惯
一些小的实践可以使从公共节点到生产的过渡更加顺利:
- 按环境固定端点。 开发、预发布和生产环境应各自有一个明确命名的端点。
- 分离读写路径。 读取通常可以容忍共享端点;写入通常应使用你最可靠的端点。
- 关注错误率,而不仅仅是延迟。 一个拒绝 5% 调用的快速端点比一个接受所有调用的较慢端点更糟糕。
- 保留逃生通道。 知道如果主端点降级你会切换到哪个 URL,并在需要之前测试该切换。
- 记录你的方法。 列出你的应用实际调用的 TON 方法。这个列表是你在评估计划时提供给提供商的。
这些习惯现在成本很低,并且消除了以后扩展时的大部分痛苦。
关键要点
- TON 公共节点是一个共享端点,用于读取 TON 数据和提交消息,而无需运行基础设施。
- TON 不是 EVM 链,因此方法名称、地址处理和交易流程与以太坊风格的 RPC 不同。
- 公共节点非常适合原型、脚本和低容量工具,但它们是共享的、有速率限制且无支持的。
- 当你有真实用户时,迁移到托管 RPC API;当共享容量成为瓶颈时,迁移到专用节点。
- 将端点保存在环境变量中,规划故障转移,并在发布前决定升级触发条件。
- OnFinality 通过其 RPC API 服务 和 专用节点 提供 TON RPC;有关详细信息,请参阅 RPC 定价 和 支持的 RPC 网络。
常见问题
什么是 TON 公共节点?
它是一个共享的 RPC 端点,允许你与 TON 区块链交互,而无需运行自己的节点。你向 URL 发送请求并接收响应,但你与其他用户共享容量,并且没有服务保证。
TON 公共节点是免费的吗?
公共端点通常可以免费使用,这就是它们在测试中受欢迎的原因。免费访问通常伴随着速率限制和无支持,因此不适合生产流量。
我可以在生产中使用 TON 公共节点吗?
可以,但不应该依赖它。共享端点会限制调用者,并且不提供故障转移或支持。对于有真实用户的应用,托管 RPC API 是更安全的选择。
TON 公共节点和专用节点有什么区别?
公共节点与其他调用者共享。专用节点为你的工作负载提供隔离的容量,这对于高容量或延迟敏感的应用很重要。
如何从 JavaScript 连接到 TON?
使用 TON SDK(如 @ton/ton)并将其指向一个端点。将端点和任何 API 密钥保存在环境变量中,以便你可以在公共、托管和测试网配置之间切换。
TON 测试网需要单独的端点吗?
是的。测试网是一个独立的网络,有自己的端点。请参阅 TON 测试网 RPC 页面以获取当前配置。
在哪里可以找到当前的 TON RPC 端点?
请查看 TON 网络页面 以获取适用于你计划的端点详细信息,而不是从旧教程中复制 URL。
何时应该从公共节点迁移?
当你有真实用户、后端或依赖一致响应的机器人时。如果端点错误或速率限制影响了你的应用,那么是时候迁移到托管 RPC 或专用节点了。