diff --git a/packages/ua-utils-evm-hardhat-test/contracts/DefaultOApp.sol b/packages/ua-utils-evm-hardhat-test/contracts/DefaultOApp.sol index 6dce66b71..c4293381a 100644 --- a/packages/ua-utils-evm-hardhat-test/contracts/DefaultOApp.sol +++ b/packages/ua-utils-evm-hardhat-test/contracts/DefaultOApp.sol @@ -1,10 +1,8 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.22; -contract DefaultOApp { - mapping(uint256 => bytes32) public peers; +import { OmniCounter as OmniCounterImpl } from "@layerzerolabs/lz-evm-oapp-v2/contracts/examples/OmniCounter.sol"; - function setPeer(uint256 eid, bytes32 peer) external { - peers[eid] = peer; - } +contract DefaultOApp is OmniCounterImpl { + constructor(address _endpoint) OmniCounterImpl(_endpoint) {} } diff --git a/packages/ua-utils-evm-hardhat-test/deploy/001_bootstrap.ts b/packages/ua-utils-evm-hardhat-test/deploy/001_bootstrap.ts index 5869d9ebc..ea8e9f8d3 100644 --- a/packages/ua-utils-evm-hardhat-test/deploy/001_bootstrap.ts +++ b/packages/ua-utils-evm-hardhat-test/deploy/001_bootstrap.ts @@ -1,6 +1,12 @@ import { type DeployFunction } from 'hardhat-deploy/types' import assert from 'assert' import { formatEid } from '@layerzerolabs/utils' +import { wrapEIP1193Provider } from '@layerzerolabs/utils-evm-hardhat' +import env from 'hardhat' +import { Contract } from 'ethers' +import { TransactionReceipt, TransactionResponse } from '@ethersproject/providers' + +const DEFAULT_NATIVE_DECIMALS_RATE = '18' //ethers.utils.parseUnits('1', 18).toString() /** * This deploy function will deploy and configure LayerZero endpoint @@ -31,11 +37,108 @@ const deploy: DeployFunction = async ({ getUnnamedAccounts, deployments, network args: [endpointV2Deployment.address], }) + await Promise.all( + ['DefaultProxyAdmin', 'PriceFeed_Proxy', 'PriceFeed', 'PriceFeed_Implementation'].map((contractName) => + deployments.delete(contractName) + ) + ) + const priceFeed = await deployments.deploy('PriceFeed', { + from: deployer, + proxy: { + owner: deployer, + proxyContract: 'OptimizedTransparentProxy', + execute: { + init: { + methodName: 'initialize', + args: [deployer], + }, + }, + }, + }) + + await deployments.delete('ExecutorFeeLib') + const executorFeeLib = await deployments.deploy('ExecutorFeeLib', { + from: deployer, + args: [DEFAULT_NATIVE_DECIMALS_RATE], + }) + + await Promise.all( + ['Executor_Proxy', 'Executor_Implementation', 'Executor', 'ExecutorProxyAdmin'].map((contractName) => + deployments.delete(contractName) + ) + ) + const executor = await deployments.deploy('Executor', { + from: deployer, + log: true, + skipIfAlreadyDeployed: true, + proxy: { + owner: deployer, + proxyContract: 'OptimizedTransparentProxy', + viaAdminContract: { name: 'ExecutorProxyAdmin', artifact: 'ProxyAdmin' }, + execute: { + init: { + methodName: 'initialize', + args: [ + endpointV2Deployment.address, // _endpoint + receiveUln302.address, // _receiveUln301 + [sendUln302.address], // _messageLibs + priceFeed.address, // _priceFeed + deployer, // _roleAdmin + [deployer], // _admins + ], + }, + onUpgrade: { + methodName: 'onUpgrade', + args: [receiveUln302.address], + }, + }, + }, + }) + + const signer = wrapEIP1193Provider(env.network.provider).getSigner() + const executorContract = new Contract(executor.address, executor.abi).connect(signer) + const setExecFeeLibResp: TransactionResponse = await executorContract.setWorkerFeeLib?.(executorFeeLib.address, { + from: await signer.getAddress(), + }) + const setExecFeeLibReceipt: TransactionReceipt = await setExecFeeLibResp.wait() + assert(setExecFeeLibReceipt?.status === 1) + + await deployments.delete('DVN') + const dvn = await deployments.deploy('DVN', { + from: deployer, + args: [ + network.config.eid, // vid + [sendUln302.address], // messageLibs + priceFeed.address, // priceFeed + [deployer], // signers + 1, // quorum + [deployer], // admins + ], + }) + + await deployments.delete('DVNFeeLib') + const dvnFeeLib = await deployments.deploy('DVNFeeLib', { + from: deployer, + args: [DEFAULT_NATIVE_DECIMALS_RATE], + }) + + const dvnContract = new Contract(dvn.address, dvn.abi).connect(signer) + const setDvnFeeLibResp: TransactionResponse = await dvnContract.setWorkerFeeLib?.(dvnFeeLib.address, { + from: await signer.getAddress(), + }) + const setDvnFeeLibReceipt: TransactionReceipt = await setDvnFeeLibResp.wait() + assert(setDvnFeeLibReceipt?.status === 1) + console.table({ Network: `${network.name} (endpoint ${formatEid(network.config.eid)})`, EndpointV2: endpointV2Deployment.address, SendUln302: sendUln302.address, ReceiveUln302: receiveUln302.address, + PriceFeed: priceFeed.address, + Executor: executor.address, + ExecutorFeeLib: executorFeeLib.address, + DVN: dvn.address, + DVNFeeLib: dvnFeeLib.address, }) } diff --git a/packages/ua-utils-evm-hardhat-test/deploy/002_oapp.ts b/packages/ua-utils-evm-hardhat-test/deploy/002_oapp.ts index b56907807..53d6453eb 100644 --- a/packages/ua-utils-evm-hardhat-test/deploy/002_oapp.ts +++ b/packages/ua-utils-evm-hardhat-test/deploy/002_oapp.ts @@ -14,8 +14,10 @@ const deploy: DeployFunction = async ({ getUnnamedAccounts, deployments, network assert(deployer, 'Missing deployer') await deployments.delete('DefaultOApp') + const endpointV2 = await deployments.get('EndpointV2') const defaultOAppDeployment = await deployments.deploy('DefaultOApp', { from: deployer, + args: [endpointV2.address], }) console.table({ diff --git a/packages/ua-utils-evm-hardhat-test/package.json b/packages/ua-utils-evm-hardhat-test/package.json index e4bad95ab..c50bfdbf5 100644 --- a/packages/ua-utils-evm-hardhat-test/package.json +++ b/packages/ua-utils-evm-hardhat-test/package.json @@ -25,8 +25,11 @@ "@gnosis.pm/safe-service-client": "1.1.1", "@layerzerolabs/io-utils": "~0.0.1", "@layerzerolabs/lz-definitions": "~1.5.70", + "@layerzerolabs/lz-evm-oapp-v2": "~1.5.70", + "@layerzerolabs/lz-evm-protocol-v2": "~1.5.70", "@layerzerolabs/lz-evm-sdk-v1": "~1.5.70", "@layerzerolabs/lz-evm-sdk-v2": "~1.5.70", + "@layerzerolabs/lz-utility-v2": "~1.5.70", "@layerzerolabs/protocol-utils": "~0.0.1", "@layerzerolabs/protocol-utils-evm": "~0.0.1", "@layerzerolabs/toolbox-hardhat": "~0.0.1", diff --git a/packages/ua-utils-evm-hardhat-test/test/__utils__/endpoint.ts b/packages/ua-utils-evm-hardhat-test/test/__utils__/endpoint.ts index f54905017..7917328c5 100644 --- a/packages/ua-utils-evm-hardhat-test/test/__utils__/endpoint.ts +++ b/packages/ua-utils-evm-hardhat-test/test/__utils__/endpoint.ts @@ -25,20 +25,40 @@ import { formatOmniPoint } from '@layerzerolabs/utils' export const ethEndpoint = { eid: EndpointId.ETHEREUM_MAINNET, contractName: 'EndpointV2' } export const ethReceiveUln = { eid: EndpointId.ETHEREUM_MAINNET, contractName: 'ReceiveUln302' } export const ethSendUln = { eid: EndpointId.ETHEREUM_MAINNET, contractName: 'SendUln302' } +export const ethExecutor = { eid: EndpointId.ETHEREUM_MAINNET, contractName: 'Executor' } +export const ethDvn = { eid: EndpointId.ETHEREUM_MAINNET, contractName: 'DVN' } export const avaxEndpoint = { eid: EndpointId.AVALANCHE_MAINNET, contractName: 'EndpointV2' } export const avaxReceiveUln = { eid: EndpointId.AVALANCHE_MAINNET, contractName: 'ReceiveUln302' } export const avaxSendUln = { eid: EndpointId.AVALANCHE_MAINNET, contractName: 'SendUln302' } +export const avaxExecutor = { eid: EndpointId.AVALANCHE_MAINNET, contractName: 'Executor' } +export const avaxDvn = { eid: EndpointId.AVALANCHE_MAINNET, contractName: 'DVN' } -export const defaultExecutorConfig: Uln302ExecutorConfig = { - maxMessageSize: 10000, - executor: '0x0000000000000000000000000000000000000001', +export const MAX_MESSAGE_SIZE = 10000 // match on-chain value + +/** + * Helper function to generate the default Uln302ExecutorConfig for a given chain. + * + * @param executorAddress The local Executor address. + */ +export const getDefaultExecutorConfig = (executorAddress: string): Uln302ExecutorConfig => { + return { + maxMessageSize: MAX_MESSAGE_SIZE, + executor: executorAddress, + } } -export const defaultUlnConfig: Uln302UlnConfig = { - confirmations: BigInt(1), - requiredDVNs: ['0x0000000000000000000000000000000000000002', '0x0000000000000000000000000000000000000003'], - optionalDVNs: [], - optionalDVNThreshold: 0, +/** + * Helper function to generate the default Uln302UlnConfig for a given chain. + * + * @param dvnAddress The local DVN address. + */ +export const getDefaultUlnConfig = (dvnAddress: string): Uln302UlnConfig => { + return { + confirmations: BigInt(1), + requiredDVNs: [dvnAddress], + optionalDVNs: [], + optionalDVNThreshold: 0, + } } /** @@ -68,6 +88,13 @@ export const setupDefaultEndpoint = async (): Promise => { const avaxSendUlnPoint = omniContractToPoint(await contractFactory(avaxSendUln)) const ethReceiveUlnPoint = omniContractToPoint(await contractFactory(ethReceiveUln)) const avaxReceiveUlnPoint = omniContractToPoint(await contractFactory(avaxReceiveUln)) + const ethExecutorPoint = omniContractToPoint(await contractFactory(ethExecutor)) + const avaxExecutorPoint = omniContractToPoint(await contractFactory(avaxExecutor)) + const ethDvnPoint = omniContractToPoint(await contractFactory(ethDvn)) + const avaxDvnPoint = omniContractToPoint(await contractFactory(avaxDvn)) + + const ethUlnConfig: Uln302UlnConfig = getDefaultUlnConfig(ethDvnPoint.address) + const avaxUlnConfig: Uln302UlnConfig = getDefaultUlnConfig(avaxDvnPoint.address) // This is the graph for SendUln302 const sendUlnConfig: OmniGraphHardhat = { @@ -75,15 +102,19 @@ export const setupDefaultEndpoint = async (): Promise => { { contract: ethSendUln, config: { - defaultUlnConfigs: [[EndpointId.AVALANCHE_MAINNET, defaultUlnConfig]], - defaultExecutorConfigs: [[EndpointId.AVALANCHE_MAINNET, defaultExecutorConfig]], + defaultUlnConfigs: [[EndpointId.AVALANCHE_MAINNET, ethUlnConfig]], + defaultExecutorConfigs: [ + [EndpointId.AVALANCHE_MAINNET, getDefaultExecutorConfig(ethExecutorPoint.address)], + ], }, }, { contract: avaxSendUln, config: { - defaultUlnConfigs: [[EndpointId.ETHEREUM_MAINNET, defaultUlnConfig]], - defaultExecutorConfigs: [[EndpointId.ETHEREUM_MAINNET, defaultExecutorConfig]], + defaultUlnConfigs: [[EndpointId.ETHEREUM_MAINNET, avaxUlnConfig]], + defaultExecutorConfigs: [ + [EndpointId.ETHEREUM_MAINNET, getDefaultExecutorConfig(avaxExecutorPoint.address)], + ], }, }, ], @@ -96,14 +127,14 @@ export const setupDefaultEndpoint = async (): Promise => { { contract: ethReceiveUln, config: { - defaultUlnConfigs: [[EndpointId.AVALANCHE_MAINNET, defaultUlnConfig]], + defaultUlnConfigs: [[EndpointId.AVALANCHE_MAINNET, ethUlnConfig]], defaultExecutorConfigs: [], }, }, { contract: avaxReceiveUln, config: { - defaultUlnConfigs: [[EndpointId.ETHEREUM_MAINNET, defaultUlnConfig]], + defaultUlnConfigs: [[EndpointId.ETHEREUM_MAINNET, avaxUlnConfig]], defaultExecutorConfigs: [], }, }, diff --git a/packages/ua-utils-evm-hardhat-test/test/endpoint/config.test.ts b/packages/ua-utils-evm-hardhat-test/test/endpoint/config.test.ts index 73dc83694..4c5c111e8 100644 --- a/packages/ua-utils-evm-hardhat-test/test/endpoint/config.test.ts +++ b/packages/ua-utils-evm-hardhat-test/test/endpoint/config.test.ts @@ -3,16 +3,18 @@ import { createConnectedContractFactory } from '@layerzerolabs/utils-evm-hardhat import type { OmniPoint } from '@layerzerolabs/utils' import { omniContractToPoint } from '@layerzerolabs/utils-evm' import { EndpointId } from '@layerzerolabs/lz-definitions' -import { defaultUlnConfig, setupDefaultEndpoint } from '../__utils__/endpoint' +import { getDefaultUlnConfig, setupDefaultEndpoint } from '../__utils__/endpoint' import { Endpoint, Uln302 } from '@layerzerolabs/protocol-utils-evm' describe('endpoint/config', () => { const ethEndpoint = { eid: EndpointId.ETHEREUM_MAINNET, contractName: 'EndpointV2' } const ethReceiveUln = { eid: EndpointId.ETHEREUM_MAINNET, contractName: 'ReceiveUln302' } const ethSendUln = { eid: EndpointId.ETHEREUM_MAINNET, contractName: 'SendUln302' } + const ethDvn = { eid: EndpointId.ETHEREUM_MAINNET, contractName: 'DVN' } const avaxEndpoint = { eid: EndpointId.AVALANCHE_MAINNET, contractName: 'EndpointV2' } const avaxReceiveUln = { eid: EndpointId.AVALANCHE_MAINNET, contractName: 'ReceiveUln302' } const avaxSendUln = { eid: EndpointId.AVALANCHE_MAINNET, contractName: 'SendUln302' } + const avaxDvn = { eid: EndpointId.AVALANCHE_MAINNET, contractName: 'DVN' } beforeEach(async () => { await setupDefaultEndpoint() @@ -68,8 +70,11 @@ describe('endpoint/config', () => { const ethConfig = await ethSendUlnSdk.getUlnConfig(avaxSendUlnPoint.eid, avaxSendUlnPoint.address) const avaxConfig = await avaxSendUlnSdk.getUlnConfig(ethSendUlnPoint.eid, ethSendUlnPoint.address) - expect(ethConfig).toEqual(defaultUlnConfig) - expect(avaxConfig).toEqual(defaultUlnConfig) + const ethDvnPoint = omniContractToPoint(await connectedContractFactory(ethDvn)) + const avaxDvnPoint = omniContractToPoint(await connectedContractFactory(avaxDvn)) + + expect(ethConfig).toEqual(getDefaultUlnConfig(ethDvnPoint.address)) + expect(avaxConfig).toEqual(getDefaultUlnConfig(avaxDvnPoint.address)) }) }) }) diff --git a/packages/ua-utils-evm-hardhat-test/test/task/getDefaultConfig.test.ts b/packages/ua-utils-evm-hardhat-test/test/task/getDefaultConfig.test.ts index 59ae0006d..1e7083f6d 100644 --- a/packages/ua-utils-evm-hardhat-test/test/task/getDefaultConfig.test.ts +++ b/packages/ua-utils-evm-hardhat-test/test/task/getDefaultConfig.test.ts @@ -1,7 +1,8 @@ -import { defaultExecutorConfig, defaultUlnConfig, setupDefaultEndpoint } from '../__utils__/endpoint' +import { getDefaultExecutorConfig, getDefaultUlnConfig, setupDefaultEndpoint } from '../__utils__/endpoint' import { createContractFactory, getEidForNetworkName } from '@layerzerolabs/utils-evm-hardhat' import hre from 'hardhat' import { TASK_LZ_GET_DEFAULT_CONFIG } from '@layerzerolabs/ua-utils-evm-hardhat' +import { omniContractToPoint } from '@layerzerolabs/utils-evm' describe('task: getDefaultConfig', () => { beforeEach(async () => { @@ -20,12 +21,16 @@ describe('task: getDefaultConfig', () => { const sendUln302 = await contractFactory({ contractName: 'SendUln302', eid: localEid }) const receiveUln302 = await contractFactory({ contractName: 'ReceiveUln302', eid: localEid }) + const executor = await contractFactory({ contractName: 'Executor', eid: localEid }) + const executorPoint = await omniContractToPoint(executor) + const dvn = await contractFactory({ contractName: 'DVN', eid: localEid }) + const dvnPoint = await omniContractToPoint(dvn) expect(defaultConfig.defaultSendLibrary).toEqual(sendUln302.contract.address) expect(defaultConfig.defaultReceiveLibrary).toEqual(receiveUln302.contract.address) - expect(defaultConfig.sendExecutorConfig).toEqual(defaultExecutorConfig) - expect(defaultConfig.sendUlnConfig).toEqual(defaultUlnConfig) - expect(defaultConfig.receiveUlnConfig).toEqual(defaultUlnConfig) + expect(defaultConfig.sendExecutorConfig).toEqual(getDefaultExecutorConfig(executorPoint.address)) + expect(defaultConfig.sendUlnConfig).toEqual(getDefaultUlnConfig(dvnPoint.address)) + expect(defaultConfig.receiveUlnConfig).toEqual(getDefaultUlnConfig(dvnPoint.address)) } } }) diff --git a/packages/ua-utils-evm-hardhat-test/test/task/getOAppConfig.test.ts b/packages/ua-utils-evm-hardhat-test/test/task/getOAppConfig.test.ts index 5b2e9256f..780dbc8bc 100644 --- a/packages/ua-utils-evm-hardhat-test/test/task/getOAppConfig.test.ts +++ b/packages/ua-utils-evm-hardhat-test/test/task/getOAppConfig.test.ts @@ -1,8 +1,9 @@ -import { defaultExecutorConfig, defaultUlnConfig, setupDefaultEndpoint } from '../__utils__/endpoint' +import { getDefaultExecutorConfig, getDefaultUlnConfig, setupDefaultEndpoint } from '../__utils__/endpoint' import { createContractFactory, getEidForNetworkName } from '@layerzerolabs/utils-evm-hardhat' import hre from 'hardhat' import { AddressZero } from '@ethersproject/constants' import { TASK_LZ_GET_OAPP_CONFIG } from '@layerzerolabs/ua-utils-evm-hardhat' +import { omniContractToPoint } from '@layerzerolabs/utils-evm' describe('task: getOAppConfig', () => { beforeEach(async () => { @@ -25,12 +26,16 @@ describe('task: getOAppConfig', () => { const defaultConfig = getDefaultConfigTask[localNetwork][remoteNetwork] const sendUln302 = await contractFactory({ contractName: 'SendUln302', eid: localEid }) const receiveUln302 = await contractFactory({ contractName: 'ReceiveUln302', eid: localEid }) + const executor = await contractFactory({ contractName: 'Executor', eid: localEid }) + const executorPoint = omniContractToPoint(executor) + const dvn = await contractFactory({ contractName: 'DVN', eid: localEid }) + const dvnPoint = omniContractToPoint(dvn) expect(defaultConfig.defaultSendLibrary).toEqual(sendUln302.contract.address) expect(defaultConfig.defaultReceiveLibrary).toEqual(receiveUln302.contract.address) - expect(defaultConfig.sendExecutorConfig).toEqual(defaultExecutorConfig) - expect(defaultConfig.sendUlnConfig).toEqual(defaultUlnConfig) - expect(defaultConfig.receiveUlnConfig).toEqual(defaultUlnConfig) + expect(defaultConfig.sendExecutorConfig).toEqual(getDefaultExecutorConfig(executorPoint.address)) + expect(defaultConfig.sendUlnConfig).toEqual(getDefaultUlnConfig(dvnPoint.address)) + expect(defaultConfig.receiveUlnConfig).toEqual(getDefaultUlnConfig(dvnPoint.address)) } } }) diff --git a/packages/ua-utils-evm/src/oapp/sdk.ts b/packages/ua-utils-evm/src/oapp/sdk.ts index f919d9848..dbcdcfe77 100644 --- a/packages/ua-utils-evm/src/oapp/sdk.ts +++ b/packages/ua-utils-evm/src/oapp/sdk.ts @@ -16,7 +16,6 @@ export class OApp implements IOApp { async setPeer(eid: EndpointId, address: Bytes32 | Address | null | undefined): Promise { const data = this.contract.contract.interface.encodeFunctionData('setPeer', [eid, makeBytes32(address)]) - return this.createTransaction(data) } diff --git a/yarn.lock b/yarn.lock index 39f8c6ef6..59b2ab9ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1673,6 +1673,13 @@ dependencies: tiny-invariant "^1.3.1" +"@layerzerolabs/lz-definitions@^1.5.71": + version "1.5.71" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-definitions/-/lz-definitions-1.5.71.tgz#dc143d7569e5c9e8e4a16cf3b746d636784f56e3" + integrity sha512-xVuGDMxhctWYIxIDGj+Op+pYgLZ8NnxUvFjSg7frCy7P2bMGZ6lFhNOYiHQGKawP7+696RBpsZcNq3i9AMznHQ== + dependencies: + tiny-invariant "^1.3.1" + "@layerzerolabs/lz-evm-messagelib-v2@^1.5.70": version "1.5.70" resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-1.5.70.tgz#43164baaa747632676dd7378a5ff331a0cdbaf81" @@ -1710,6 +1717,17 @@ lodash "^4.17.21" solidity-bytes-utils "^0.8.0" +"@layerzerolabs/lz-evm-protocol-v2@~1.5.70": + version "1.5.71" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-1.5.71.tgz#26c7d077a60fc812baf8fae48a9348583df0679c" + integrity sha512-3tCCl1VnjGpdiRHJ99CJ589DB7ACk/mZXCjomdoTLd/UfWYAwhsgfFXCkIKNP01Ksm0RMnfWJ3+VNzv5CPnjnQ== + dependencies: + "@layerzerolabs/ops-plugin-core" "^1.5.71" + dotenv "^16.3.1" + ethers "^5.7.2" + lodash "^4.17.21" + zksync-web3 "^0.16.0" + "@layerzerolabs/lz-evm-sdk-v1@^1.5.70": version "1.5.71" resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-sdk-v1/-/lz-evm-sdk-v1-1.5.71.tgz#b6c89358c09e21e6931d47b1a8c8ce48b3dced0b" @@ -1728,7 +1746,7 @@ "@ethersproject/providers" "^5.7.0" ethers "^5.7.2" -"@layerzerolabs/lz-evm-sdk-v2@^1.5.70": +"@layerzerolabs/lz-evm-sdk-v2@^1.5.70", "@layerzerolabs/lz-evm-sdk-v2@^1.5.71": version "1.5.71" resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-sdk-v2/-/lz-evm-sdk-v2-1.5.71.tgz#8496638a43ecec9593989cb73346c98703c1de01" integrity sha512-S076L4kSuS1x3vfSdIe5y4hcf1QplTg/0hMJfSzoMD/epJEvFPy6h7bzIQ5JtusuuyE6qa3IqsVD+3s9k+eveQ== @@ -1771,6 +1789,34 @@ tree-kill "^1.2.2" winston "^3.11.0" +"@layerzerolabs/lz-utilities@^1.5.71": + version "1.5.71" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-utilities/-/lz-utilities-1.5.71.tgz#3d14448177ea65cd180cca18b5eafec5d7350f90" + integrity sha512-M2kwQNJIa4YOV4gUPjwTGORonlajzGOk10+YSu2IheytgvuqH1AAyyfy+Ofme2GR+N+pCKf2r353/pZG35RnSA== + dependencies: + "@ethersproject/providers" "^5.7.0" + "@layerzerolabs/lz-definitions" "^1.5.71" + "@noble/hashes" "^1.3.2" + "@solana/web3.js" "^1.87.6" + aptos "^1.20.0" + bip39 "^3.1.0" + ed25519-hd-key "^1.3.0" + ethers "^5.7.2" + find-up "^5.0.0" + glob "^10.3.10" + tree-kill "^1.2.2" + winston "^3.11.0" + +"@layerzerolabs/lz-utility-v2@~1.5.70": + version "1.5.71" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-utility-v2/-/lz-utility-v2-1.5.71.tgz#27a72ce1ec31e11350b2254c51dd8c887d6162e0" + integrity sha512-u5qQL+qRvMJ54McU3jC3m4D2/oRaeegLRLcTk10r8mksnMsmuEwkbfBfa6l/wvo6OZSO2O426X62EmLPIWjCoQ== + dependencies: + "@layerzerolabs/lz-evm-sdk-v2" "^1.5.71" + "@solana/web3.js" "^1.87.6" + ethers "^5.7.2" + tiny-invariant "^1.3.1" + "@layerzerolabs/ops-core@^1.5.70": version "1.5.70" resolved "https://registry.yarnpkg.com/@layerzerolabs/ops-core/-/ops-core-1.5.70.tgz#c2d7eac8cc86c220e13df0c667a917bfdabcef98" @@ -1791,6 +1837,24 @@ tiny-invariant "^1.3.1" ts-node "^10.9.1" +"@layerzerolabs/ops-core@^1.5.71": + version "1.5.71" + resolved "https://registry.yarnpkg.com/@layerzerolabs/ops-core/-/ops-core-1.5.71.tgz#5bb7b5b0faab4301e274e7bdf8a6796db2f5946f" + integrity sha512-jv55jYJaByPD7J3XnT3kMv1R97BGA8rtWxh7Z80F/Uf4p4YfQzdq2cwYpOqmrLf+rG2GGO5eNZo8FXE7lJFXdQ== + dependencies: + "@layerzerolabs/lz-definitions" "^1.5.71" + "@layerzerolabs/lz-utilities" "^1.5.71" + "@solana/web3.js" "^1.87.6" + aptos "^1.20.0" + bip39 "^3.1.0" + commander "^11.1.0" + ed25519-hd-key "^1.3.0" + ethers "^5.7.2" + find-up "^5.0.0" + lodash "^4.17.21" + stacktrace-parser "^0.1.10" + tiny-invariant "^1.3.1" + "@layerzerolabs/ops-plugin-core@^1.5.70": version "1.5.70" resolved "https://registry.yarnpkg.com/@layerzerolabs/ops-plugin-core/-/ops-plugin-core-1.5.70.tgz#e689bc6413f00222df8c2547e15da3806b2d5b16" @@ -1809,6 +1873,24 @@ papaparse "^5.4.1" winston "^3.11.0" +"@layerzerolabs/ops-plugin-core@^1.5.71": + version "1.5.71" + resolved "https://registry.yarnpkg.com/@layerzerolabs/ops-plugin-core/-/ops-plugin-core-1.5.71.tgz#30eee6205dd4c3520ae4b04229da8d3738729596" + integrity sha512-5jQTWckN0d+slxAAtKPP4QqSFtFYdWey7VLXjOzrPGZPKDbr4qiq6lZSDN1Fb/Z0I5M7Z3hwK8wvzxw2aebxgA== + dependencies: + "@inquirer/confirm" "^2.0.15" + "@inquirer/prompts" "^3.3.0" + "@layerzerolabs/lz-definitions" "^1.5.71" + "@layerzerolabs/lz-utilities" "^1.5.71" + "@layerzerolabs/ops-core" "^1.5.71" + "@solana/web3.js" "^1.87.6" + aptos "^1.20.0" + commander "^11.1.0" + ethers "^5.7.2" + lodash "^4.17.21" + papaparse "^5.4.1" + winston "^3.11.0" + "@layerzerolabs/prettier-config-next@^1.5.70": version "1.5.70" resolved "https://registry.yarnpkg.com/@layerzerolabs/prettier-config-next/-/prettier-config-next-1.5.70.tgz#a2309f21592d5e1d8ddd2509934fd4dcd3a2a333" @@ -5848,7 +5930,7 @@ ethereumjs-vm@^2.3.4: rustbn.js "~0.2.0" safe-buffer "^5.1.1" -ethers@^5.7.0, ethers@^5.7.1, ethers@^5.7.2: +ethers@^5.7.0, ethers@^5.7.1, ethers@^5.7.2, ethers@~5.7.0: version "5.7.2" resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -12497,6 +12579,13 @@ zksync-web3@^0.14.3: resolved "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz" integrity sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ== +zksync-web3@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.16.0.tgz#407b258e61923d104864cff284bb54dc8b6af753" + integrity sha512-ER/qDpuRkoHrqwi2f4RCP6HXCQP1KB9o7Ih2K7h+QzfCSyDRL0apPMT9LkVQspeIeqRoXhl+1tit3vQdDIGe4w== + dependencies: + ethers "~5.7.0" + zod@^3.22.4: version "3.22.4" resolved "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz"