摘要
Polygon 公共 RPC 是一个共享的、无需认证的 HTTPS 端点,允许你在不运行自己的节点的情况下读取链上数据并发送交易。它非常适合快速测试、钱包设置和低流量脚本,但共享容量意味着你不应将其用于生产流量或严格的延迟目标。本文介绍了官方公共端点、链设置、请求示例、速率限制症状,以及何时专用或托管 RPC 成为更好的选择。
Polygon 公共 RPC 是否适合你的工作负载?
公共 RPC 是与 Polygon 通信的最快方式,但它是一种共享资源。在将端点粘贴到配置文件之前,请将其与你要求它完成的任务相匹配。
| 你的情况 | 公共 RPC 通常没问题 | 迁移到托管或专用端点 |
|---|---|---|
| 钱包或 dApp 测试网设置 | 是 | 尚不需要 |
| 一次性脚本或笔记本 | 是 | 尚不需要 |
| 少量调用的 CI 冒烟测试 | 是 | 如果测试并行运行 |
| 面向用户的 dApp 读取 | 负载下有风险 | 是 |
| 索引器或日志回填 | 否 | 是,需要归档访问 |
| 交易机器人或延迟敏感路径 | 否 | 是 |
高流量 eth_getLogs | 否 | 是 |
如果你在原型设计,公共端点消除了所有设置摩擦。如果你要发布给用户,请将公共端点视为后备,而非主要路径。OnFinality 同时提供共享 RPC API 和专用 Polygon 节点,因此你可以从公共开始,无需更改应用逻辑即可升级。
连接所需的 Polygon 链设置
Polygon PoS 主网使用链 ID 137 和原生 gas 代币 POL。请确保这些值在钱包、库和部署配置中保持一致,因为不匹配是导致“错误网络”错误的最常见原因之一。
| 设置 | 值 |
|---|---|
| 网络名称 | Polygon Mainnet |
| 链 ID | 137 |
| 原生货币 | POL(18 位小数) |
| 区块浏览器 | https://polygonscan.com |
| 传输 | HTTP 和 WebSocket |
| 公共 RPC URL | https://polygon.api.onfinality.io/public |
对于测试网工作,Polygon Amoy 使用链 ID 80002、POL 代币和浏览器 https://amoy.polygonscan.com。其公共端点是 https://polygon-amoy.api.onfinality.io/public。请参阅 Polygon 网络页面 获取当前端点列表和传输支持。
针对公共端点的最小请求
从只读调用开始。eth_chainId 确认你在正确的网络上,eth_blockNumber 确认端点正在响应。
curl -s https://polygon.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
健康的响应返回 0x89,即十六进制的 137。如果你得到不同的值,说明你指向了另一条链。如果你得到 HTTP 429 或 JSON-RPC 错误,则端点正在限速或暂时不可用。
在 JavaScript 中,使用 viem 进行相同检查如下所示:
import { createPublicClient, http } from 'viem'
import { polygon } from 'viem/chains'
const client = createPublicClient({
chain: polygon,
transport: http('https://polygon.api.onfinality.io/public')
})
const chainId = await client.getChainId()
const block = await client.getBlockNumber()
console.log({ chainId, block })
对于钱包设置,用户可以使用上表中的值手动添加 Polygon,或者你可以通过 wallet_addEthereumChain 提示他们。将 RPC URL 放在前端的一个位置,以便以后无需在组件中搜索即可替换。
公共端点的优势与压力点
公共端点是一个共享网关。它非常适合读取、钱包交互和开发。它不是为持续的并行流量或大量日志查询而设计的。
- 读取和简单写入:
eth_call、eth_getBalance、eth_sendRawTransaction和eth_getTransactionReceipt行为正常。 - 日志查询: 在大区块范围上的
eth_getLogs是第一个被限流的方法,因为节点服务成本高昂。 - WebSocket 订阅: 存在传输支持,但共享订阅在负载下可能断开。重连逻辑是强制性的。
- 归档数据: 公共端点通常提供最近状态。深层历史查询可能失败或超时。
- Trace 和 debug 方法: 这些通常在共享公共端点上不可用或受限。
如果你的应用依赖于后三项中的任何一项,请计划使用托管或专用端点,而不是在生产中发现限制。
表明该离开公共 RPC 的症状
你不需要正式的容量计划来知道公共端点不再足够。这些信号会提前出现:
- 间歇性 429 响应 在高峰时段,即使请求速率适中。
eth_getLogs超时 当你为回填扩大区块范围时。- WebSocket 断开连接 你的客户端无法干净地恢复。
- 不一致的延迟 使 UI 加载指示器感觉随机而非可预测。
- 缺少历史状态 当用户打开旧交易或头寸时。
- 无可见性 了解请求失败的原因,因为共享端点很少暴露每个密钥的指标。
当出现两个或更多这些症状时,修复方法不是更长的重试循环。而是一个你控制容量的端点。
从公共迁移到托管或专用 Polygon RPC
迁移通常是配置更改,而不是重写。保持接口相同,更改传输目标。
// 之前:共享公共端点
const transport = http('https://polygon.api.onfinality.io/public')
// 之后:使用你自己的密钥的托管端点
const transport = http(process.env.POLYGON_RPC_URL, {
retryCount: 3,
retryDelay: 250,
timeout: 10_000
})
实用的推出步骤:
- 将端点放入环境变量,以便无需部署即可更改。
- 在暂存环境中运行托管端点,并将错误率和延迟与公共基线进行比较。
- 添加后备提供商或第二个端点以实现故障转移。
- 首先迁移读取密集型路径,然后是写入,最后是任何归档或 trace 工作负载。
- 将公共端点保留为最后手段的后备,而不是默认。
如果你需要可预测的吞吐量、隔离资源或归档和 trace 访问,专用节点 为你提供一个不与其他客户共享的节点。如果你想在不自己操作节点的情况下获得托管容量,RPC API 服务 是中间路径。在 RPC 定价页面 上比较计划。
在公共、共享和专用端点之间选择
使用此矩阵将端点类型与工作负载匹配,而不是与预算线匹配。
| 工作负载 | 公共 RPC | 共享托管 RPC | 专用节点 |
|---|---|---|---|
| 钱包测试网设置 | 好 | 可以 | 过度 |
| 原型 dApp | 好 | 可以 | 过度 |
| 生产 dApp 读取 | 不推荐 | 好 | 高流量最佳 |
| 索引器或分析 | 不适合 | 受计划限制 | 归档最佳 |
| 交易或延迟敏感 | 不适合 | 好 | 隔离最佳 |
| Trace/debug 方法 | 通常不可用 | 取决于计划 | 可用 |
| WebSocket 订阅 | 负载下不稳定 | 支持 | 隔离 |
| 操作可见性 | 最小 | 每个密钥的指标 | 完全控制 |
OnFinality 跨越共享和专用层级:你可以从共享 RPC API 开始,随着流量增长迁移到专用 Polygon 基础设施,保持相同的 JSON-RPC 接口。有关更广泛的评估框架,请参阅 如何选择 RPC 提供商。
发布前的操作检查清单
即使在托管端点上,一些习惯也能防止大多数事件:
- 固定链 ID 在你的客户端配置中,以便错误网络响应快速失败。
- 设置明确的超时和重试 而不是依赖库默认值。
- 批量读取 在库支持的情况下减少请求数量。
- 缓存不可变数据 如已确认的收据和旧日志。
- 监控错误率和 p95 延迟 按方法,而不仅仅是总体。
- 对 429 和 WebSocket 重连发出警报,因为两者都先于用户可见的故障。
- 保持一个后备端点 配置并测试,而不仅仅是记录。
一个简单的监控探针可以在用户之前捕获端点退化:
#!/usr/bin/env bash
RPC="${POLYGON_RPC_URL:-https://polygon.api.onfinality.io/public}"
START=$(date +%s%3N)
RESP=$(curl -s -o /dev/null -w "%{http_code}" "$RPC" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}')
END=$(date +%s%3N)
echo "status=$RESP latency_ms=$((END-START))"
定期运行此脚本并记录输出。延迟上升趋势或连续非 200 响应是你当前端点不再足够的早期警告。
关键要点
- 位于
https://polygon.api.onfinality.io/public的 Polygon 公共 RPC 是一个共享端点,适用于开发、钱包和低流量脚本。 - Polygon 主网使用链 ID 137 和 POL 作为原生代币;Amoy 测试网使用链 ID 80002。
eth_getLogs、归档查询、trace 方法和大量 WebSocket 使用是首先触及共享端点限制的工作负载。- 间歇性 429、超时和 WebSocket 断开是迁移到托管或专用端点的信号。
- 迁移通常是传输更改加上重试、超时和后备,而不是应用重写。
- OnFinality 提供共享 RPC 和专用 Polygon 节点,因此你可以在不更改 JSON-RPC 接口的情况下扩展容量。请参阅 支持的 RPC 网络 了解覆盖范围。
常见问题
Polygon 公共 RPC 免费使用吗?
公共端点通常无需 API 密钥即可用于开发和轻量使用。它们是共享的,因此不适合生产流量或需要一致容量的工作负载。
Polygon 主网链 ID 是什么?
Polygon PoS 主网使用链 ID 137。Polygon Amoy 测试网使用链 ID 80002。在发送交易之前,始终使用 eth_chainId 确认链 ID。
为什么我的 Polygon RPC 请求返回 HTTP 429?
429 表示端点正在对你的请求进行速率限制。在共享公共端点上,这会在负载下发生。降低请求频率、批量读取,或迁移到具有适合你流量的容量的托管端点。
我可以将公共 RPC 用于 eth_getLogs 吗?
小区块范围通常可以工作。用于索引或回填的宽范围通常会被限流或超时。对于日志密集型工作负载,请使用具有归档访问权限的托管或专用端点。
公共端点支持 WebSocket 订阅吗?
存在传输支持,但共享订阅在负载下可能断开。如果你依赖 eth_subscribe,请实现重连逻辑,并考虑使用专用端点以确保稳定性。
我什么时候应该切换到专用 Polygon 节点?
当你需要可预测的吞吐量、隔离资源、归档或 trace 访问,或对故障的每个密钥可见性时,请切换。专用节点从你的可靠性方程中移除了共享容量变量。
如何在我的应用中更改 RPC 端点?
将 URL 保存在环境变量中,并将其传递给 HTTP 传输。这样你就可以从公共迁移到托管或专用,而无需触及应用程序代码。