摘要
Optimism API 是一组 JSON-RPC 端点,允许应用程序在 OP Mainnet(一个基于乐观汇总构建的以太坊 Layer 2)上读写数据。它遵循与以太坊相同的 JSON-RPC 标准,因此您可以使用熟悉的库(如 ethers 或 viem)与链进行交互。本文解释了什么是 Optimism API、它与以太坊 API 的区别,以及如何为您的项目选择合适的端点提供商。
快速回答:什么是 Optimism API?
Optimism API 是一组 JSON-RPC 端点,允许应用程序在 OP Mainnet(一个基于乐观汇总构建的以太坊 Layer 2 (L2) 扩展解决方案)上读写数据。由于 OP Mainnet 与 EVM 兼容,Optimism API 支持相同的标准以太坊 JSON-RPC 方法,例如 eth_blockNumber、eth_getBalance 和 eth_sendRawTransaction。这意味着您可以使用熟悉的库(如 ethers、viem 或 web3.js)与链进行交互,而无需学习新的接口。
如果您在 OP Mainnet 上构建,您需要一个 Optimism API 端点来将您的 dApp 连接到网络。您可以运行自己的节点、使用公共端点或依赖托管的 RPC 提供商。正确的选择取决于您的工作负载、可靠性要求和预算。
决策指南:如何选择合适的 Optimism API 端点
在深入技术细节之前,先决定哪种类型的端点适合您的项目会有所帮助。以下是一个快速分类:
- 公共端点 免费且易于使用,但通常有速率限制,并非为生产工作负载设计。它们适用于开发、测试或低流量原型。
- 托管的 RPC 提供商(如 OnFinality)提供可靠、可扩展的端点,支持 WebSocket、存档数据和专用节点等功能。它们非常适合生产 dApp、分析平台和高流量应用程序。
- 运行自己的节点 让您完全控制并避免第三方依赖,但需要大量的运维工作:您需要维护节点、处理同步问题并确保高可用性。
对于大多数生产用例,托管的 RPC 提供商是务实的选择。它让您专注于应用程序,而提供商负责基础设施可靠性。OnFinality 提供随使用量扩展的 RPC 定价,您可以查看 支持的 RPC 网络 以确认是否涵盖 OP Mainnet。
Optimism API 与以太坊 API:有何不同?
由于 OP Mainnet 是乐观汇总,其 API 几乎与以太坊相同,但有几个重要区别:
- 交易费用:OP Mainnet 使用包含 L1 数据费用的费用模型,该费用是将交易数据发布到以太坊的成本。您可以使用
eth_gasPrice或 OP-Stack 特定的方法来估算费用。 - 最终性:OP Mainnet 上的交易在挑战期(约 7 天)后被视为最终,但对于大多数应用程序,一旦交易被包含在区块中,您就可以将其视为已确认。
- 链 ID:OP Mainnet 的链 ID 是 10,Optimism Sepolia 测试网是 11155420。确保您的钱包和应用程序使用正确的链 ID。
- 额外方法:Optimism API 可能包含 OP-Stack 特定的方法,例如
optimism_syncStatus或带有 L1 属性的eth_getBlockByNumber,但核心以太坊方法保持不变。
设置您的 Optimism API 连接
要开始使用 Optimism API,您需要一个端点 URL。OnFinality 为 OP Mainnet 提供公共端点:https://optimism.api.onfinality.io/public。对于 Optimism Sepolia 测试网,使用 https://optimism-sepolia.api.onfinality.io/public。这些端点支持 HTTP 和 WebSocket 传输。
以下是使用 viem 连接的方法:
import { createPublicClient, http } from 'viem';
import { optimism } from 'viem/chains';
const client = createPublicClient({
chain: optimism,
transport: http('https://optimism.api.onfinality.io/public'),
});
const blockNumber = await client.getBlockNumber();
console.log('Current block number:', blockNumber);
如果您使用 ethers v6:
import { ethers } from 'ethers';
const provider = new ethers.JsonRpcProvider('https://optimism.api.onfinality.io/public');
const blockNumber = await provider.getBlockNumber();
console.log('Current block number:', blockNumber);
对于生产应用程序,您可能需要具有更高速率限制的专用端点。OnFinality 提供 专用节点,为您提供具有可配置容量的私有端点。
Optimism API 方法:您可以调用什么
Optimism API 支持所有标准以太坊 JSON-RPC 方法。以下是您最常用的一些方法:
| 方法 | 描述 | 示例用例 |
|---|---|---|
eth_blockNumber | 获取最新区块号 | 检查链同步状态 |
eth_getBalance | 获取地址余额 | 显示用户余额 |
eth_call | 执行只读合约调用 | 查询链上数据 |
eth_sendRawTransaction | 广播已签名的交易 | 提交用户交易 |
eth_getTransactionReceipt | 获取交易收据 | 确认交易状态 |
eth_getLogs | 获取事件日志 | 索引智能合约事件 |
eth_estimateGas | 估算交易 gas | 向用户显示 gas 估算 |
此外,您可能需要存档数据来进行历史查询。存档节点存储完整的状态历史,这对于分析平台或需要查询过去余额的 dApp 至关重要。OnFinality 支持 OP Mainnet 上的存档数据;查看 网络页面 了解详情。
使用 WebSocket 进行实时更新
如果您的应用程序需要实时数据,例如待处理交易或新区块,您可以使用 WebSocket 端点。OnFinality 的 Optimism 端点支持 WebSocket,地址为 wss://optimism.api.onfinality.io/public(注意:公共 URL 可能不同;请查看网络页面获取确切的 WebSocket URL)。
以下是使用 viem 订阅新区块头的示例:
import { createPublicClient, webSocket } from 'viem';
import { optimism } from 'viem/chains';
const client = createPublicClient({
chain: optimism,
transport: webSocket('wss://optimism.api.onfinality.io/public'),
});
const unwatch = client.watchBlockNumber({
onBlockNumber: (blockNumber) => {
console.log('New block:', blockNumber);
},
});
WebSocket 连接更消耗资源,因此请确保您的提供商支持它们,并在应用程序中处理重连逻辑。
Optimism Sepolia 测试网:测试您的 dApp
在部署到 OP Mainnet 之前,您应该在 Optimism Sepolia 测试网上测试您的应用程序。测试网使用相同的 API,但链 ID 不同(11155420),端点也不同:https://optimism-sepolia.api.onfinality.io/public。您可以从水龙头获取测试 ETH 来资助您的测试交易。
以下是如何为 Optimism Sepolia 配置您的钱包:
{
"chainId": 11155420,
"chainName": "OP Sepolia Testnet",
"nativeCurrency": {
"name": "Sepolia Ether",
"symbol": "ETH",
"decimals": 18
},
"rpcUrls": ["https://optimism-sepolia.api.onfinality.io/public"],
"blockExplorerUrls": ["https://sepolia-optimism.etherscan.io"]
}
在 Sepolia 上测试有助于您在问题影响真实用户之前发现它们,并让您无需花费真实 ETH 即可验证集成。
常见陷阱和故障排除
即使使用可靠的 API,您也可能会遇到问题。以下是一些常见问题及其解决方法:
- 速率限制:如果您遇到速率限制,请考虑升级到付费计划或使用专用节点。OnFinality 的 RPC 定价 为不同工作负载提供不同层级。
- 错误的链 ID:确保您的应用程序使用 OP Mainnet 的链 ID 10 和 Sepolia 的 11155420。使用错误的链 ID 可能导致交易失败。
- WebSocket 断开:WebSocket 连接可能会断开。实现重连逻辑并优雅地处理错误。
- 缺少存档数据:如果您需要历史数据,请确保您的提供商提供存档节点。并非所有提供商都提供。
- 交易最终性:请记住,OP Mainnet 有挑战期。对于大多数用例,一旦交易被包含在区块中,您就可以将其视为最终,但对于高价值交易,您可能需要等待挑战期过去。
关键要点
- Optimism API 基于 JSON-RPC 并与 EVM 兼容,因此您可以使用标准的以太坊工具。
- 根据您的需求选择公共端点、托管提供商或自托管节点。
- OnFinality 为主网和测试网提供可靠的 Optimism 端点,支持 HTTP 和 WebSocket。
- 在部署到生产环境之前,使用 Optimism Sepolia 测试网测试您的 dApp。
- 构建应用程序时,请注意速率限制、链 ID 和存档数据要求。
常见问题解答
什么是 Optimism API?
Optimism API 是一组 JSON-RPC 端点,允许应用程序与 OP Mainnet(一个以太坊 Layer 2 网络)交互。它支持标准的以太坊方法,使开发人员可以轻松地在 Optimism 上构建。
Optimism API 与以太坊 API 相同吗?
是的,Optimism API 与以太坊 API 基本相同,因为 OP Mainnet 与 EVM 兼容。在费用结构和最终性方面存在细微差异,但核心方法是相同的。
如何获取 Optimism API 端点?
您可以使用公共端点,例如 https://optimism.api.onfinality.io/public,或注册托管的 RPC 提供商(如 OnFinality)以获得具有更高限制的专用端点。
Optimism 的链 ID 是什么?
OP Mainnet 使用链 ID 10,Optimism Sepolia 测试网使用链 ID 11155420。
OnFinality 支持 Optimism 吗?
是的,OnFinality 支持 OP Mainnet 和 Optimism Sepolia。您可以在 Optimism 网络页面 和 Optimism Sepolia 页面 上找到更多详细信息。