摘要
以太坊 RPC URL 是你的 dApp 用来与以太坊区块链通信的 HTTP 或 WebSocket 端点。本文解释了 RPC URL 的组成部分、如何配置钱包和应用程序,以及如何评估公共、托管和专用端点选项以用于生产工作负载。
当你在以太坊上构建时,你的 dApp 首先需要的是一个 RPC URL。它是你的钱包、后端服务或索引器用来向区块链发送 JSON-RPC 请求的地址。但并非所有以太坊 RPC URL 都是相同的。你选择的端点会影响延迟、可靠性、数据可用性,以及随着流量增长你需要支付的费用。
本文解释了什么是以太坊 RPC URL,如何解读它,以及如何为你的用例选择合适的端点。你还会看到具体的配置示例以及公共、托管和专用选项的比较。
以太坊 RPC URL:它是什么以及如何工作
RPC(远程过程调用)URL 是暴露以太坊 JSON-RPC API 的 HTTP 或 WebSocket 地址。当你的应用程序调用 eth_blockNumber 或 eth_getBalance 时,它会向此 URL 发送带有 JSON 负载的 POST 请求。该 URL 背后的节点处理请求并返回响应。
一个典型的以太坊 RPC URL 看起来像这样:
https://eth.api.onfinality.io/public
此 URL 指向由 OnFinality 托管的公共端点。它支持 HTTP 和 WebSocket,因此你可以将其用于标准请求和实时订阅。
RPC URL 的组成部分
- 协议:
https://或用于 WebSocket 的wss://。在生产环境中始终使用 HTTPS/WSS 来加密流量。 - 主机:节点提供商的域名或 IP 地址。
- 路径:通常包含网络名称或访问密钥。例如,
/public表示共享的公共端点。
HTTP 与 WebSocket
- HTTP:最适合一次性请求,如获取区块数据或发送交易。大多数 SDK 默认使用 HTTP。
- WebSocket:支持基于推送的订阅,如
eth_subscribe。将其用于实时更新,例如待处理交易或新区块。
如何在你的技术栈中配置以太坊 RPC URL
你会在多个地方需要 RPC URL:你的钱包、dApp 的前端以及后端服务。以下是常见的配置示例。
钱包配置(MetaMask)
在 MetaMask 中,你可以使用以下设置添加自定义网络:
{
"chainId": "0x1",
"chainName": "Ethereum Mainnet",
"rpcUrls": ["https://eth.api.onfinality.io/public"],
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"blockExplorerUrls": ["https://etherscan.io"]
}
ethers.js 示例
const { ethers } = require("ethers");
const provider = new ethers.JsonRpcProvider("https://eth.api.onfinality.io/public");
async function getBlockNumber() {
const blockNumber = await provider.getBlockNumber();
console.log("Current block:", blockNumber);
}
getBlockNumber();
viem 示例
import { createPublicClient, http } from 'viem';
import { mainnet } from 'viem/chains';
const client = createPublicClient({
chain: mainnet,
transport: http('https://eth.api.onfinality.io/public'),
});
const blockNumber = await client.getBlockNumber();
console.log(blockNumber);
WebSocket 订阅示例
const { WebSocket } = require("ws");
const ws = new WebSocket("wss://eth.api.onfinality.io/public");
ws.on("open", () => {
ws.send(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "eth_subscribe",
params: ["newHeads"]
}));
});
ws.on("message", (data) => {
console.log("New head:", JSON.parse(data.toString()));
});
公共、托管或专用:你应该使用哪个以太坊 RPC URL?
你对 RPC URL 的选择取决于你的工作负载、预算和可靠性要求。以下是一个快速比较,可帮助你做出决定。
| 端点类型 | 最适合 | 考虑因素 |
|---|---|---|
| 公共 RPC URL | 原型开发、黑客松、低流量 dApp | 速率限制、无 SLA、可能不可靠 |
| 托管共享 RPC | 中等流量的生产 dApp | 更高的速率限制、更好的可靠性、成本随使用量增长 |
| 专用节点 RPC | 高吞吐量、数据密集型或合规敏感的应用程序 | 完全控制、无嘈杂邻居、成本更高 |
公共 RPC URL
公共端点如 https://eth.api.onfinality.io/public 是免费且易于使用的。它们非常适合开发和测试。然而,它们被许多用户共享,因此在重负载下可能会变慢或受到速率限制。它们不适合需要一致性能的生产应用程序。
托管共享 RPC
托管 RPC 服务提供具有更高速率限制、更好正常运行时间和技术支持的专业 API 端点。它们处理节点基础设施,因此你无需运行自己的节点。对于大多数生产 dApp 来说,这是一个很好的中间选择。
专用节点
专用节点为你提供不与其他用户共享的私有 RPC URL。你可以完全控制节点的配置,并避免“嘈杂邻居”问题。这对于大量使用 eth_getLogs、归档数据或自定义追踪的应用程序来说非常理想。
如何评估以太坊 RPC 提供商
在比较 RPC 提供商时,不要只看 URL。以下是需要评估的关键标准:
可靠性和正常运行时间
检查提供商的历史正常运行时间以及他们是否提供 SLA。频繁中断的提供商会损害你的用户体验。寻找发布状态页面并具有冗余基础设施的提供商。
速率限制和公平使用
公共端点通常有严格的速率限制。托管服务提供更高的限制,但它们可能仍会限制你的每秒请求数。了解限制及其执行方式。如果你需要一致的吞吐量,则可能需要专用节点。
数据可用性:归档和追踪数据
许多 dApp 需要历史状态或交易追踪。归档节点存储区块链的完整历史,这对于分析、索引器和某些 DeFi 应用程序至关重要。检查提供商是否提供归档数据以及它是否包含在你的计划中。
WebSocket 支持
如果你的 dApp 需要实时更新,请确保提供商支持 WebSocket 连接。一些提供商仅提供 HTTP,这限制了你订阅事件的能力。
安全性和合规性
对于企业使用,请考虑提供商的安全实践,例如加密、访问控制和合规认证。提供专用基础设施的提供商可能会让你更好地控制数据隐私。
生产就绪检查清单
在使用以太坊 RPC URL 上线之前,请检查此清单:
- 使用 HTTPS/WSS:在生产环境中切勿使用纯 HTTP。
- 设置备用端点:在客户端中配置多个 RPC URL 以处理故障转移。
- 监控性能:跟踪延迟、错误率和请求量。
- 了解速率限制:了解提供商的限制并为峰值做好计划。
- 测试归档数据:如果你的应用需要历史数据,请验证提供商是否支持。
- 查看 SLA:确保提供商提供的服务级别协议满足你的需求。
常见陷阱及如何避免
在生产环境中使用公共端点
公共端点很方便,但它们并非为生产流量而设计。你可能会遇到速率限制或停机。对于任何严肃的应用程序,请使用托管或专用的 RPC URL。
忽略 WebSocket 与 HTTP 的差异
如果你的应用依赖实时数据,你需要 WebSocket。使用 HTTP 轮询效率低下,并且可能会错过事件。确保你的提供商支持 WebSocket,并且你使用正确的 URL 方案(wss://)。
未规划故障转移
单个 RPC URL 是单点故障。使用多个提供商或端点,并在客户端中实现自动故障转移。像 ethers.js 和 viem 这样的库支持多个提供商。
忽视归档数据需求
如果你的 dApp 查询历史状态,你需要一个归档节点。许多提供商对归档访问收取额外费用。在你的预算中为此做好计划,并选择在你需要的网络上提供归档数据的提供商。
如何开始使用以太坊 RPC URL
如果你准备好超越公共端点,OnFinality 为以太坊和许多其他网络提供托管 RPC 服务和专用节点。你可以从免费的公共端点开始测试,然后随着流量增长升级到生产计划。
关键要点
- 以太坊 RPC URL 是你的 dApp 与区块链交互的端点。
- 公共端点适合开发,但生产应用需要托管或专用的 RPC URL。
- 根据你对实时数据的需求,在 HTTP 和 WebSocket 之间进行选择。
- 评估提供商的可靠性、速率限制、归档数据、WebSocket 支持和安全性。
- 在生产环境中始终使用 HTTPS/WSS 并设置故障转移。
常见问题解答
什么是官方的以太坊 RPC URL?
没有单一的官方以太坊 RPC URL。以太坊基金会不托管公共 RPC 端点。相反,你选择像 OnFinality 这样的提供商,它提供公共、托管或专用端点。
我可以将免费的以太坊 RPC URL 用于生产吗?
不建议将免费的公共端点用于生产,因为存在速率限制和潜在的停机时间。为了获得可靠的服务,请考虑托管 RPC 计划或专用节点。
如何找到我的以太坊 RPC URL?
如果你使用像 OnFinality 这样的提供商,你将在仪表板中收到一个 RPC URL。对于公共端点,你可以使用网络页面上提供的 URL,例如 https://eth.api.onfinality.io/public。
HTTP 和 WebSocket RPC URL 有什么区别?
HTTP 用于标准的请求-响应调用,而 WebSocket 允许实时订阅。对于待处理交易通知或新区块警报等功能,请使用 WebSocket。
我需要以太坊的归档节点吗?
如果你的应用程序需要超过一定年龄的历史状态或事件日志,你需要一个归档节点。许多提供商将归档访问作为附加功能提供。
如何测试我的以太坊 RPC URL?
你可以使用 curl 发送一个简单的 JSON-RPC 请求:
curl -X POST https://eth.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
这应该以十六进制格式返回最新的区块号。