Description
The official OP Docs
OP Stack Client SDK (opens new window) 原生支持多个 OP 链:OP、Base 等。 要查看特定的 OP 链是否直接支持,请参阅文档 (opens new window)。
如果您正在使用一个非原生支持的链,例如您刚刚创建的 OP Stack 链(参见此处),您仍然可以使用OP Stack Client SDK (opens new window)。
您只需要向 CrossDomainMessenger
提供一些合约地址,因为它们没有预配置。
如果您按照入门指南中的说明操作,合约地址位于 .../optimism/packages/contracts-bedrock/deployments/getting-started
,这是您部署 L1 合约时创建的。
创建 CrossDomainMessenger 时的合约名称 | 包含地址的文件 |
---|---|
AddressManager | Lib_AddressManager.json |
L1CrossDomainMessenger | Proxy__OVM_L1CrossDomainMessenger.json |
L1StandardBridge | Proxy__OVM_L1StandardBridge.json |
OptimismPortal | OptimismPortalProxy.json |
L2OutputOracle | L2OutputOracleProxy.json |
SDK 需要某些合约作为健全性检查,但实际上并不使用这些合约。 对于这些合约,您只需指定零地址:
StateCommitmentChain
CanonicalTransactionChain
BondManager
在 JavaScript 中,您可以使用表达式 "0x".padEnd(42, "0")
创建零地址。
这些步骤假设您在Hardhat 控制台 (opens new window)中。
它们进一步假设您的项目已经包含了 Optimism SDK @eth-optimism/sdk
(opens new window)。
导入 SDK
optimismSDK = require("@eth-optimism/sdk")
设置配置参数。
变量名 | 值 |
---|---|
l1Url | L1 的 RPC 提供程序的 URL,例如 https://eth-goerli.g.alchemy.com/v2/<api key> |
l2Url | 您的 OP Stack 的 URL。如果在同一台计算机上运行,则为 http://localhost:8545 |
privKey | 在 L1 上有一些 ETH 的帐户的私钥 |
创建提供程序 (opens new window)和签名者 (opens new window)。
l1Provider = new ethers.providers.JsonRpcProvider(l1Url)
l2Provider = new ethers.providers.JsonRpcProvider(l2Url)
l1Signer = new ethers.Wallet(privKey).connect(l1Provider)
l2Signer = new ethers.Wallet(privKey).connect(l2Provider)
创建 L1 合约结构。
zeroAddr = "0x".padEnd(42, "0")
l1Contracts = {
StateCommitmentChain: zeroAddr,
CanonicalTransactionChain: zeroAddr,
BondManager: zeroAddr,
// 这些合约具有您之前找到的地址。
AddressManager: "0x....", // Lib_AddressManager.json
L1CrossDomainMessenger: "0x....", // Proxy__OVM_L1CrossDomainMessenger.json
L1StandardBridge: "0x....", // Proxy__OVM_L1StandardBridge.json
OptimismPortal: "0x....", // OptimismPortalProxy.json
L2OutputOracle: "0x....", // L2OutputOracleProxy.json
}
创建标准桥接的数据结构。
bridges = {
Standard: {
l1Bridge: l1Contracts.L1StandardBridge,
l2Bridge: "0x4200000000000000000000000000000000000010",
Adapter: optimismSDK.StandardBridgeAdapter
},
ETH: {
l1Bridge: l1Contracts.L1StandardBridge,
l2Bridge: "0x4200000000000000000000000000000000000010",
Adapter: optimismSDK.ETHBridgeAdapter
}
}
创建CrossChainMessenger
(opens new window) 对象。
crossChainMessenger = new optimismSDK.CrossChainMessenger({
bedrock: true,
contracts: {
l1: l1Contracts
},
bridges: bridges,
l1ChainId: await l1Signer.getChainId(),
l2ChainId: await l2Signer.getChainId(),
l1SignerOrProvider: l1Signer,
l2SignerOrProvider: l2Signer,
})
为了验证 SDK 的功能,将一些 ETH 从 L1 转移到 L2。
获取当前余额。
balances0 = [
await l1Provider.getBalance(l1Signer.address),
await l2Provider.getBalance(l1Signer.address)
]
转移 1 gwei。
tx = await crossChainMessenger.depositETH(1e9)
rcpt = await tx.wait()
获取转移后的余额。
balances1 = [
await l1Provider.getBalance(l1Signer.address),
await l2Provider.getBalance(l1Signer.address)
]
查看 L1 余额是否发生变化(可能远远超过 1 gwei,因为交易的成本)。
(balances0[0]-balances1[0])/1e9
查看 L2 余额是否发生变化(可能需要几分钟)。
((await l2Provider.getBalance(l1Signer.address))-balances0[1])/1e9
This app can be installed on your PC or mobile device. This will allow this web app to look and behave like any other installed app. You will find it in your app lists and be able to pin it to your home screen, start menus or task bars. This installed web app will also be able to safely interact with other apps and your operating system.
The official OP Docs