摘要
BSC API(BNB智能链API)是一组JSON-RPC端点,允许开发者与BSC网络交互。本参考涵盖端点类型、常用方法、设置步骤以及生产环境工作负载的故障排除技巧。
BSC API 决策清单
在集成BSC API之前,请考虑以下关键点:
- 端点类型:公共、共享还是专用RPC?公共端点有速率限制;专用节点提供稳定的性能。
- 归档节点 vs. 全节点:归档节点提供历史状态数据;全节点只提供近期数据。根据您的数据需求选择。
- WebSocket 支持:如需实时订阅(例如待处理交易、日志),请确保您的提供商支持WSS。
- 速率限制:检查允许的每秒请求数(RPS)和月度配额。生产应用需要预留空间。
- 地理延迟:选择靠近用户群体的端点,或使用全局负载均衡器。
- 调试和跟踪 API:用于交易模拟和高级监控;并非所有提供商都启用。
- 定价模式:按需付费 vs. 固定费用。在确定前预估您的调用量。
BSC API 快速介绍
BSC API 指 BNB 智能链(BSC)节点暴露的 JSON-RPC 接口。由于 BSC 兼容 EVM,其 API 几乎与以太坊的 JSON-RPC 相同——eth_blockNumber、eth_getBalance 和 eth_sendRawTransaction 等方法的工作方式完全相同。这意味着现有的以太坊工具(Hardhat、Foundry、viem、web3.js)只需极少修改即可用于 BSC。
BSC 添加了一些特定于其最终性机制和 blob 支持的 BEP 方法。理解这些有助于构建更可靠的 dApp。
BSC API 端点概览
BSC 端点主要有三种类型:
- 公共 RPC:免费,但速率限制严格(例如 5–10 req/s)。仅用于测试。
- 共享/服务 RPC:由 OnFinality 等基础设施平台提供。更高的限制、归档数据,通常带有 WebSocket 和跟踪 API。
- 专用节点:独立实例,拥有保证的资源、完全控制权,且无噪音邻居。
对于生产环境,推荐使用服务 RPC 或专用节点。您可以在我们的 网络页面 上找到 BSC 端点。
BSC JSON-RPC 方法
以下是最常用的方法,按类别分组:
| 类别 | 主要方法 | 使用场景 |
|---|---|---|
| 链信息 | eth_chainId, eth_blockNumber, net_version | 识别网络和当前区块 |
| 账户 | eth_getBalance, eth_getTransactionCount | 查询账户状态和 nonce |
| 区块/交易 | eth_getBlockByNumber, eth_getTransactionReceipt, eth_getLogs | 获取链上数据 |
| 执行 | eth_call, eth_estimateGas, eth_sendRawTransaction | 模拟和发送交易 |
| 事件订阅 | eth_subscribe, eth_unsubscribe (WebSocket) | 实时事件流 |
| 调试/跟踪 | debug_traceTransaction, trace_block | 交易内省 |
| BSC 特有 | eth_getFinalizedBlock, eth_getBlobSidecarByTxHash | 最终性查询和 blob 数据 |
大多数 EVM 库对这些方法进行了抽象。您很少直接调用它们;而是使用库的 API。
连接到 BSC API
以下是使用 curl 和 viem(JavaScript)连接到 BSC 主网的方法:
使用 curl
curl -X POST https://rpc.onfinality.io/bsc \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"params": [],
"id": 1
}'
使用 viem (JavaScript)
import { createPublicClient, http } from 'viem';
import { bsc } from 'viem/chains';
const client = createPublicClient({
chain: bsc,
transport: http('https://rpc.onfinality.io/bsc')
});
async function main() {
const blockNumber = await client.getBlockNumber();
console.log('Current BSC block:', blockNumber);
}
main();
WebSocket 订阅
import { createPublicClient, webSocket } from 'viem';
import { bsc } from 'viem/chains';
const client = createPublicClient({
chain: bsc,
transport: webSocket('wss://rpc.onfinality.io/bsc/ws')
});
const unwatch = await client.watchBlockNumber({
onBlockNumber: (blockNumber) => console.log('New block:', blockNumber),
});
常见陷阱与故障排除
- 速率限制:公共端点常返回
429 Too Many Requests。使用限制更高的服务或专用节点。 - 最终性确认:BSC 具有概率最终性(约15个区块)和经济最终性(BEP-126)。对于不可逆交易,请等待
eth_getFinalizedBlock或至少15个确认。 - 缺少归档数据:如果需要过去的状态(例如历史代币余额),请确保您的端点启用了归档数据。
- WebSocket 断开:不稳定的连接可能导致订阅丢失。使用指数退避实现重连逻辑。
- Gas 估算失败:如果
eth_estimateGas回滚,请检查发送者余额和合约逻辑。使用带stateOverride的eth_call进行调试。
决定共享 vs. 专用 BSC API
| 评判标准 | 检查内容 | 为什么重要 |
|---|---|---|
| 吞吐量 | 每秒请求数限制 | 影响同时服务的用户/合约数量 |
| 数据保留 | 归档 vs. 剪枝 | 决定能否查询历史状态 |
| API 表面 | 调试/跟踪、WebSocket、eth_subscribe | 高级工作流(模拟、实时数据)所需 |
| 延迟 | 端点地理位置 | 影响用户体验,尤其对时间敏感的 dApp |
| 正常运行时间 SLA | 提供商保证 | 高可用性减少生产应用停机的风险 |
| 定价 | 按需付费 vs. 月度固定 | 与预算和扩展模式匹配 |
对于中小型工作负载,共享 RPC 服务性价比高。高流量或延迟敏感型项目受益于专用节点。
关键要点
常见问题
BSC API 和以太坊 API 有什么区别?
它们几乎相同。BSC 为其最终性和 blob 功能添加了一些自定义方法,但所有标准 eth_* 方法都有效。
使用 BSC 端点是否需要 API 密钥?
公共端点可能不需要密钥,但有速率限制。对于生产环境,您需要从 OnFinality 等提供商获取 API 密钥,以解锁更高的限制和专用资源。
在认为交易最终确定之前,我应该等待多少个确认?
BSC 的概率最终性建议等待15个区块(约30秒)。对于经济最终性(BEP-126),您可以检查 eth_getFinalizedBlock,它在2个区块内确认(约3.75秒)。
能否使用 BSC API 获取实时数据?
可以,通过 WebSocket 订阅(eth_subscribe)。确保您的提供商支持 WSS 且具有足够的吞吐量。
如果我的提供商不支持归档数据怎么办?
您可以切换到支持归档的提供商,或自行运行归档节点。OnFinality 为 BSC 提供归档端点。
有测试网 API 吗?
有,BSC 测试网(Chapel)可用。请参见我们的 [测试网网络页面](/networks/bnb-testnet) 获取端点。