摘要
BNB Smart Chain 测试网(链 ID 97)使用 tBNB 作为其原生货币,是在主网之前测试 BSC 合约、钱包和索引器的标准环境。您需要正确的 RPC URL、链 ID、符号和浏览器 URL,才能将其添加到钱包或让开发框架指向它。
本参考涵盖了确切的链设置、可用于入门的公共端点、钱包和代码配置示例、水龙头和调试说明,以及共享公共端点不再适合您工作负载的临界点。
链设置一览
如果您只需要将这些值粘贴到钱包或配置文件中,它们就在这里。BNB Smart Chain 测试网是 BSC 测试环境,它足够接近地镜像主网行为,以便在部署到生产环境之前验证合约、钱包、索引器和机器人。
| 设置 | 值 |
|---|---|
| 网络名称 | BNB Smart Chain Testnet |
| 链 ID | 97 |
| 原生货币 | tBNB |
| 小数位 | 18 |
| 区块浏览器 | https://testnet.bscscan.com |
| 公共 RPC 端点 | https://bnb-testnet.api.onfinality.io/public |
| 传输 | HTTP JSON-RPC |
在进一步操作之前,快速检查一下:主网 BSC 使用链 ID 56 和 BNB 符号,而测试网使用链 ID 97 和 tBNB。混淆这两者是最常见的“错误网络”错误、余额为空以及交易看似成功但从未出现在预期位置的原因。
公共测试网端点何时足够,何时不够
上面的公共端点适合学习、快速脚本和低容量 CI 运行。它并不是所有工作负载的长期正确选择。使用以下内容来决定下一步该做什么。
- 本地开发和一次性脚本: 公共端点通常足够。您每分钟发送少量请求,不关心共享吞吐量。
- 在每个拉取请求上运行的 CI 管道: 共享端点在负载下可能会受到速率限制或变慢,从而导致测试不稳定。考虑使用专用端点,以便测试运行与其他流量隔离。
- 索引器、子图和回填作业: 这些会发出大型
eth_getLogs范围和存档式查询。公共端点通常会限制范围大小或区块历史。具有存档访问权限的专用节点是更安全的选择。 - 交易机器人和负载测试: 如果您正在针对测试网模拟生产流量,您需要可预测的吞吐量和自己的连接预算。共享公共端点并非为此设计。
- 钱包和 dApp QA: 公共端点适合手动测试,但如果您的 QA 团队运行并行会话,专用端点可以避免一个测试人员占用另一个测试人员的资源。
如果上述后四项中的任何一项适用,请在围绕共享端点构建之前查看专用节点和RPC 定价。有关端点类型的更广泛比较,请参阅如何选择 RPC 提供商。
将 BNB Smart Chain 测试网添加到钱包
大多数 EVM 钱包接受相同的字段。在 MetaMask 中,打开网络选择器,选择“添加网络”或“手动添加网络”,然后输入上表中的值。钱包将针对 RPC URL 调用 eth_chainId,以确认在保存之前返回 0x61(十进制 97)。
如果您以编程方式配置钱包,标准的 wallet_addEthereumChain 负载如下所示:
{
"method": "wallet_addEthereumChain",
"params": [
{
"chainId": "0x61",
"chainName": "BNB Smart Chain Testnet",
"nativeCurrency": {
"name": "BNB Chain Native Token",
"symbol": "tBNB",
"decimals": 18
},
"rpcUrls": ["https://bnb-testnet.api.onfinality.io/public"],
"blockExplorerUrls": ["https://testnet.bscscan.com"]
}
]
}
请注意,这里的 chainId 是十六进制编码的(0x61),而大多数配置文件和仪表板期望十进制 97。两者都指同一个网络;只有当工具静默期望一种格式时,不匹配才会产生影响。
将端点接入代码
对于 JavaScript 和 TypeScript 项目,将客户端指向测试网端点并传递链 ID 97。使用 viem:
import { createPublicClient, http } from 'viem'
import { bscTestnet } from 'viem/chains'
const client = createPublicClient({
chain: bscTestnet,
transport: http('https://bnb-testnet.api.onfinality.io/public')
})
const blockNumber = await client.getBlockNumber()
console.log('BSC testnet head:', blockNumber)
使用 ethers v6:
import { JsonRpcProvider } from 'ethers'
const provider = new JsonRpcProvider(
'https://bnb-testnet.api.onfinality.io/public',
{ chainId: 97, name: 'bnb-testnet' }
)
const network = await provider.getNetwork()
console.log('chainId:', network.chainId.toString())
对于不使用任何库的原始检查,单个 curl 请求就足以确认端点正在响应并且位于正确的链上:
curl -s https://bnb-testnet.api.onfinality.io/public \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
响应应为 {"jsonrpc":"2.0","id":1,"result":"0x61"}。如果您得到不同的链 ID,则说明您指向了错误的网络。如果出现传输错误,则说明从您的环境无法访问该端点——在调试合约代码之前,请检查防火墙规则、VPN 和出站 HTTPS。
获取 tBNB 并测试真实流程
测试网 BNB(tBNB)没有货币价值,通过水龙头分发。水龙头政策会变化,因此将任何特定水龙头视为起点而非永久依赖:搜索当前的 BSC 测试网水龙头,连接钱包,并请求少量金额。一些水龙头要求最低主网余额或社交登录以减少滥用。
一旦您有了 tBNB,有用的测试流程是:
- 部署合约,并通过您将在生产环境中使用的同一 RPC 端点读回它。
- 发送转账并观察它在 testnet.bscscan.com 上确认。
- 触发应用程序中事件密集的路径,并确认您的索引器或监听器捕获它们。
- 在测试网上运行错误路径——回滚、gas 不足、nonce 冲突——在它们发生在主网之前。
如果您的应用依赖 WebSocket 订阅,请确认您的端点是否支持它们。上面的公共 HTTP 端点是 HTTP JSON-RPC;对于订阅式工作负载,请查看 BNB Chain 测试网网络页面和 BNB Chain 主网页面以获取当前传输详情,如果您需要持久 WebSocket 连接,请考虑使用专用节点。
调试您实际会遇到的错误
| 症状 | 可能原因 | 检查内容 |
|---|---|---|
| 钱包中显示“错误网络” | 链 ID 不匹配 | 钱包在 56(主网)或其他链上;切换到 97 |
| 水龙头后余额为零 | 地址错误或网络错误 | 在 testnet.bscscan.com 上确认地址,而不是 bscscan.com |
eth_getLogs 返回范围错误 | 范围对于端点来说太大 | 减少区块范围或迁移到专用/存档节点 |
| 交易卡在待处理状态 | gas 价格对于当前测试网条件来说太低 | 重新估算 gas;测试网拥堵情况各不相同 |
nonce too low 或 nonce is already consumed | 本地 nonce 跟踪不同步 | 在钱包或客户端中重置账户 nonce |
| 负载下请求超时 | 共享端点限流 | 将繁重或并行工作负载移至专用端点 |
| 合约调用仅在测试网上回滚 | 测试网状态与主网不同 | 验证构造函数参数、预言机地址以及任何仅主网的依赖项 |
一个有用的习惯:当出现故障时,首先针对您的端点运行 eth_chainId 和 eth_blockNumber。这可以告诉您问题是连接/网络选择还是应用程序逻辑,而且只需几秒钟。
从测试网迁移到主网而不出意外
测试网和主网共享相同的 EVM 语义,但不共享相同的状态、地址或经济模型。在切换之前,请完成以下检查清单:
- 在配置中将链 ID 97 替换为 56,将 tBNB 替换为 BNB。
- 将测试网合约地址替换为主网部署;不要假设存在相同的地址。
- 重新检查 gas 假设——主网 gas 市场的行为与测试网不同。
- 确认主网的 RPC 端点和传输;请参阅 BNB Chain 网络页面。
- 在真实流量到达之前,针对主网端点重新运行监控和警报。
如果您希望在两个环境中使用相同的提供商和工具,OnFinality 通过相同的 RPC API 服务提供 BNB Chain 测试网和主网端点,因此您可以保持集成代码相同,只需更改 URL 和链 ID。完整的环境列表在支持的 RPC 网络页面上。
关键要点
- BNB Smart Chain 测试网使用链 ID 97、符号 tBNB 和浏览器 testnet.bscscan.com。
- 公共端点
https://bnb-testnet.api.onfinality.io/public足以用于学习和轻量脚本,但共享端点并非为繁重或并行工作负载而构建。 - 在调试应用程序代码之前,始终使用
eth_chainId验证链 ID。 - 水龙头可用性会变化;将任何水龙头视为起点,并在测试网浏览器上确认余额。
- 对于索引器、机器人、CI 和负载测试,请评估专用节点和RPC 定价,而不是拉伸公共端点。
- 保持测试网和主网配置分开,并在升级到主网时重新验证地址、gas 和端点。
常见问题解答
BNB Smart Chain 测试网的链 ID 是什么?
BNB Smart Chain 测试网使用链 ID 97(十六进制 0x61)。主网 BSC 使用链 ID 56。使用错误的链 ID 是“错误网络”和余额为空混淆的最常见原因。
BNB Smart Chain 测试网的 RPC URL 是什么?
一个公共 HTTP JSON-RPC 端点是 https://bnb-testnet.api.onfinality.io/public。如果您需要隔离的吞吐量或存档访问,您也可以运行自己的节点或使用专用端点。
BSC 测试网上的原生代币是什么?
原生货币是 tBNB,有 18 位小数。它没有货币价值,从测试网水龙头获取。
公共端点支持 WebSocket 订阅吗?
此处显示的公共端点是 HTTP JSON-RPC。如果您的应用程序依赖 WebSocket 订阅,请查看 BNB Chain 测试网网络页面以获取当前传输支持,并考虑使用专用节点进行持久连接。
为什么 eth_getLogs 在测试网上失败?
大区块范围通常会被共享端点拒绝。减少范围、对查询进行分页,或迁移到可以处理更宽范围的专用或存档节点。
我可以对测试网和主网使用相同的代码吗?
可以,如果您将链 ID、RPC URL 和合约地址保留在配置中。EVM 行为相同;状态、地址和经济模型不同。OnFinality 提供 BNB Chain 测试网和 BNB Chain端点,因此集成模式保持一致。