摘要
BNB Smart Chain (BSC) 提供与 EVM 兼容的 JSON-RPC 接口,因此大多数以太坊工具在将其指向 BSC 端点并设置链 ID 56 后即可使用。本页涵盖端点格式、钱包和库配置、对 BSC 应用重要的方法,以及如何调试最可能遇到的故障。
您可以先使用公共 OnFinality 端点进行快速测试,然后在需要可预测的吞吐量、归档访问或用于生产流量的 WebSocket 订阅时,迁移到托管的 RPC API 或专用节点。
BNB Smart Chain (BSC) 使用与以太坊相同的 JSON-RPC 方言,这就是为什么大多数开发者只需更改一个 URL 就能将现有的 EVM 工具连接到它。摩擦通常出现在后期:钱包静默指向错误的链、eth_getLogs 调用超时,或者 WebSocket 订阅在负载下断开。本页首先提供端点设置,然后是调试路径和生产决策点。
链设置一览
在将 BSC 添加到钱包、库或后端配置时,请使用这些值。它们与网络的规范 EVM 参数匹配。
| 设置 | BNB Smart Chain 主网 | BNB Chain 测试网 |
|---|---|---|
| 链 ID | 56 | 97 |
| 链名称 | BNB Smart Chain Mainnet | BNB Smart Chain Testnet |
| 原生货币 | BNB(18 位小数) | tBNB(18 位小数) |
| 区块浏览器 | https://bscscan.com | https://testnet.bscscan.com |
| 传输 | HTTP, WebSocket | HTTP |
| 公共 OnFinality 端点 | https://bnb.api.onfinality.io/public | https://bnb-testnet.api.onfinality.io/public |
如果您在测试网上构建,请在代码库中将两个配置分开。大量“交易失败”报告源于将测试网私钥用于主网端点,或反之。
在编写代码之前选择正确的连接类型
在复制端点之前,请确定您的应用实际需要哪种连接。这个选择比任何提供商标志更能决定成本和可靠性。
- 公共共享端点 — 适用于脚本、原型、钱包测试和低容量读取。不适用于持续的生产流量或大型日志查询。
- 托管 RPC API — 带有密钥的端点,具有更高的限制、监控和支持。大多数 dApp、机器人和后端的正确默认选择。有关计划形态,请参阅 RPC 定价。
- 专用节点 — 私有端点后面的您自己的 BSC 节点。当您需要一致的吞吐量、归档历史、trace/debug 方法或与其他租户隔离时,请选择此选项。请参阅 专用节点。
一个快速规则:如果您的应用可以容忍偶尔的重试,并且您没有运行繁重的 eth_getLogs 或 WebSocket 工作负载,那么托管 RPC API 通常就足够了。如果您正在索引、运行交易机器人或需要历史状态,请计划专用基础设施。
在钱包和库中配置 BSC
钱包网络配置
大多数 EVM 钱包接受自定义网络对象。以下字段是重要的:
{
"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"]
}
请注意,chainId 是十六进制(0x38 = 56)。拒绝该网络的钱包通常是因为链 ID 是十进制或 RPC URL 无法访问。
viem / ethers
一旦您提供链 ID 和传输,这两个库都可以与 BSC 一起使用:
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('BSC head:', block);
对于 ethers v6,将相同的 URL 传递给 JsonRpcProvider,并在发送交易之前确认报告的 network.chainId 是 56n。
原始 JSON-RPC 检查
当出现问题时,在责怪您的应用之前直接测试端点:
curl -s https://bnb.api.onfinality.io/public \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
健康的响应返回 "result":"0x38"。如果您收到超时或 HTML 错误页面,问题出在端点或网络路径,而不是您的合约调用。
在 BSC 上行为不同的方法
BSC 与 EVM 兼容,但有几个方法值得关注,因为它们是生产问题的常见来源。
| 方法 | 典型用途 | 注意事项 |
|---|---|---|
eth_getLogs | 索引事件、回填 | 宽区块范围可能在共享端点上超时;分块范围 |
eth_call | 读取合约 | 如果目标区块在非归档节点上被修剪,则失败 |
eth_getBalance | 钱包余额 | 历史余额需要归档访问 |
eth_subscribe | 实时事件 | 需要 WebSocket 传输;并非所有端点都暴露它 |
debug_traceTransaction | 深度调试 | 通常仅在专用/归档节点上可用 |
eth_sendRawTransaction | 广播 | 拒绝通常意味着 nonce 或 gas 问题,而不是 RPC 失败 |
如果您的工作负载依赖于最后三行,请在承诺提供商之前确认支持。OnFinality 的 BNB Smart Chain 页面 列出了该网络的传输和端点详细信息。
常见 BSC RPC 故障的调试路径
按顺序处理这些症状。大多数问题在前两步解决。
| 症状 | 可能原因 | 首次修复 |
|---|---|---|
chainId 不匹配 | 钱包或配置中的网络错误 | 验证 0x38(主网)或 0x61(测试网) |
eth_getLogs 超时 | 区块范围太宽 | 拆分为更小的范围并分页 |
nonce too low | 待处理交易或重复使用的 nonce | 使用 pending 重新读取 eth_getTransactionCount |
insufficient funds | Gas 价格飙升或代币错误 | 检查 BNB 余额和当前 gas 价格 |
| WebSocket 断开连接 | 空闲超时或传输不稳定 | 添加重连逻辑和心跳 |
method not found | 端点缺少 trace/debug | 迁移到启用了这些方法的专用节点 |
空的 eth_call 结果 | 该区块的状态被修剪 | 使用支持归档的端点 |
一个有用的习惯:在每次失败的请求旁边记录端点 URL 和链 ID。这决定了是五分钟修复还是一个下午的猜测。
何时从公共端点迁移到托管或专用
公共端点是一个好的起点,但它们是共享的。一旦您的流量变得不可预测,您就开始与同一 URL 上的其他人竞争容量。需要关注的信号:
- 高峰时段速率限制响应增加。
eth_getLogs或归档查询间歇性失败。- WebSocket 订阅在没有明确网络原因的情况下断开。
- 需要公共端点不暴露的 trace/debug 方法。
此时,托管 RPC API 为您提供一个带有更清晰限制和监控的密钥端点,而专用节点为您提供隔离的容量以及对可用方法和历史的控制。OnFinality 在其 RPC API 服务 中提供两者,您可以在 定价页面 上比较计划形态。
发布前的操作清单
- 在配置中固定链 ID 和端点,而不是分散的常量。
- 添加备用端点,以便单个提供商中断不会导致应用宕机。
- 分块
eth_getLogs调用并限制每个请求的区块范围。 - 为 WebSocket 订阅实现重连逻辑。
- 监控每个方法的错误率和延迟,而不仅仅是整体正常运行时间。
- 严格分开测试网和主网配置。
- 如果您计划索引历史,请尽早确认归档和 trace 需求。
关键要点
- BNB Smart Chain 使用链 ID 56(主网)和 97(测试网),原生货币为 BNB。
- 公共 OnFinality 端点
https://bnb.api.onfinality.io/public适用于测试;生产工作负载通常需要托管或专用端点。 eth_getLogs、归档读取和 WebSocket 订阅是最有可能迫使基础设施升级的方法。- 大多数“RPC 错误”实际上是链 ID、nonce 或 gas 问题——在更换提供商之前检查这些。
- 使用 BNB Smart Chain 网络页面 和 支持的网络列表 确认端点和传输详细信息。
常见问题解答
BNB Smart Chain 的 RPC URL 是什么?
公共 OnFinality 端点是 https://bnb.api.onfinality.io/public。对于生产环境,请使用来自提供商仪表板的带密钥的托管端点或专用节点 URL。
BNB Smart Chain 的链 ID 是什么?
主网是 56(0x38)。测试网是 97(0x61)。
BSC 支持 WebSocket RPC 吗?
是的,BSC 支持 WebSocket 传输,这是 eth_subscribe 所需的。在依赖它之前,请确认您选择的端点暴露了 WS。
为什么我的 eth_getLogs 调用在 BSC 上超时?
BSC 快速生成区块,因此宽区块范围会产生大量结果集。分块范围并分页。如果仍然失败,您可能需要具有更高限制的专用端点。
我可以将以太坊工具与 BSC 一起使用吗?
是的。BSC 与 EVM 兼容,因此一旦设置链 ID 和 RPC URL,viem、ethers、Hardhat 和 Foundry 都可以工作。
我需要为 BSC 使用归档节点吗?
仅当您查询旧区块的历史状态或余额时。标准节点会修剪该数据,因此归档访问需要提供它的提供商。
后续步骤
如果您仍在原型设计,请从公共端点和上面的配置片段开始。如果您正在准备生产,请查看 如何选择 RPC 提供商,然后比较 BSC 的 RPC 定价 和 专用节点 选项。对于测试网工作,BNB Chain 测试网页面 有匹配的设置。