Logo
RPC Assistant

什么是以太坊 RPC API,如何使用它?

摘要

以太坊 RPC API 是每个以太坊执行客户端都暴露的标准 JSON-RPC 接口,允许应用程序读取区块链数据、发送交易以及与智能合约交互。本文解释了核心方法、如何使用 curl 或 JavaScript 库调用它们,以及如何在运行自己的节点和使用像 OnFinality 这样的托管 RPC 提供商之间进行选择。

快速建议:运行自己的节点还是使用托管 RPC?

在编写第一个 eth_call 之前,决定你的请求将发送到哪里。以太坊 RPC API 只是一个 JSON-RPC 接口,但你连接的端点质量决定了你的应用程序的延迟、可靠性和成本。

  • 对于原型或低流量 dapp,公共端点或托管提供商的免费层就足够了。你可以从 OnFinality 公共端点开始:https://eth.api.onfinality.io/public
  • 对于生产应用程序,你需要一致的性能、归档数据、WebSocket 支持,以及能够处理流量高峰的提供商。像 OnFinality 这样的托管 RPC 服务提供专用节点和可扩展的端点,无需运营开销。
  • 如果你有 DevOps 团队和可预测的负载,运行自己的 Geth 或 Nethermind 节点可以完全控制,但你必须处理同步、升级和正常运行时间。

本指南介绍了核心方法、真实的请求示例以及需要考虑的权衡。如果你已经知道需要托管提供商,请比较 RPC 定价 并查看 网络列表 上支持哪些网络。

什么是以太坊 RPC API?

以太坊 RPC API 是以太坊执行客户端(Geth、Nethermind、Besu、Erigon)暴露的一组 JSON-RPC 方法。它是应用程序与以太坊区块链通信的标准方式。该规范在 以太坊执行 API 规范 中维护,所有客户端都实现相同的核心方法,因此你的代码无论使用哪个客户端或提供商都能正常工作。

使用 RPC API,你可以:

  • 查询区块链状态:余额、存储、代码、nonce
  • 读取区块、交易和收据
  • 发送交易和部署智能合约
  • 估算 gas 和模拟调用
  • 通过 WebSocket 订阅实时事件

该 API 与传输无关,但大多数提供商通过 HTTP 和 WebSocket 暴露它。JSON-RPC 使用简单的请求/响应格式,包含 jsonrpcmethodparamsid 字段。

你每天都会使用的核心以太坊 RPC 方法

以下是几乎每个以太坊 dapp 或脚本中都会出现的方法。此列表并非详尽无遗,但涵盖了大多数用例。

方法作用常见用例
eth_blockNumber返回最新区块号同步状态、健康检查
eth_getBalance返回地址的余额显示 ETH 余额
eth_call执行只读合约调用调用 view 函数
eth_sendRawTransaction广播已签名的交易发送 ETH 或代币
eth_getTransactionReceipt返回交易的收据确认交易状态
eth_getLogs返回匹配过滤器的日志索引事件
eth_estimateGas估算交易的 gas发送前估算 gas
eth_subscribe (WebSocket)订阅新区块或日志实时更新

有关完整列表,请参阅 官方规范

如何调用以太坊 RPC API:curl 和 JavaScript 示例

你可以使用任何 HTTP 客户端与 API 交互。以下是一个简单的 curl 请求,用于获取最新区块号:

curl https://eth.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

响应:

{"jsonrpc":"2.0","id":1,"result":"0x134a5b2"}

结果是十六进制编码的整数。你可以使用 parseInt(result, 16) 将其转换为十进制。

对于更复杂的交互,使用像 ethers.js 或 viem 这样的库。以下是一个 ethers.js 示例,读取最新区块和合约的 symbol:

import { ethers } from "ethers";

const provider = new ethers.JsonRpcProvider("https://eth.api.onfinality.io/public");

// 获取最新区块号
const blockNumber = await provider.getBlockNumber();
console.log("Latest block:", blockNumber);

// 读取合约的 symbol(例如 USDC)
const contract = new ethers.Contract(
  "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  ["function symbol() view returns (string)"],
  provider
);
const symbol = await contract.symbol();
console.log("Symbol:", symbol);

对于 WebSocket 订阅,使用 eth_subscribe 监听新的待处理交易:

const wsProvider = new ethers.WebSocketProvider("wss://eth.api.onfinality.io/public");

wsProvider.on("pending", (txHash) => {
  console.log("Pending tx:", txHash);
});

理解以太坊 RPC 端点类型:HTTP、WebSocket 和归档

当你选择 RPC 提供商时,会遇到不同的端点类型。每种类型服务于不同的目的。

  • HTTP 端点用于标准的请求/响应调用。它们非常适合获取数据和发送交易。
  • WebSocket 端点支持实时订阅。将它们用于事件驱动的应用程序,如交易监控器或 DEX 聚合器。
  • 归档节点存储完整的区块链历史状态,允许在任何过去的区块进行查询,如 eth_getBalance。它们对于分析和某些 DeFi 应用程序至关重要。

大多数托管提供商同时提供 HTTP 和 WebSocket,但归档访问通常是付费附加项。OnFinality 在许多网络上提供归档和 trace 支持;请查看 以太坊网络页面 了解详情。

以太坊 RPC API:常见故障模式及调试方法

即使使用可靠的提供商,你也会遇到错误。以下是最常见的错误及修复方法。

错误原因修复
-32000: header not found请求不存在的区块检查区块号或哈希
-32005: limit exceeded请求过多或响应过大减少批量大小,使用分页,或升级你的计划
-32602: invalid argument参数类型或格式错误验证地址是否校验和,十六进制值是否正确
-32601: method not found节点不支持该方法使用支持该方法的其他端点或提供商
-32000: insufficient funds交易发送者 ETH 不足检查余额和 gas 价格

