摘要
Polygon 主网是一条 EVM 兼容链,链 ID 为 137,原生 Gas 代币为 POL。要连接,请将您的钱包或应用指向 HTTP 或 WebSocket RPC 端点,并在发送交易前确认链 ID 匹配 137。OnFinality 提供用于测试的公共 Polygon 端点,以及用于需要一致容量的生产工作负载的专用 Polygon 节点基础设施。
Polygon 主网是一个 EVM 兼容网络,链 ID 为 137,原生 Gas 代币为 POL。如果您正在将钱包、后端索引器或交易机器人连接到 Polygon,首先需要一个可用的 RPC 端点以及正确的链设置。本页提供了这些设置、一些请求示例,以及一种在公共端点和专用节点基础设施之间做出决定的实用方法。
快速推荐:公共端点还是专用节点?
在原型设计、运行脚本或验证钱包配置是否正确时,从公共端点开始。这是确认链 ID、余额和合约调用的最快方式,无需任何注册。
在以下任何情况下,请迁移到专用 Polygon 节点:
- 您发送稳定的
eth_call、eth_getLogs或eth_sendRawTransaction请求流,并且无法容忍共享容量。 - 您需要在铸造、清算或其他突发事件期间获得可预测的吞吐量。
- 您依赖 WebSocket 订阅,例如
newHeads或logs,并希望拥有自己控制的连接。 - 您需要归档式历史读取或跟踪式调试,而公共端点通常会限制这些功能。
OnFinality 两者都提供:用于开发的公共 Polygon 端点,以及用于生产的专用节点基础设施。您可以查看 RPC 定价和支持的 RPC 网络,以了解哪种适合您的工作负载。
Polygon 主网链设置一览
在将 Polygon 添加到钱包、Hardhat 配置或后端客户端时,请使用以下值。
| 设置 | 值 |
|---|---|
| 网络名称 | Polygon Mainnet |
| 链 ID | 137 |
| 原生货币 | POL(18 位小数) |
| 区块浏览器 | https://polygonscan.com |
| 传输 | HTTP 和 WebSocket |
| 公共 RPC URL | https://polygon.api.onfinality.io/public |
如果工具要求单独提供“网络 ID”和链 ID,在 Polygon 主网上两者都使用 137。ID 不匹配是钱包和 dApp 中出现“错误网络”错误的最常见原因之一。
从钱包连接
大多数 EVM 钱包接受自定义网络。输入上述值,然后确认钱包显示 POL 作为 Gas 代币,并且您的地址余额已加载。如果余额为空但您预期有资金,请检查您是否仍指向测试网,例如 Polygon Amoy(链 ID 80002)。
一个常见的错误是粘贴测试网 RPC URL 但保留主网链 ID,或者反过来。钱包要么拒绝连接,要么静默显示错误的余额。对于主网,始终将端点与链 ID 137 配对。
进行您的第一次 JSON-RPC 调用
您可以通过单个 curl 请求验证端点。以下示例请求当前区块号:
curl -X POST https://polygon.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
健康的响应会返回一个十六进制区块号。然后,您可以检查链 ID 并获取余额:
curl -X POST https://polygon.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"eth_chainId","params":[]}'
eth_chainId 结果应为 0x89,即十进制的 137。如果得到不同的值,说明您正在与错误的网络通信。
从 JavaScript 使用 Polygon
使用 ethers,您可以将提供者指向端点并读取状态,而无需管理密钥:
import { JsonRpcProvider, formatEther } from "ethers";
const provider = new JsonRpcProvider("https://polygon.api.onfinality.io/public");
const network = await provider.getNetwork();
console.log("chainId:", network.chainId.toString()); // 137
const block = await provider.getBlockNumber();
console.log("latest block:", block);
const balance = await provider.getBalance("0xYourAddressHere");
console.log("POL balance:", formatEther(balance));
如果您使用 viem,同样的思路适用于 createPublicClient 和指向端点的 http()。对于发送交易,请添加签名者并确保账户持有足够的 POL 来支付 Gas。
Polygon 上的 WebSocket 订阅
Polygon 支持 WebSocket 传输,这对于无需轮询即可对新区块或特定合约事件做出反应非常有用。一个最小的订阅如下所示:
import WebSocket from "ws";
const ws = new WebSocket("wss://polygon.api.onfinality.io/public/ws");
ws.on("open", () => {
ws.send(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "eth_subscribe",
params: ["newHeads"]
}));
});
ws.on("message", (data) => {
const msg = JSON.parse(data.toString());
if (msg.method === "eth_subscription") {
console.log("new head:", msg.params.result.number);
}
});
WebSocket 连接是有状态的,因此请规划重连。如果您的应用依赖长期订阅,专用节点提供的连接不会与无关流量共享。
生产中首先出现的问题
大多数 Polygon RPC 问题并不罕见。它们属于几个可重复的类别:
| 症状 | 可能原因 | 检查内容 |
|---|---|---|
| 钱包中显示“错误网络” | 链 ID 与端点不匹配 | 确认链 ID 137 和主网 URL |
| 余额为空 | 指向了测试网 | 检查是 Amoy (80002) 还是主网 (137) |
| 请求缓慢或被限流 | 共享公共容量 | 将大量读取迁移到专用节点 |
eth_getLogs 失败或超时 | 共享端点上的区块范围过宽 | 缩小范围或使用适合日志查询的节点 |
| 订阅断开 | WebSocket 空闲或不稳定 | 添加重连逻辑和心跳 |
| 交易卡住 | Gas 价格对于当前条件太低 | 重新估算 Gas 并检查 POL 余额 |
如果您正在调试特定故障,请将其隔离:运行 eth_chainId,然后 eth_blockNumber,然后失败的方法。该顺序告诉您问题是端点、网络还是请求负载。
为 Polygon 工作负载选择基础设施
正确的选择取决于您的应用实际做什么。一个快速框架:
| 工作负载 | 公共端点 | 专用节点 |
|---|---|---|
| 原型设计和脚本 | 适合 | 不需要 |
| 钱包或 dApp 读取 | 通常可以 | 大规模时有用 |
| 高容量索引 | 有风险 | 推荐 |
| WebSocket 订阅 | 有限 | 推荐 |
| 归档或跟踪查询 | 通常受限 | 推荐 |
| 突发流量(铸造、清算) | 不可预测 | 推荐 |
OnFinality 的 Polygon RPC 网络页面列出了端点和传输详细信息。如果您正在更广泛地比较提供商,RPC 提供商选择指南涵盖了方法支持、故障转移和可观测性等标准。
添加故障转移和监控
单个端点就是单点故障。对于生产环境,至少运行两个端点,并在错误或延迟阈值时切换。一个简单的健康探测可以检查链 ID 和区块新鲜度:
async function probe(url) {
const res = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "eth_chainId",
params: []
})
});
const data = await res.json();
return data.result === "0x89";
}
定期运行此探测,并将流量从失败或滞后的端点路由出去。跟踪区块高度随时间的变化,以便发现正在落后而不是完全失败的节点。
关键要点
- Polygon 主网使用链 ID 137 和 POL 作为其原生 Gas 代币。
- OnFinality 的公共端点
https://polygon.api.onfinality.io/public适用于开发和验证。 - 在信任任何端点之前,确认
eth_chainId返回0x89。 - 使用 WebSocket 传输进行订阅,并添加重连逻辑。
- 当共享容量成为瓶颈时,将大量读取、日志查询和订阅迁移到专用节点。
- 始终规划故障转移并监控区块新鲜度,而不仅仅是正常运行时间。
常见问题解答
Polygon 主网 RPC URL 是什么?
OnFinality 的公共 Polygon 端点是 https://polygon.api.onfinality.io/public。对于生产环境,请使用提供商仪表板中的专用端点。
Polygon 的链 ID 是什么?
Polygon 主网使用链 ID 137,十六进制为 0x89。测试网 Polygon Amoy 使用链 ID 80002。
Polygon RPC 支持 WebSocket 吗?
是的。Polygon 支持 HTTP 和 WebSocket 传输。使用 WebSocket 进行 eth_subscribe 方法,例如 newHeads 和 logs。
我可以在生产环境中使用公共端点吗?
可以,但共享容量在负载下不可预测。对于稳定流量、突发流量或订阅,专用节点是更安全的选择。
如何知道我的端点是否在错误的网络上?
调用 eth_chainId。如果它不返回 0x89,则您连接到了不同的网络或测试网。
在哪里可以看到支持的 Polygon 端点和定价?
请参阅 Polygon 网络页面、RPC 定价以及支持的 RPC 网络的完整列表。