摘要
以太坊API允许您的应用程序通过JSON-RPC与以太坊区块链交互。本文介绍常见方法、如何连接端点以及为生产应用选择RPC提供商的准则。
以太坊API决策清单
在开始使用以太坊API进行构建之前,请考虑以下决策点:
| 标准 | 检查项 | 重要性 |
|---|---|---|
| API方法覆盖范围 | 您的用例只需要标准JSON-RPC还是也需要自定义端点(例如debug、trace)? | 某些应用需要存档数据或trace调用。 |
| 端点类型 | 公共、免费层还是专用私有端点? | 公共端点有速率限制且可靠性较低。 |
| 网络支持 | 主网、测试网(Sepolia、Holesky)或两者? | 测试网对于预发布环境至关重要。 |
| WebSocket支持 | 提供商是否提供WSS用于实时订阅? | 事件监听所需。 |
| 存档数据 | 是否需要访问历史状态? | 需要存档节点。 |
| 速率限制 | 每秒请求数和每日调用限制是多少? | 生产应用需要可预测的限制。 |
| 延迟和正常运行时间 | 检查历史性能和SLA(如有承诺)。 | 高延迟可能破坏用户体验。 |
| 定价模式 | 按量付费、月度订阅还是定制? | 成本随使用量增加。 |
什么是以太坊API?
以太坊API是一组JSON-RPC方法,允许应用程序与以太坊节点通信。每个以太坊客户端(例如Geth、Erigon、Nethermind)都通过HTTP、WebSocket或IPC暴露这些方法。该API支持读取区块链数据(余额、交易、日志)、写入状态(发送交易)以及与智能合约交互。
常见以太坊API方法
以下是最常用的JSON-RPC方法:
| 方法 | 参数 | 描述 |
|---|---|---|
eth_blockNumber | 无 | 返回最新区块号。 |
eth_getBalance | address, block | 返回地址的余额。 |
eth_getTransactionCount | address, block | 返回地址的nonce。 |
eth_call | transaction, block | 执行只读合约调用。 |
eth_sendRawTransaction | signed transaction | 提交已签名的交易。 |
eth_getLogs | filter object | 检索匹配过滤器的事件日志。 |
eth_gasPrice | 无 | 返回当前gas价格。 |
eth_estimateGas | transaction | 估算交易的gas。 |
完整列表请参阅官方以太坊JSON-RPC规范。
如何连接以太坊API
您需要一个端点URL。以下是使用curl从公共端点获取最新区块号的示例(替换为您的提供商URL):
curl -X POST -H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY
使用 JavaScript 库 viem:
import { createPublicClient, http } from 'viem';
import { mainnet } from 'viem/chains';
const client = createPublicClient({
chain: mainnet,
transport: http('https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY'),
});
const blockNumber = await client.getBlockNumber();
console.log('Block number:', blockNumber);
公共端点与私有端点
- 公共端点(免费、速率限制)适用于测试和低用量场景。
- 来自提供商的免费层端点比公共端点提供更高的限制,但仍然有上限。
- 专用节点提供独占访问、明确的速率限制和完全控制权。它们是生产环境的理想选择。
对于生产应用,建议使用专用节点或性能一致的托管RPC服务。OnFinality提供跨多条链(包括以太坊)的共享和专用节点基础设施。
如何选择以太坊API提供商
在评估提供商时,请考虑:
- 网络支持:提供商是否支持以太坊主网和您所需的测试网(Sepolia、Holesky)?
- 方法覆盖范围:一些提供商会限制debug或trace方法。如果您需要存档数据,请确认存档节点的可用性。
- WebSocket (WSS) 支持:对于实时订阅(例如待处理交易、新区块)至关重要。
- 定价:比较不同提供商的RPC定价。寻找透明且可预测的费用。
- 正常运行时间和延迟:检查历史状态。虽然没有一个提供商能保证100%的正常运行时间,但请选择具有良好记录的提供商。
- 开发者体验:寻求易于设置的API密钥、仪表板和文档。
深入了解请参阅我们的选择RPC提供商指南。
常见陷阱与故障排除
- 速率限制:如果遇到
429 Too Many Requests,考虑升级计划或添加负载均衡。 - Nonce错误:发送交易时,确保使用正确的nonce(请参阅我们的nonce指南)。
- Gas估算失败:发送前使用
eth_estimateGas。对于复杂合约,增加gas限制。 - 连接超时:对于高流量应用,使用WebSocket而非HTTP以保持持久连接。
- 存档节点缺失:如果在查询历史状态时遇到错误,切换到存档端点。
关键要点
- 以太坊API是标准的JSON-RPC。任何兼容的客户端都可以跨提供商工作。
- 根据工作负载选择端点:测试用公共端点,小型应用用免费层,生产用专用。
- 在主网部署前始终先在测试网上测试。
- 监控API使用情况和延迟以避免意外。
- OnFinality提供灵活的以太坊RPC端点计划。查看支持的网络列表和定价以开始使用。
常见问题
问:以太坊API和RPC端点有什么区别? 答:以太坊API指的是JSON-RPC方法。RPC端点是发送请求的URL。它们经常可以互换使用。
问:我可以在主网和测试网上使用同一个API密钥吗? 答:大多数提供商会为每个网络提供单独的端点,但使用相同的API密钥。有些要求您创建单独的项目。
问:我需要为以太坊使用专用节点吗? 答:不一定。对于低流量应用,托管服务的共享端点可能就足够了。对于高吞吐量、低延迟或自定义配置,专用节点更好。
问:如何获取存档数据? 答:选择明确提供存档端点的提供商。OnFinality可按请求提供存档节点访问。
问:使用以太坊API的最佳库是什么?
答:流行的选项包括 ethers.js、web3.js 和 viem。选择取决于您的语言和偏好。它们都抽象化了JSON-RPC调用。