摘要
BSC API 是 BNB 智能链(BSC)的 JSON-RPC 接口,允许你使用与以太坊相同的方法读取链上数据、提交交易以及与智能合约交互。本指南介绍核心方法、如何连接常用库,以及如何为生产工作负载在公共端点和托管 RPC 提供商之间进行选择。
快速决策指南:应该使用哪个 BSC API 端点?
在编写任何代码之前,请决定哪种类型的 BSC API 端点适合你的工作负载。正确的选择取决于你预期的流量、是否需要历史数据,以及你的应用对速率限制的敏感程度。
| 工作负载 | 推荐的端点类型 | 原因 |
|---|---|---|
| 原型开发、黑客松、低流量 | 公共 RPC 端点 | 免费,无需注册,但有速率限制和偶尔的不稳定性 |
| 生产 dApp、中等流量 | 托管 RPC 提供商(共享端点) | 更高的可靠性,更好的速率限制,易于扩展 |
| 高吞吐量、分析或自定义需求 | 专用节点 | 完全控制,无邻居干扰,自定义配置 |
| 历史数据、深度索引 | 归档节点 | 访问历史状态、跟踪数据 |
对于大多数生产应用,像 OnFinality 这样的托管 RPC 提供商在可靠性和成本之间提供了良好的平衡。如果你需要可预测的性能或自定义配置,请考虑专用节点。有关详细信息,请查看 RPC 定价 页面。
什么是 BSC API?
BSC API 是 BNB 智能链(BSC)的 JSON-RPC 接口。它允许你与区块链交互:读取余额、发送交易、部署和调用智能合约,以及订阅事件。由于 BSC 与 EVM 兼容,该 API 遵循与以太坊相同的 JSON-RPC 标准,因此大多数以太坊工具和库都可以直接用于 BSC。
BSC 节点提供一组标准方法,以及一些 BSC 特定的扩展。官方文档列出了完整的 API,但你最常使用的是核心以太坊方法,如 eth_blockNumber、eth_getBalance、eth_call 和 eth_sendRawTransaction。
你最常使用的 BSC API 方法
以下是 BSC 开发中最常见的 JSON-RPC 方法:
eth_blockNumber– 获取最新区块号eth_getBalance– 获取地址的 BNB 余额eth_call– 执行只读智能合约调用eth_sendRawTransaction– 提交已签名的交易eth_getTransactionReceipt– 获取交易收据eth_getLogs– 获取事件日志eth_subscribe– 订阅新区块、待处理交易或日志(WebSocket)
BSC 还有一些特定于链的方法,例如用于快速最终性的 eth_getFinalizedBlock,以及用于 blob 数据的 eth_getBlobSidecarByTxHash。如果你正在构建高级基础设施,这些方法会很有用。
使用 curl 连接 BSC API
你可以使用简单的 curl 请求测试 BSC API。将 YOUR_RPC_URL 替换为你的端点 URL。
curl -X POST https://YOUR_RPC_URL \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
这将返回十六进制格式的最新区块号,例如 0x10d4f。
使用 ethers.js 连接 BSC API
对于 JavaScript 开发者,ethers.js 是最流行的库。以下是如何连接到 BSC 并读取数据:
const { ethers } = require("ethers");
const provider = new ethers.JsonRpcProvider("https://YOUR_RPC_URL");
async function main() {
const blockNumber = await provider.getBlockNumber();
console.log("Latest block:", blockNumber);
const balance = await provider.getBalance("0x...");
console.log("Balance (BNB):", ethers.formatEther(balance));
}
main();
如果你使用 viem,设置类似:
import { createPublicClient, http } from "viem";
import { bsc } from "viem/chains";
const client = createPublicClient({
chain: bsc,
transport: http("https://YOUR_RPC_URL"),
});
const blockNumber = await client.getBlockNumber();
console.log("Latest block:", blockNumber);
BSC API 与 BSC 数据 API:有什么区别?
当搜索“api bsc”时,你还会找到像 Bitquery 或 Moralis 这样的产品,它们为 BSC 提供 GraphQL 或 REST API。这些与 BSC JSON-RPC API 不同。
- BSC JSON-RPC API:区块链的原始接口。你可以读取状态、发送交易和查询日志,但必须自己进行索引和聚合。
- BSC 数据 API:通过 GraphQL 或 REST 提供的预索引、解析数据(交易、余额、代币转账)。非常适合分析和仪表板,但不适用于提交交易。
如果你正在构建需要发送交易或读取实时状态的 dApp,你需要 JSON-RPC API。如果你正在构建分析仪表板,数据 API 可能会节省你的时间。
选择 BSC API 提供商
当你超越公共端点时,你将评估 RPC 提供商。以下是比较内容:
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| 可靠性 | 正常运行时间历史、错误率 | 停机会导致应用中断 |
| 速率限制 | 每秒请求数、每日限制 | 太低会导致负载下出错 |
| 数据可用性 | 归档数据、跟踪支持 | 历史查询和调试所需 |
| WebSocket 支持 | 实时订阅 | 实时更新必不可少 |
| 定价 | 免费层、按需付费、专用选项 | 必须符合你的预算和规模 |
| 支持 | 文档、社区、SLA | 帮助你快速解决问题 |
OnFinality 提供共享和专用的 BSC 端点。你可以在网络页面上查看支持的网络的完整列表。
使用 BSC API 时的常见陷阱
即使有好的提供商,你也会遇到问题。以下是最常见的:
- 速率限制:公共端点经常返回
429 Too Many Requests。使用托管提供商或添加重试逻辑。 - 错误的链 ID:BSC 主网使用链 ID
56,测试网使用97。使用错误的链 ID 会导致交易失败。 - Gas 价格过低:BSC 的 Gas 价格可能会飙升。使用
eth_gasPrice或 Gas 预言机来设置适当的费用。 - 找不到待处理交易:如果你在交易被挖掘之前查询,你会得到
null。轮询或使用 WebSocket 订阅。 - 区块最终性:BSC 具有快速最终性,但如果你正在构建金融应用,仍应检查重组。
调试 BSC API 调用
当出现问题时,从以下步骤开始:
- 检查端点:它是否可达?尝试 curl 请求。
- 检查方法:方法名称是否正确?参数格式是否正确?
- 检查错误消息:JSON-RPC 错误包含代码和消息。常见代码:
-32601(方法未找到)、-32000(服务器错误)。 - 使用公共端点测试:如果你的提供商失败,请尝试公共端点以隔离问题。
- 使用区块浏览器:验证交易或区块是否存在。
对于更高级的调试,你可能需要跟踪方法,这些方法仅在归档节点或专用节点上可用。
BSC API 和 WebSocket 订阅
对于实时更新,请使用 WebSocket。以下是 ethers.js 的示例:
const { ethers } = require("ethers");
const provider = new ethers.WebSocketProvider("wss://YOUR_WS_URL");
provider.on("block", (blockNumber) => {
console.log("New block:", blockNumber);
});
WebSocket 连接更消耗资源,因此请确保你的提供商支持它们,并且你的计划包含它们。
关键要点
- BSC API 是一个 JSON-RPC 接口,与 EVM 兼容,可与以太坊工具配合使用。
- 根据工作负载选择端点类型:测试用公共端点,生产用托管端点,高吞吐量用专用端点。
- 在可靠性、速率限制、数据可用性和 WebSocket 支持方面比较提供商。
- 注意速率限制、链 ID 不匹配和 Gas 价格问题。
- 使用 WebSocket 进行实时更新。
常见问题解答
什么是 BSC API?
BSC API 是 BNB 智能链的 JSON-RPC 接口,允许你以编程方式与区块链交互。
BSC API 与以太坊 API 相同吗?
是的,BSC 与 EVM 兼容,因此它使用与以太坊相同的 JSON-RPC 标准和方法。
如何获取 BSC API 密钥?
公共端点不需要密钥,但对于像 OnFinality 这样的托管提供商,你需要创建账户并获取 API 密钥。
什么是 BSC 测试网 API?
BSC 测试网(链 ID 97)有自己的 RPC 端点用于测试。你可以在 BNB 测试网页面 上找到它们。
我可以将 ethers.js 与 BSC 一起使用吗?
是的,ethers.js 可以直接用于 BSC。只需将提供程序设置为 BSC RPC URL。
BSC RPC 和 BSC API 有什么区别?
它们是同一回事。RPC 是协议,API 是接口。两者都指 JSON-RPC 端点。
如何选择 BSC API 提供商?
评估可靠性、速率限制、数据可用性、WebSocket 支持、定价和支持。有关更多详细信息,请参阅 RPC 提供商选择指南。