摘要
本页面解释了 BNB Smart Chain(BNB Chain)的 RPC 端点是什么,如何连接主网和测试网,以及如何在公共、共享和专用基础设施之间进行选择。它涵盖了链设置、一个可用的 JSON-RPC 示例、WebSocket 支持以及开发者最常遇到的故障模式。在将钱包、后端服务或索引器连接到 BNB Chain 时,可将其作为参考。
如果你搜索了“RPC BNB”,你可能想要以下两件事之一:连接到 BNB Smart Chain 的确切设置,或者一种明确的方法来决定为你的应用使用哪个端点。本页面为你提供了两者。它从可以粘贴到钱包或配置中的链设置开始,然后逐步介绍端点选项、一个可用的请求示例,以及团队从快速测试转向真实流量时最常出现的故障模式。
BNB Smart Chain(通常称为 BSC,是更广泛的 BNB Chain 生态系统的一部分)是一个 EVM 兼容网络。这意味着任何支持标准以太坊 JSON-RPC 的工具——ethers、viem、web3.js、Hardhat、Foundry、MetaMask——只要将其指向 BNB Chain RPC URL,就可以与之通信。你会注意到的主要区别是链 ID、原生代币、区块浏览器,以及某些工作负载(日志查询、归档读取)在负载下的行为方式。
链设置一览
在将 BNB Smart Chain 添加到钱包、后端配置或部署脚本时,请使用这些值。它们与 OnFinality 为 BNB Chain 发布的网络配置相匹配。
| 设置 | BNB Smart Chain 主网 | BNB Smart Chain 测试网 |
|---|---|---|
| 链 ID | 56 | 97 |
| 链名称 | BNB Smart Chain Mainnet | BNB Smart Chain Testnet |
| 原生货币 | BNB(18 位小数) | tBNB(18 位小数) |
| 区块浏览器 | https://bscscan.com | https://testnet.bscscan.com |
| 公共 RPC(OnFinality) | https://bnb.api.onfinality.io/public | https://bnb-testnet.api.onfinality.io/public |
| 传输方式 | HTTP, WebSocket | HTTP |
关于此表的一些实用说明:
- 链 ID 是最常导致“错误网络”错误的字段。如果钱包或 SDK 在 56 上,但你的合约部署在 97 上,交易将失败或落在错误的链上。
- 原生代币符号对于 gas 估算和任何显示余额的内容都很重要。在测试网上,它是 tBNB,而不是 BNB。
- 上面的公共端点适用于开发、脚本和低容量读取。对于生产流量,请计划使用托管或专用端点——请参阅下一节。
公共端点何时足够,何时不够
这是大多数读者实际需要做出的决定。正确的答案更多地取决于你的工作负载形态,而不是网络本身。
公共端点通常在以下情况下足够:
- 你正在进行原型设计、运行本地脚本或测试合约部署。
- 你每分钟读取少量余额或调用几个视图函数。
- 你在连接其他任何东西之前验证链设置是否正确。
在以下情况下,请转向托管或专用端点:
- 你运行一个为许多用户提供服务的后端、一个机器人或一个索引器。
- 你依赖
eth_getLogs在宽区块范围内进行查询,这对任何共享节点都是沉重的负担。 - 你需要归档数据(历史状态)或 trace/debug 方法。
- 你需要 WebSocket 订阅,并希望获得稳定的连接而不是共享连接。
- 你想要可预测的吞吐量,并在出现问题时有一个明确的地方寻求帮助。
OnFinality 提供 BNB Chain RPC 作为托管 API 服务和专用节点基础设施。对于大多数团队来说,托管 API 是更快的途径;当你需要隔离、自定义配置或特定的容量配置时,专用节点才有意义。你可以在 RPC 定价页面 上比较计划,并查看 支持的 RPC 网络 的完整列表。
如果你仍在一般性地决定提供商,RPC 提供商选择指南 更深入地介绍了评估标准。对于 BNB Chain 具体而言,BNB Chain 网络页面 列出了端点和传输详细信息。
发出你的第一个请求
确认端点是否正常工作的最快方法是单个 JSON-RPC 调用。这会向节点请求当前区块号:
curl -X POST https://bnb.api.onfinality.io/public \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
健康的响应看起来像一个十六进制区块号:
{"jsonrpc":"2.0","id":1,"result":"0x2a1f3c4"}
如果你得到 result 字段,则你的端点和链设置正常工作。如果你得到错误对象,请跳转到下面的故障排除部分。
在 JavaScript 中,通过 viem 的相同调用如下所示:
import { createPublicClient, http } from 'viem'
import { bsc } from 'viem/chains'
const client = createPublicClient({
chain: bsc,
transport: http('https://bnb.api.onfinality.io/public'),
})
const blockNumber = await client.getBlockNumber()
console.log(blockNumber)
对于钱包,网络配置是相同的数据,但形式不同:
{
"chainId": "0x38",
"chainName": "BNB Smart Chain Mainnet",
"nativeCurrency": { "name": "BNB", "symbol": "BNB", "decimals": 18 },
"rpcUrls": ["https://bnb.api.onfinality.io/public"],
"blockExplorerUrls": ["https://bscscan.com"]
}
注意 0x38 是十六进制的 56。钱包期望十六进制形式;大多数 SDK 接受十进制形式。混合两者是常见的混淆来源。
WebSocket 和订阅支持
BNB Chain 支持 HTTP 和 WebSocket 传输。HTTP 是请求/响应:你请求,节点回答,连接关闭。WebSocket 保持连接打开,以便节点可以向您推送事件——新区块、待处理交易或匹配过滤器的日志。
在以下情况下使用 WebSocket:
- 实时响应新区块(例如,对每个区块采取行动的机器人)。
- 日志订阅,而不是定时轮询
eth_getLogs。 - 对于高频读取,降低开销,因为每次打开新的 HTTP 连接是浪费的。
使用 ethers 的最小订阅如下所示:
import { WebSocketProvider } from 'ethers'
const provider = new WebSocketProvider('wss://bnb.api.onfinality.io/public')
provider.on('block', (blockNumber) => {
console.log('new block', blockNumber)
})
两个操作注意事项。首先,WebSocket 连接可能会断开;你的客户端应该重新连接并重新订阅,而不是假设流是永久的。其次,如果你运行许多订阅,这表明你可能需要专用端点而不是共享端点。
常见故障模式及如何解读
大多数“RPC BNB”问题都属于少数几类。以下是如何快速区分它们。
| 症状 | 可能原因 | 检查内容 |
|---|---|---|
chainId 不匹配或钱包中显示“错误网络” | 钱包设置为不同的链 | 确认链 ID 56(主网)或 97(测试网) |
method not found | 该节点层级不支持该方法 | 先尝试标准方法;检查是否需要归档或 trace 支持 |
eth_getLogs 超时 | 区块范围对于共享节点来说太宽 | 缩小范围,或迁移到专用端点 |
| 间歇性 429 / 速率错误 | 共享端点负载过高 | 减少轮询、批量请求或升级计划 |
| 旧状态返回空结果 | 节点不是归档节点 | 如果需要历史状态,请请求归档访问 |
| WebSocket 断开连接 | 空闲或不稳定的连接 | 添加带退避的重连逻辑 |
出现问题时快速诊断顺序:
- 运行上面的
eth_blockNumbercurl。如果失败,问题在于连接性或端点,而不是你的合约。 - 运行
eth_chainId并确认主网返回0x38。如果不是,则你指向了错误的网络。 - 如果简单调用有效但日志查询失败,问题通常是查询形态或节点层级,而不是端点本身。
- 如果本地一切正常但生产环境失败,请比较两个环境之间的请求量和并发性。
在共享、托管和专用之间选择
一旦你完成了原型设计,决定主要涉及隔离、容量以及你希望承担多少运维工作。
| 选项 | 最适合 | 需要权衡的取舍 |
|---|---|---|
| 公共端点 | 脚本、测试、低容量读取 | 共享容量;不适合持续的生产负载 |
| 托管 RPC API(OnFinality) | 大多数生产应用、机器人、后端 | 你共享基础设施,但获得托管的可靠性和支持 |
| 专用节点(OnFinality) | 高吞吐量、归档、trace 或隔离工作负载 | 成本更高;你获得可预测的、隔离的容量 |
| 自托管节点 | 有特定控制或合规需求的团队 | 你负责同步、升级、监控和待命 |
一个有用的经验法则:如果你的应用有用户在等待响应,或者有一个不能错过区块的机器人,不要将其运行在公共端点上。首先迁移到托管 API,只有当你能指出具体原因——归档读取、trace 调用、持续高请求率或需要隔离时——才使用专用节点。
发布前的操作检查清单
在将生产流量指向任何 BNB Chain 端点之前,请确认以下内容:
- 每个环境(主网和测试网)中的链 ID 和原生代币正确。
- 你有一个备用端点或提供商,以防主端点出现问题。
- 你的日志查询使用有界区块范围,并且不会在每次调用时扫描整个链历史。
- WebSocket 客户端自动重新连接并重新订阅。
- 你监控错误率和延迟,而不仅仅是正常运行时间。
- 你知道你的工作负载需要哪些方法(标准、归档、trace),并且你的端点支持它们。
一个可以按计划运行的简单监控探针:
#!/usr/bin/env bash
RESP=$(curl -s -X POST https://bnb.api.onfinality.io/public \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}')
echo "$RESP" | grep -q '"result"' && echo "OK" || echo "FAIL: $RESP"
从与你的应用相同的区域运行类似这样的命令,以便你测量的延迟反映实际情况。
关键要点
- BNB Smart Chain 与 EVM 兼容,因此一旦设置了正确的链 ID(主网 56,测试网 97)和 RPC URL,标准的以太坊 JSON-RPC 工具就可以工作。
- 公共端点适用于开发和低容量读取;生产应用、机器人和索引器应使用托管或专用端点。
- WebSocket 支持对于实时区块和日志订阅很重要;请计划重连。
- 大多数故障可追溯到链 ID 不匹配、不支持的方法、宽日志查询或共享端点速率限制。
- OnFinality 提供 BNB Chain RPC 作为托管 API 和专用节点;有关详细信息,请参阅 RPC 定价 和 支持的网络。
常见问题解答
BNB Smart Chain 的 RPC URL 是什么?
OnFinality 为主网发布了公共端点 https://bnb.api.onfinality.io/public,为测试网发布了 https://bnb-testnet.api.onfinality.io/public。对于生产环境,请使用来自 BNB Chain 网络页面 的托管或专用端点。
BNB Chain 的链 ID 是什么?
BNB Smart Chain 主网使用链 ID 56(十六进制为 0x38)。BNB Smart Chain 测试网使用链 ID 97(十六进制为 0x61)。
BNB Chain RPC 支持 WebSocket 吗? 是的。OnFinality 的 BNB Chain 主网端点支持 HTTP 和 WebSocket 传输。在发布的配置中,测试网仅支持 HTTP。
为什么 eth_getLogs 在 BNB Chain 上超时?
宽区块范围开销很大。共享节点可能会拒绝或超时大范围查询。缩小范围、分页,或者如果需要广泛的历史查询,请迁移到专用端点。
我需要为 BNB Chain 使用归档节点吗? 仅当你需要历史状态时——旧区块的余额或合约存储。标准端点提供最近状态;归档访问是一项单独的能力。
我可以将 MetaMask 与 BNB Chain RPC 端点一起使用吗? 是的。添加一个自定义网络,链 ID 为 56,RPC URL 和 BscScan 浏览器 URL。上面的钱包配置示例显示了确切的字段。
如何在不花费真实 BNB 的情况下测试 BNB Chain? 使用 BNB Smart Chain 测试网(链 ID 97),从水龙头获取 tBNB,并将你的应用指向测试网端点。请参阅 BNB Chain 测试网页面。
何时应从公共端点迁移到专用节点? 当你具有持续的请求量、需要归档或 trace 方法、需要隔离或想要可预测的容量时。在此之前,托管 API 通常是正确的下一步——请参阅 专用节点 了解何时隔离是值得的。