摘要
ETH RPC 节点是暴露以太坊 JSON-RPC API 的服务器,允许应用程序读取区块链数据并提交交易。本文解释了什么是 ETH RPC 节点,如何使用公共或专用端点连接以太坊,以及如何为你的项目选择合适的基础设施。
快速解答:什么是 ETH RPC 节点?
ETH RPC 节点是运行以太坊客户端软件并暴露以太坊 JSON-RPC API 的服务器。应用程序使用此 API 读取区块链数据(余额、交易收据、合约状态)并广播已签名的交易。术语“RPC”代表远程过程调用,在以太坊中,它指的是钱包、浏览器和 dApp 用来与网络交互的标准 JSON-RPC 接口。
当你连接到 ETH RPC 节点时,你实际上是在向该节点的端点发送 HTTP 或 WebSocket 请求。节点根据其本地区块链副本处理请求并返回结果。这是几乎所有 Web3 应用程序的基础,从简单的余额检查器到复杂的 DeFi 协议。
决策指南:公共 vs 专用 ETH RPC 节点
在编写任何代码之前,你需要决定使用哪种类型的 ETH RPC 节点。正确的选择取决于你的工作负载、可靠性需求和预算。以下是一个快速框架,可帮助你做出决定:
- 原型设计和小型项目:公共 RPC 端点就足够了。你可以使用 OnFinality 官方公共端点用于以太坊主网:
https://eth.api.onfinality.io/public。它是免费的,不需要 API 密钥,但有速率限制,并且与其他用户共享。 - 中等流量的生产应用程序:带有付费计划的共享 RPC 服务是一个很好的中间选择。你获得比公共端点更高的速率限制和更好的可靠性,但你仍然与其他客户共享基础设施。
- 高吞吐量或对延迟敏感的应用程序:专用节点是最佳选择。你获得具有专用资源的私有实例,这意味着稳定的性能和没有嘈杂的邻居。这对于交易机器人、索引器和其他无法容忍速率限制或停机的应用程序至关重要。
如果你不确定,请从公共端点开始进行开发,然后随着流量的增长转向付费计划或专用节点。OnFinality 提供共享和专用选项,你可以在 RPC 定价 页面上比较计划。
ETH RPC 节点如何工作
ETH RPC 节点本质上是一个暴露 JSON-RPC 接口的全节点。该节点维护以太坊区块链的副本,验证新区块并执行交易。当你发送像 eth_blockNumber 这样的请求时,节点返回它已同步的最新区块号。当你发送 eth_sendRawTransaction 时,节点验证交易并将其广播到网络。
以太坊客户端主要有两种类型:执行客户端(如 Geth 和 Nethermind)和共识客户端(如 Prysm 和 Lighthouse)。RPC 节点通常同时运行两者,但 JSON-RPC API 主要由执行客户端暴露。共识客户端处理权益证明和区块最终性。
对于大多数开发人员来说,你不需要运行自己的节点。相反,你使用为你管理基础设施的 RPC 提供商。这节省了你的时间和金钱,并让你访问其他功能,如归档数据和跟踪方法。
连接以太坊:端点和链设置
要将你的应用程序连接到以太坊,你需要正确的端点和链设置。以下是以太坊主网的关键细节:
| 设置 | 值 |
|---|---|
| 链 ID | 1 |
| 网络名称 | 以太坊主网 |
| 原生货币 | ETH(18 位小数) |
| 公共 RPC URL | https://eth.api.onfinality.io/public |
| WebSocket URL | wss://eth.api.onfinality.io/public/ws(如果可用) |
| 浏览器 | https://etherscan.io |
如果你使用像 MetaMask 这样的钱包,你可以使用这些设置将以太坊主网添加为自定义网络。对于开发人员,你将在 Web3 库配置中使用这些值。
示例:发出你的第一个 JSON-RPC 调用
以下是一个简单的 curl 命令,用于在 OnFinality 公共端点上调用 eth_blockNumber 方法:
curl -X POST https://eth.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
响应将如下所示:
{"jsonrpc":"2.0","result":"0x134c2b4","id":1}
结果是一个十六进制字符串,表示最新的区块号。你可以将其转换为十进制以获得人类可读的区块号。
使用 ethers.js 与 ETH RPC 节点交互
大多数开发人员使用像 ethers.js 或 viem 这样的 JavaScript 库与以太坊交互。以下是使用 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("Latest block:", blockNumber);
}
getBlockNumber();
此代码创建一个连接到公共端点的提供程序,并获取最新的区块号。如果你有专用端点,可以替换 URL。
常用方法及其用例
以下是你在使用 ETH RPC 节点时会用到的一些最常见的 JSON-RPC 方法:
| 方法 | 描述 |
|---|---|
eth_blockNumber | 获取最新的区块号 |
eth_getBalance | 获取地址的余额 |
eth_call | 执行只读合约调用 |
eth_sendRawTransaction | 广播已签名的交易 |
eth_getTransactionReceipt | 获取交易收据 |
eth_getLogs | 获取匹配过滤器的日志 |
eth_subscribe | 订阅新区块或日志(仅限 WebSocket) |
有关方法的完整列表,请参阅以太坊 JSON-RPC 规范。大多数 RPC 提供商支持标准方法,但有些可能有额外的方法或限制。
选择合适的 ETH RPC 节点提供商
当你决定使用托管的 RPC 提供商时,你需要评估几个因素。以下是一个比较表,可帮助你评估提供商:
| 提供商 | 共享/专用 | 归档数据 | 跟踪方法 | WebSocket 支持 |
|---|---|---|---|---|
| OnFinality | 两者 | 是 | 是 | 是 |
| 提供商 A | 两者 | 是 | 是 | 是 |
| 提供商 B | 仅共享 | 否 | 否 | 是 |
OnFinality 提供共享和专用节点,支持归档数据、跟踪方法和 WebSocket 连接。你可以查看 支持的 RPC 网络 页面,了解以太坊可用的功能。
在比较提供商时,请考虑以下因素:
- 速率限制:你的计划限制是多少?它们是否足以满足你的流量?
- 数据可用性:你需要归档数据或跟踪方法吗?并非所有提供商都提供这些。
- 延迟:节点位于何处?地理邻近性可以减少延迟。
- 可靠性:正常运行时间历史如何?寻找具有透明状态页面的提供商。
- 定价:比较预期使用量的成本。专用节点更昂贵,但提供更好的性能。
常见问题排查
即使使用可靠的 RPC 提供商,你也可能会遇到问题。以下是一些常见问题及其解决方法:
- 速率限制:如果你收到 HTTP 429 错误,说明你已达到速率限制。考虑升级你的计划或使用专用节点。
- 超时:如果请求超时,请检查你的网络连接和提供商的状态页面。你可能还需要增加客户端的超时设置。
- 错误的链 ID:如果你将交易发送到错误的网络,你将收到错误。始终验证你的链 ID(以太坊主网为 1)。
- Nonce 错误:如果你收到“nonce too low”或“nonce too high”错误,则你的交易 nonce 不正确。使用
eth_getTransactionCount获取正确的 nonce。 - WebSocket 断开:如果你的 WebSocket 连接断开,请在应用程序中实现重新连接逻辑。
关键要点
- ETH RPC 节点是以太坊的门户,提供用于读取和写入区块链数据的 JSON-RPC API。
- 公共端点非常适合开发,但生产应用程序应使用托管服务或专用节点以确保可靠性。
- OnFinality 提供公共、共享和专用的 ETH RPC 节点,支持归档数据和 WebSocket。
- 始终验证你的链设置,并为你的网络使用正确的端点。
- 监控你的使用情况,并选择与你的流量匹配的计划,以避免速率限制。
常见问题解答
ETH RPC 节点和全节点有什么区别?
ETH RPC 节点是暴露 JSON-RPC API 的全节点。所有 RPC 节点都是全节点,但并非所有全节点都配置为提供 RPC 请求。运行全节点可以让你直接访问网络,但它需要大量的硬件和维护。
我需要运行自己的 ETH RPC 节点吗?
不需要。对于大多数应用程序,使用托管的 RPC 提供商更具成本效益和可靠性。你避免了同步、升级和监控自己节点的开销。OnFinality 为以太坊和许多其他网络提供托管节点。
我可以将公共 ETH RPC 节点用于生产环境吗?
不建议将公共端点用于生产环境,因为它们有速率限制并且是共享的。它们可能会在重负载下宕机或变慢。对于生产环境,请使用付费计划或专用节点。
最好的 ETH RPC 节点提供商是什么?
最好的提供商取决于你的需求。评估可靠性、数据支持和定价等因素。OnFinality 是一个不错的选择,提供共享和专用节点,并具有透明的定价。查看 RPC 定价 页面了解详情。
如何获取 ETH RPC 节点 API 密钥?
使用 OnFinality,你可以注册一个账户并从仪表板创建 API 密钥。API 密钥用于验证对专用或共享端点的请求。公共端点不需要密钥。
以太坊 Sepolia 测试网 RPC 端点是什么?
对于 Sepolia,公共端点是 https://eth-sepolia.api.onfinality.io/public。你可以使用它在 Sepolia 测试网上进行测试。更多详情请参见 Sepolia 网络页面。