摘要
BNB Smart Chain 公共 RPC URL 是一个共享的 HTTPS 端点,允许钱包、脚本和 dApp 读取链上数据并提交交易,而无需运行节点。OnFinality 为 BNB Smart Chain 主网提供的公共端点是 https://bnb.api.onfinality.io/public,链 ID 为 56,原生代币为 BNB。
公共端点适用于原型设计、钱包设置和低流量读取。对于生产流量、归档查询或 WebSocket 订阅,团队通常会转向托管 RPC API 或专用节点,以便控制容量并避免共享端点的争用。
链设置一览
如果你只需要从本页获取一件事,那就是连接详情。BNB Smart Chain 主网使用链 ID 56,原生代币 BNB(18 位小数),区块浏览器为 https://bscscan.com。OnFinality 发布了一个公共 HTTPS 端点,你可以直接将其放入钱包或脚本中:
| 设置 | 值 |
|---|---|
| 网络 | BNB Smart Chain 主网 |
| 链 ID | 56 |
| 原生代币 | BNB(18 位小数) |
| 公共 RPC URL | https://bnb.api.onfinality.io/public |
| 传输 | HTTP 和 WebSocket |
| 区块浏览器 | https://bscscan.com |
| 测试网链 ID | 97(tBNB) |
这个单一的 URL 足以读取余额、调用 eth_call、估算 gas 并广播已签名的交易。但它不是容量保证。公共端点是共享的,因此应将其视为起点,而不是生产系统的骨干。
何时适合使用公共端点
在将 URL 复制到配置文件之前,请确定你属于以下三种情况中的哪一种。
原型设计和本地开发。 你正在搭建 dApp、测试合约或检查余额。公共端点消除了同步节点的需要,而在 BNB Smart Chain 上,同步节点需要大量下载和持续的运营成本。使用它,快速推进,不要过度设计。
钱包和手动网络设置。 你正在将 BNB Smart Chain 添加到钱包或只需要偶尔读取的工具中。公共 RPC 在这里是合理的默认选择,上面的链 ID 和浏览器 URL 是大多数钱包所要求的。
生产流量、索引或交易。 你正在运行轮询区块的后端、回填历史的索引器、需要低延迟写入的机器人,或具有支持承诺的服务。此时,共享公共容量成为一种负担:你无法查看自己的使用情况,无法提高自己的限制,并且嘈杂的邻居会影响你。这时,托管 RPC API 或专用节点开始物有所值。如果你正在权衡这一步,RPC 提供商选择指南 介绍了相关标准,RPC 定价 展示了各层的结构。
一个有用的规则:如果你不好意思向用户解释请求失败的原因,那么你已经超出了公共端点的适用范围。
将 BNB Smart Chain 添加到钱包
大多数钱包接受自定义网络。字段直接映射到上面的表格。在 MetaMask 风格的 JSON 中,网络配置如下所示:
{
"chainId": "0x38",
"chainName": "BNB Smart Chain Mainnet",
"nativeCurrency": {
"name": "BNB Chain Native Token",
"symbol": "BNB",
"decimals": 18
},
"rpcUrls": ["https://bnb.api.onfinality.io/public"],
"blockExplorerUrls": ["https://bscscan.com"]
}
注意 0x38 是十六进制的 56。钱包期望十六进制形式;JSON-RPC 和大多数 SDK 期望十进制形式。混淆两者是最常见的设置错误之一。
对于测试网工作,同样的模式适用于链 ID 97、tBNB 代币、浏览器 https://testnet.bscscan.com 和测试网端点。请参阅 BNB Chain 测试网 RPC 页面 获取当前测试网 URL。
从代码调用端点
最快的健全性检查是原始 JSON-RPC 调用。以下请求当前区块号:
curl -s https://bnb.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
返回带有十六进制 result 的响应意味着端点可达且正在服务。如果收到错误对象,请先检查方法名和参数,然后再假设端点已关闭。
在 JavaScript 应用中,你很少手动调用 JSON-RPC。使用 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 block = await client.getBlockNumber()
console.log('BNB Smart Chain head:', block)
同一个端点也适用于 ethers、web3.js 和大多数 EVM 工具,因为 BNB Smart Chain 兼容 EVM。这种兼容性也是该链具有吸引力的原因:现有的以太坊合约和库通常只需极少的更改即可移植。
读取日志、归档数据和订阅
三种工作负载类型在公共端点上的行为不同,在决定使用之前值得了解。
eth_getLogs 和事件索引。 日志查询是最重的常见请求。在共享端点上,具有许多匹配事件的宽区块范围可能会很慢或被拒绝。如果你正在索引,请缩小范围、分页,并预期需要能够承受持续日志查询的提供商层级或专用节点。
归档和历史状态。 在旧区块读取状态需要归档节点。并非每个端点都保留完整历史。如果你的应用需要历史余额或回填,请在基于端点构建之前确认归档支持。OnFinality 的 BNB Smart Chain 页面 是检查当前功能的地方。
WebSocket 订阅。 公共 HTTP 端点是请求/响应模式。如果你需要 eth_subscribe 来获取新区块头或待处理交易,则需要 WebSocket 传输。OnFinality 为 BNB Smart Chain 支持 HTTP 和 WebSocket,但订阅量正是那种受益于托管或专用设置而非共享公共 URL 的工作负载。
故障模式及如何解读
当请求失败时,错误通常指向原因。下表将症状映射到可能的修复方法。
| 症状 | 可能原因 | 下一步 |
|---|---|---|
429 或速率限制错误 | 共享端点负载过高 | 退避、缓存读取,或迁移到托管层级 |
eth_getLogs 超时 | 区块范围太宽 | 分页范围并重试 |
method not found | 该端点不支持该方法 | 检查方法支持或使用暴露该方法的提供商 |
nonce too low | nonce 过期或重复发送 | 使用 pending 重新读取 eth_getTransactionCount |
| 订阅连接断开 | 对 eth_subscribe 使用了 HTTP | 切换到 WebSocket 传输 |
| 链错误/余额错误 | 链 ID 不匹配 | 确认链 ID 56(主网)或 97(测试网) |
大多数这些问题是配置或工作负载形态问题,而不是端点中断。在归咎于 URL 之前,先诊断请求。
从公共 URL 到生产 RPC
过渡与其说是一个单一时刻,不如说是一种模式。你从公共端点开始,注意到读取被缓存、写入被重试,最终你希望获得可见性和余量。此时你有两个主要选择。
托管 RPC API 为你提供一个带密钥的端点,具有你自己的使用情况,通常跨多个链,是需要可靠性而无需运行服务器的应用的常见下一步。专用节点 为对争用敏感的工作负载提供隔离容量,例如高频交易、重度索引或严格的数据驻留需求。两者都涵盖在 OnFinality 的 API 服务 和 专用节点 产品中,完整的链列表在 支持的 RPC 网络 页面上。
实用的迁移路径:
- 保留公共端点用于本地开发和 CI。
- 将预发布和生产读取迁移到带密钥的托管端点。
- 添加备用提供商或第二个区域,使单个端点不会成为单点故障。
- 将最重的工作负载(通常是索引或交易)迁移到专用节点。
- 添加对错误率和延迟的监控,以便在用户之前注意到性能下降。
关键要点
- BNB Smart Chain 主网使用链 ID 56、代币 BNB、浏览器
https://bscscan.com。 - OnFinality 公共端点是
https://bnb.api.onfinality.io/public,支持 HTTP 和 WebSocket。 - 公共端点非常适合原型设计、钱包设置和轻量读取,但它们是共享容量。
- 繁重的
eth_getLogs、归档读取和订阅是推动团队转向托管或专用 RPC 的工作负载。 - 测试网使用链 ID 97 和 tBNB;保持主网和测试网配置分开。
- 大多数故障是配置或工作负载形态问题,而不是端点停机。
常见问题
BNB Smart Chain 公共 RPC URL 可以免费使用吗? 它是一个共享的公共端点,旨在用于开发和轻量使用。对于生产流量,托管或专用计划可为你提供自己的容量和可见性。
BNB Smart Chain 的链 ID 是什么?
主网是 56(十六进制 0x38)。测试网是 97。
我可以使用公共端点进行 WebSocket 订阅吗? OnFinality 为 BNB Smart Chain 支持 HTTP 和 WebSocket,但持续的订阅工作负载更适合托管或专用设置。
为什么我的 eth_getLogs 调用超时?
区块范围通常对共享端点来说太宽。分页范围并重试,或将索引迁移到能够处理持续日志查询的提供商层级。
我需要归档节点吗? 仅当你需要在旧区块读取历史状态时。在基于端点构建回填之前,请在 BNB Smart Chain 页面 上确认归档支持。
如何从公共 RPC 迁移到生产环境? 从用于预发布和生产的带密钥托管端点开始,添加备用,然后将最重的工作负载迁移到专用节点。有关层级信息,请参阅 RPC 定价。