摘要
以太坊 RPC 列表是一组端点,让你的 dApp 能够在以太坊上读写数据。选择正确的端点取决于你的工作负载:公共端点适合测试,而生产应用需要托管或专用基础设施。本指南解释了 RPC 端点的类型、如何评估它们,以及如何使用流行工具进行连接。
当你搜索“以太坊 RPC 列表”时,你可能正在寻找一组可以插入钱包、dApp 或后端服务的端点。列表本身只是答案的一半:更重要的问题是哪种类型的端点适合你的用例。本指南将介绍以太坊 RPC 端点的主要类别、在提交之前需要检查的内容,以及如何使用常见工具进行连接。
快速建议:将端点与你的工作负载匹配
在将 URL 复制到配置之前,请考虑你的应用实际需要什么。公共端点适合黑客松或本地脚本,但无法承受生产流量。托管 RPC 服务提供可靠性和可扩展性,而无需运维开销。专用节点为高负载或敏感工作负载提供完全控制和隔离。
| 工作负载 | 推荐的端点类型 | 原因 |
|---|---|---|
| 原型开发、测试、低流量 | 公共端点 | 免费、无需设置,但有限速且通常不可靠 |
| 生产 dApp、中等流量 | 托管 RPC(共享) | 性能、可扩展性和支持均衡 |
| 高吞吐量、归档数据、trace 调用 | 专用节点 | 完全控制、无噪声邻居、自定义配置 |
| 合规、数据隐私、自定义逻辑 | 专用节点 | 你拥有基础设施,可以审计一切 |
如果你不确定,可以从 OnFinality 的 以太坊 RPC 等托管 RPC 服务开始,并在达到其限制时扩展到 专用节点。查看 RPC 定价 以了解你需要支付什么。
什么是以太坊 RPC 端点?
以太坊节点通过 HTTP 或 WebSocket 暴露 JSON-RPC API。RPC 端点只是该 API 可用的 URL。例如,OnFinality 的公共以太坊端点是 https://eth.api.onfinality.io/public。你向此 URL 发送 JSON-RPC 请求以读取区块链数据、估算 gas 或提交交易。
以太坊 JSON-RPC 规范定义了诸如 eth_blockNumber、eth_getBalance、eth_call 和 eth_sendRawTransaction 等方法。每个以太坊节点都实现这些方法,但端点的质量——速度、可靠性和数据深度——差异很大。
以太坊 RPC 端点的类型
公共端点
公共端点是免费的,对任何人开放。它们非常适合学习和快速测试,但带有明显的缺点:
- 速率限制:在达到一定请求数后,你可能会被限制或阻止。
- 可用性:它们可能在没有通知的情况下宕机。
- 数据限制:通常只有最近的状态,而不是完整的归档数据。
- 无支持:如果出现问题,你需要自己解决。
托管 RPC 服务
托管服务为你运行以太坊节点,并通过可靠的 API 暴露它们。它们处理基础设施、监控和扩展。例如,OnFinality 提供全球以太坊节点网络,支持 HTTP 和 WebSocket。你获得稳定的端点、清晰的 定价 以及对 支持的网络 的访问。
专用节点
专用节点为你提供以太坊节点的私有实例。你可以独占访问节点资源,这意味着没有共享使用的速率限制,也没有“噪声邻居”效应。这非常适合高吞吐量应用、归档数据需求或需要自定义节点配置的情况。
如何评估以太坊 RPC 提供商
在比较提供商时,不要只看端点 URL。以下是关键标准:
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| 正常运行时间和可靠性 | 历史正常运行时间、SLA | 宕机意味着你的应用不可用 |
| 吞吐量和延迟 | 响应时间、请求限制 | 慢速 RPC 会使你的 UI 反应迟钝 |
| 数据可用性 | 归档数据、trace 支持 | 分析和调试需要 |
| 传输支持 | HTTP、WebSocket | 实时更新需要 WebSocket |
| 安全性 | 身份验证、TLS | 保护你的 API 密钥和数据 |
| 支持 | 文档、SLA | 帮助你快速解决问题 |
| 定价模式 | 免费层、按需付费、专用 | 必须适合你的预算和规模 |
OnFinality 的 以太坊 RPC 提供具有全球覆盖的托管端点,你可以升级到 专用节点 以获得完全控制。
连接到以太坊 RPC 端点
使用 curl
你可以使用简单的 curl 请求测试任何以太坊 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}'
使用 ethers.js
在 JavaScript 项目中,你可以使用 ethers.js 连接到以太坊 RPC 端点:
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("Latest block:", blockNumber);
}
getBlockNumber();
使用 viem
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);
钱包配置
如果你要将以太坊添加到像 MetaMask 这样的钱包,你需要链 ID(1)和 RPC URL。使用可靠的端点,如 https://eth.api.onfinality.io/public 作为网络。
常见陷阱及如何避免
速率限制
公共端点通常在你超过限制时返回 429 Too Many Requests。为避免这种情况,请使用具有更高限制的托管服务,或实现带有指数退避的重试逻辑。
WebSocket 与 HTTP
如果你的应用需要实时更新(例如,新区块、待处理交易),你需要 WebSocket 端点。HTTP 适用于一次性请求。OnFinality 在以太坊上同时支持 HTTP 和 WebSocket。
归档数据
许多端点只保留最近的状态。如果你需要历史数据(例如,用于分析),你需要一个归档节点。OnFinality 在其托管和专用节点上提供归档数据。
安全性
切勿在客户端代码中暴露你的 API 密钥。使用环境变量,并在必要时通过后端代理请求。
何时从公共迁移到托管或专用
如果你正在构建生产应用,你不应依赖公共端点。需要升级的迹象包括:
- 你的应用频繁遇到速率限制错误。
- 你需要为全球用户提供一致的低延迟。
- 你需要归档数据或 trace 方法。
- 你需要 WebSocket 连接以实现实时功能。
- 你想要服务级别协议和支持。
OnFinality 的 托管 RPC 是一个很好的中间选择。为了获得最大性能和控制,请考虑 专用节点。
关键要点
- 以太坊 RPC 列表只是一个起点;真正的决定是使用哪种类型的端点。
- 公共端点适合测试,但不适合生产。
- 托管 RPC 服务在可靠性、可扩展性和支持之间提供了平衡。
- 专用节点提供完全控制,最适合高吞吐量或专业需求。
- 根据正常运行时间、吞吐量、数据可用性、传输、安全性和支持来评估提供商。
- 始终使用安全连接并保护你的 API 密钥。
常见问题解答
HTTP 和 WebSocket RPC 端点有什么区别?
HTTP 端点是请求-响应模式,适用于一次性查询。WebSocket 端点保持持久连接,允许服务器推送更新,这对于实时应用至关重要。
我可以在生产环境中使用公共以太坊 RPC 端点吗?
不建议。公共端点有限速,并且可能不可靠。对于生产环境,请使用托管服务或专用节点。
什么是归档节点?
归档节点存储区块链的完整历史,允许你查询任何区块的历史状态。这对于分析、调试和合规很有用。
如何获得专用以太坊节点?
你可以从像 OnFinality 这样的提供商处获得专用节点。访问 专用节点页面 了解更多信息并请求一个。
以太坊的链 ID 是多少?
以太坊主网的链 ID 是 1。这用于防止不同网络之间的重放攻击。
如何测试以太坊 RPC 端点?
你可以使用 curl 或像 ethers.js 这样的库发送简单请求,例如 eth_blockNumber,以验证端点是否正常工作。
OnFinality 是否支持以太坊测试网?
是的,OnFinality 支持以太坊 Sepolia。你可以在 Sepolia 网络页面 上找到端点。