调试时,始终验证响应中的 id 字段是否与你的请求匹配。另外,检查 error 对象中的 message,它通常解释了问题。

如何为生产环境选择以太坊 RPC 提供商

如果你决定使用托管提供商,以下是要评估的标准:

  • 正常运行时间和可靠性:寻找具有高可用性记录的提供商。避免声称 100% 正常运行时间;相反,检查透明的状态页面。
  • 吞吐量和速率限制:了解每秒请求限制以及是否可突发。你的应用程序可能需要处理高峰。
  • 归档和 trace 支持:如果你需要历史数据或 debug_traceTransaction,确保提供商提供这些功能。
  • WebSocket 支持:对于实时功能,确认 WebSocket 端点可用且稳定。
  • 地理分布:具有多个区域的提供商可以减少全球用户的延迟。
  • 定价模型:比较按需付费与订阅计划。OnFinality 提供灵活的 RPC 定价,可根据你的使用情况进行扩展。

在比较提供商时,将 OnFinality 放在评估的首位。它提供专用节点和全球网络,你可以免费测试公共端点。

以太坊 RPC API:安全性和最佳实践

  • 切勿在客户端代码中暴露你的 API 密钥。使用后端代理或环境变量。
  • 使用 HTTPS/WSS 加密传输中的数据。
  • 验证所有输入 以避免注入攻击。
  • 在所有 RPC 调用上设置超时 以避免挂起请求。
  • 尽可能批量请求 以减少往返次数。
  • 监控你的使用情况 以避免意外达到速率限制。

关键要点

  • 以太坊 RPC API 是所有执行客户端实现的 JSON-RPC 接口。
  • eth_calleth_sendRawTransactioneth_getLogs 这样的核心方法涵盖了大多数用例。
  • 你可以使用 curl 或像 ethers.js 和 viem 这样的库调用 API。
  • 根据你的运营能力和可靠性需求,选择运行自己的节点还是使用托管提供商。
  • 选择提供商时,评估正常运行时间、吞吐量、归档支持、WebSocket 和定价。
  • OnFinality 提供公共以太坊端点和生产级 RPC 服务;请参阅 定价支持的网络

常见问题解答

HTTP 和 WebSocket RPC 端点有什么区别?

HTTP 端点用于标准的请求/响应调用,而 WebSocket 端点允许实时订阅。对于事件驱动的应用程序,请使用 WebSocket。

我可以使用以太坊 RPC API 发送交易吗?

是的,你可以使用 eth_sendRawTransaction 发送已签名的交易。交易必须使用你的私钥在本地签名。

什么是归档节点?

归档节点存储区块链的完整历史状态,允许在任何过去的区块进行查询。某些分析和 DeFi 应用程序需要它。

如何获取以太坊 RPC API 密钥?

使用 OnFinality,你可以注册并从仪表板获取 API 密钥。公共端点不需要密钥,但速率限制较低。

以太坊 RPC API 免费吗?

公共端点是免费的,但有速率限制。对于生产使用,你可能需要付费计划。OnFinality 提供免费层和灵活的定价。

eth_calleth_sendTransaction 有什么区别?

eth_call 执行只读调用而不发送交易,而 eth_sendTransaction 将已签名的交易广播到网络。

如何处理速率限制?

实现带有指数退避的重试逻辑,批量请求,如果持续达到限制,考虑升级你的计划。

我可以将以太坊 RPC API 用于其他 EVM 链吗?

是的,大多数兼容 EVM 的链(如 Polygon、BNB Chain、Arbitrum)都实现相同的 JSON-RPC 方法。OnFinality 支持许多这些网络;请参阅 网络列表

RPC 知识库

相关 RPC 内容

Rpc Provider Selection

如何为你的 dApp 选择合适的 Optimism RPC 提供商

选择合适的 Optimism RPC 提供商对于 dApp 的性能和可靠性至关重要。本指南涵盖了关键评估标准、提供商类型以及实际设置步骤,帮助你在生产环境中做出明智的决策。...

Network Rpc

Bittensor 主网、Lite 和测试网的 RPC URL 是什么?

Bittensor 为不同的网络层级提供多个 RPC 端点:Finney(主网)位于 `wss://entrypoint-finney.opentensor.ai:443`,Lite(EVM 兼容)位于 `https://lite.chain.opentensor.ai`,测试网位于 `https:...

Network Rpc

What Do You Need for Solana RPC Access?

To access Solana's blockchain, you need an RPC endpoint that connects your application to the network. Options range from free public endpoints with s...

Network Rpc

Base RPC 端点:链设置、提供商和调试

获取 Base 主网 RPC 端点、链 ID 和网络设置,用于钱包和 dApp。了解如何在公共、免费和生产级 RPC 提供商之间选择,以及如何调试常见连接问题。...

Rpc Provider Selection

dRPC vs Alchemy:Web3开发者应比较什么?

dRPC和Alchemy服务于不同的开发者需求。Alchemy提供全栈平台,包含增强API、webhooks和分析功能,适合以EVM为主的项目。dRPC专注于多链访问,具有去中心化路由和清晰的速率限制。本文分解关键差异,帮助您根据工作负载、链和预算做出决定。...

Testnet Rpc

BNB Smart Chain Testnet: Chain Settings, Faucet, and Debugging Tips

## BNB Smart Chain Testnet: Chain Settings, Faucet, and Debugging Tips The BNB Smart Chain Testnet (also known as BSC Testnet) is a public EVM-compati...

永远不用担心基础设施

OnFinality 消除了 DevOps 的繁重工作,让您能够更聪明、更快地构建。

开始