摘要
Base 是构建在 OP Stack 上的以太坊 L2,因此其 RPC 接口对任何以太坊开发者来说都很熟悉:基于 HTTP 的 JSON-RPC、相同的 eth_* 方法,以及主网的链 ID 8453。本文介绍了您需要的 Base 节点 RPC 端点设置、如何将 Base 添加到钱包、如何发送第一个请求,以及如何调试生产环境中最常见的故障。它还解释了何时公共端点就足够,以及何时专用 Base 节点是更好的选择。
Base 是构建在 OP Stack 上的以太坊 Layer 2,这意味着其节点 RPC 接口刻意保持熟悉:基于 HTTP 的标准 JSON-RPC、您已经在以太坊上使用的相同 eth_* 方法名,以及在此基础上少量 OP Stack 特有的方法。如果您正在配置钱包、后端索引器或测试套件,您主要需要正确的链设置、可用的端点,以及请求失败时清晰的调试路径。
本页面是 Base 节点 RPC 的工作参考。它涵盖了您粘贴到钱包中的设置、如何使用 curl 和 viem 发送请求、调用失败时检查什么,以及如何在公共端点和专用 Base 节点之间做出选择。
链设置一览
在编写任何代码之前,请确认网络参数。Base 主网和 Base Sepolia 是独立的网络,具有不同的链 ID,因此指向错误网络的钱包或 SDK 看起来像是在工作,但返回的是错误数据。
| 设置 | Base 主网 | Base Sepolia |
|---|---|---|
| 链 ID | 8453 | 84532 |
| 原生货币 | ETH(18 位小数) | ETH(18 位小数) |
| 区块浏览器 | https://basescan.org | https://sepolia.basescan.org |
| RPC 传输 | HTTP (JSON-RPC) | HTTP (JSON-RPC) |
| 典型用途 | 生产应用、真实价值 | 开发、测试、水龙头 |
快速健全性检查:调用 eth_chainId 并确认主网返回 0x2105(十进制 8453)或 Sepolia 返回 0x14a34(84532)。如果值与您预期的网络不匹配,请停止并修复配置,然后再调试其他任何内容。
将 Base 添加到钱包
大多数钱包接受自定义网络。字段直接映射到上表:
- 网络名称:Base
- RPC URL:您的 Base 端点
- 链 ID:8453
- 货币符号:ETH
- 区块浏览器:https://basescan.org
对于 Base Sepolia,使用链 ID 84532 和 Sepolia 浏览器。如果您正在构建钱包连接流程,可以以编程方式请求网络,而不是要求用户输入:
await window.ethereum.request({
method: "wallet_addEthereumChain",
params: [{
chainId: "0x2105",
chainName: "Base",
nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
rpcUrls: ["https://base.api.onfinality.io/public"],
blockExplorerUrls: ["https://basescan.org"]
}]
});
如果您使用 OnFinality 的 Base,公共端点是 https://base.api.onfinality.io/public,Base Sepolia 的等效端点是 https://base-sepolia.api.onfinality.io/public。对于生产流量,专用 Base 节点为您提供了一个私有端点,您可以在不触及用户配置的情况下轮换。有关当前详细信息,请参阅 Base 网络页面 和 Base Sepolia 网络页面。
发送您的第一个 Base RPC 请求
确认端点是否正常工作的最快方法是单个 curl 调用。这可以一次性检查连接性、链 ID 和最新区块:
curl -s https://base.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
curl -s https://base.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
健康的响应会返回一个包含 result 字段的 JSON 对象。如果您得到的是错误对象,error.code 和 error.message 会告诉您问题出在请求、端点还是网络上。
在应用程序代码中,使用 viem 的相同调用如下所示:
import { createPublicClient, http } from "viem";
import { base } from "viem/chains";
const client = createPublicClient({
chain: base,
transport: http("https://base.api.onfinality.io/public")
});
const blockNumber = await client.getBlockNumber();
const chainId = await client.getChainId();
console.log({ chainId, blockNumber });
由于 Base 遵循以太坊约定,大多数以太坊工具无需 Base 特定适配器即可工作。主要区别在于链 ID、浏览器 URL 和少量 OP Stack 方法。
实践中哪些 Base RPC 方法重要
您不需要每个方法。大多数应用程序依赖一小组方法,了解哪些方法更重有助于您规划容量。
| 方法 | 作用 | Base 注意事项 |
|---|---|---|
eth_chainId | 返回链 ID | 用于验证您是否在 8453 或 84532 上 |
eth_blockNumber | 最新区块高度 | 开销低,适合健康检查 |
eth_getBalance | 账户余额 | 钱包流程中常见 |
eth_call | 只读合约调用 | 大多数 dapp 读取的核心 |
eth_getLogs | 查询事件日志 | 最重的常见方法;按区块范围限定 |
eth_getTransactionReceipt | 交易状态 | 发送交易后轮询 |
eth_estimateGas | Gas 估算 | 发送前运行 |
eth_sendRawTransaction | 广播已签名交易 | 返回交易哈希,而非收据 |
eth_getLogs 值得特别关注。宽泛的区块范围和宽泛的主题过滤器可能返回大量负载,并且是超时的常见原因。缩小范围、按地址过滤,并在可能的情况下分页。
常见 Base RPC 故障的调试路径
当出现问题时,错误消息通常会指出问题所在的层。在假设端点宕机之前,请先查看此表。
| 症状 | 可能原因 | 首先检查 |
|---|---|---|
chainId 不匹配 | 配置了错误的网络 | 调用 eth_chainId,与 8453/84532 比较 |
method not found | 拼写错误或不支持的方法 | 确认方法名和端点传输 |
eth_getLogs 超时 | 区块范围太宽 | 缩小范围,添加地址过滤器 |
nonce too low | 交易卡住后 nonce 过时 | 使用 pending 重新读取 eth_getTransactionCount |
insufficient funds | Gas 或价值超过余额 | 检查余额和 Gas 估算 |
读取时 result 为空 | 合约未在此网络部署 | 在正确的浏览器上验证地址 |
| 间歇性 429 | 共享端点速率限制 | 将重读取移至专用节点 |
两种模式会导致大多数混淆。首先,混合主网和测试网数据:存在于 Base 主网上的合约地址不会存在于 Base Sepolia 上,反之亦然。其次,将 eth_sendRawTransaction 视为最终结果:它立即返回哈希,但您必须轮询 eth_getTransactionReceipt 才能知道交易是否成功。
公共端点还是专用 Base 节点?
这是大多数团队在应用从原型阶段推进后面临的决定。正确答案取决于您的工作负载形态,而不是单个基准测试。
| 工作负载 | 公共端点 | 专用 Base 节点 |
|---|---|---|
| 原型和演示 | 通常可以 | 尚不需要 |
| 低流量读取 | 通常可以 | 可选 |
重度 eth_getLogs 索引 | 负载下风险高 | 推荐 |
| 高频交易或机器人 | 适用共享限制 | 推荐 |
| 合规或数据隔离需求 | 不适合 | 推荐 |
| 可预测的生产流量 | 共享容量 | 推荐 |
一个有用的规则:如果您的应用程序可靠性依赖于共享端点无法保证的特定请求模式,请将该模式隔离到专用节点上,并将其他所有内容留在公共端点上。这使成本与实际需求成比例。OnFinality 同时提供共享 RPC API 访问和专用 Base 节点;有关当前选项,请参阅 RPC 定价,有关完整列表,请参阅 支持的 RPC 网络。
WebSocket 和订阅注意事项
Base 支持基于 HTTP 的 JSON-RPC,这是大多数应用程序使用的。如果您需要推送式更新,请在设计订阅之前检查您的提供商是否为 Base 暴露 WebSocket 传输。对 eth_blockNumber 或 eth_getTransactionReceipt 进行 HTTP 轮询是一种可靠的备用方案,并且在故障时更容易推理。
如果您确实使用订阅,请规划重连逻辑。长连接会断开,而静默停止传递事件的订阅比大声失败的订阅更糟糕。将连接视为需要重新建立的东西。
启动前的操作检查清单
在将生产流量指向任何 Base 端点之前,请确认以下内容:
- 链 ID 在运行时验证,而不仅仅是在配置中。
- 端点可从您的部署环境访问,而不仅仅是从您的笔记本电脑。
- 诸如
eth_getLogs之类的重方法已限定范围并分页。 - 您有备用端点或备用计划。
- 错误日志记录包含 JSON-RPC 错误代码,而不仅仅是通用消息。
- 您知道每个合约地址属于哪个网络。
一个简单的监控探针可以让您提前发现问题:
async function probe(endpoint) {
const res = await fetch(endpoint, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "eth_blockNumber", params: [] })
});
const json = await res.json();
return { ok: res.ok && !!json.result, block: json.result };
}
定期运行此探针并在重复失败时发出警报。这是一小段代码,可以及早捕获大量事件。
关键要点
- Base 使用标准的以太坊 JSON-RPC;主网链 ID 为 8453,Sepolia 为 84532。
- 在运行时验证
eth_chainId,以避免静默查询错误的网络。 eth_getLogs是最常见的超时来源;限定区块范围和过滤器。eth_sendRawTransaction返回哈希,而非收据;轮询收据以确认成功。- 公共端点适合原型和轻量读取;专用 Base 节点适合重度、可预测或隔离的工作负载。
- OnFinality 提供 Base RPC API 访问和专用节点;请查看 RPC 定价 和 支持的网络。
常见问题
Base 链 ID 是什么?
Base 主网使用链 ID 8453。Base Sepolia 使用 84532。始终在运行时使用 eth_chainId 确认。
Base RPC 端点是什么? 任何为 Base 网络提供服务的 JSON-RPC 端点。OnFinality 暴露了一个公共 Base 端点和专用选项;有关当前详细信息,请参阅 Base 网络页面。
我可以将以太坊工具与 Base 一起使用吗? 可以。Base 遵循以太坊约定,因此一旦设置了正确的链 ID 和端点,大多数以太坊库和钱包都可以工作。
为什么我的 Base 交易显示为待处理?
eth_sendRawTransaction 在交易被包含之前返回哈希。轮询 eth_getTransactionReceipt 直到返回收据,如果停滞,请检查 Gas 设置。
我需要专用 Base 节点吗? 仅当您的工作负载需要私有容量、隔离或在重度读取下可预测的行为时。原型和轻量应用通常不需要。
如何调试 Base RPC 超时?
从方法开始。宽范围的 eth_getLogs 是常见罪魁祸首;在调查端点本身之前,缩小范围并添加过滤器。