@layerzerolabs/lz-evm-v1-0.7 1.5.61 → 1.5.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ops.cjs CHANGED
@@ -132,7 +132,7 @@ async function newVersion(contract, getConfig, logger, env, local, deployments)
132
132
  libs.push(await contract.libraryLookup(i));
133
133
  }
134
134
  for (let i = latestVersion; i < countOfTargets; i++) {
135
- const packageName = targets[i] === "SendUln301" || targets[i] === "ReceiveUln301" ? "@layerzerolabs/lz-evm-sdk-v2" : "@layerzerolabs/lz-evm-sdk-v1";
135
+ const packageName = targets[i] === "UltraLightNode301" ? "@layerzerolabs/lz-evm-sdk-v2" : "@layerzerolabs/lz-evm-sdk-v1";
136
136
  const deployment = opsPluginCore.findDeployment(deployments, targets[i], {
137
137
  source: packageName,
138
138
  network
package/dist/ops.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../ops/wire/pricefeed.ts","../ops/wire/endpoint.ts","../ops/wire/relayer-v2.ts","../ops/wire/uln2.ts","../ops/wire/common.ts","../ops/wire/fee-handler.ts"],"names":["EvmWalletNames","networkToStage","LayerZeroEvmBaseConfigurable","_","endpointIdToChain","endpointIdToNetwork","findDeployment","ethers","invariant","Chain","findDuplicates"],"mappings":"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","sourcesContent":["import { ethers } from 'ethers'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport { EndpointId, Environment, Network, networkToStage } from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { PriceFeed } from '../../src/typechain-types'\n\nexport default class PriceFeedConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'PriceFeed']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [setPriceUpdater(contract, getConfig, logger)]\n return (await Promise.all(candidates)).flat()\n }\n}\n\n// setPriceUpdater\nasync function setPriceUpdater(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n type ArgTypes = Parameters<PriceFeed['setPriceUpdater']>\n\n const txns: TransactionData[] = []\n const updaters = getConfig('evm', 'priceFeedUpdaterAddresses')\n for (const address in updaters) {\n const current = await contract.priceUpdater(address)\n const expected: ArgTypes[1] = updaters[address]\n const method = contract.interface.getFunction('setPriceUpdater').name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n","import { ethers } from 'ethers'\nimport _, { parseInt } from 'lodash'\nimport invariant from 'tiny-invariant'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToNetwork,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { Endpoint } from '../../src/typechain-types'\n\nexport default class EndpointConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'Endpoint']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n newVersion(contract, getConfig, logger, env, local, deployments),\n setDefaultSendVersion(contract, getConfig, logger, local),\n setDefaultReceiveVersion(contract, getConfig, logger, local),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setDefaultSendVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultSendVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const current = await contract.defaultSendVersion()\n const configValue = getConfig('defaultSendVersion', [local, endpointIdToChain(local), 'default'])\n const expected: ArgTypes[0] = parseInt(configValue)\n if (expected === undefined) {\n throw new Error(`defaultSendVersion of ${local} in config is undefined`)\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '1000000' },\n ]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}): setDefaultSendVersion`)\n return [txn]\n}\n\nasync function setDefaultReceiveVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultReceiveVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const current = await contract.defaultReceiveVersion() // TODO(gx): confirm with carmen\n const configValue = getConfig('defaultReceiveVersion', [local, endpointIdToChain(local), 'default'])\n const expected: ArgTypes[0] = parseInt(configValue)\n if (expected === undefined) {\n throw new Error(`defaultSendVersion of ${local} in config is undefined`)\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '1000000' },\n ]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}): setDefaultReceiveVersion`)\n return [txn]\n}\n\nfunction findDuplicates(arr: string[]) {\n const counts = _.countBy(arr)\n return _.filter(arr, (item) => counts[item] > 1)\n}\n\nasync function newVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'newVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const network = endpointIdToNetwork(local, env)\n const latestVersion = await contract.latestVersion()\n const targets: string[] = getConfig('evm', 'messageLibrary', [local, endpointIdToChain(local), 'default'])\n const duplicated = findDuplicates(targets)\n if (duplicated.length > 0) {\n throw new Error(`duplicated targets ${duplicated} in evm.messageLibrary for ${local}`)\n }\n\n const countOfTargets = targets.length\n invariant(\n countOfTargets >= latestVersion,\n `latestVersion:${latestVersion} > messageLibrary[${local}]:${countOfTargets}`\n )\n\n const libs: string[] = []\n for (let i = 1; i <= latestVersion; i++) {\n libs.push(await contract.libraryLookup(i))\n }\n // deploy new versions\n for (let i = latestVersion; i < countOfTargets; i++) {\n const packageName =\n targets[i] === 'SendUln301' || targets[i] === 'ReceiveUln301'\n ? '@layerzerolabs/lz-evm-sdk-v2'\n : '@layerzerolabs/lz-evm-sdk-v1'\n const deployment = findDeployment(deployments, targets[i], {\n source: packageName,\n network,\n })\n if (deployment === undefined) {\n throw new Error(`failed to find deployment of ${targets[i]} for ${network}`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n invariant(\n !libs.includes(expected),\n `MsgLib(${expected}) on ${local} already exists as version ${libs.indexOf(expected) + 1}`\n )\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, undefined, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n\n logger.debug(`Configured LayerZero(${local}) : initMsgLibVersion`)\n return txns\n}\n","import { ethers } from 'ethers'\nimport _ from 'lodash'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Environment,\n Network,\n Stage,\n endpointIdToChain,\n endpointIdToNetwork,\n endpointIdToVersion,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n isEqualBigNumberish,\n} from '@layerzerolabs/ops-utilities'\n\nimport { RelayerV2 } from '../../src'\n\nexport default class RelayerV2Configurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'RelayerV2']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const stage = networkToStage(network)\n const getConfig = this.configManager.get.bind(this.configManager, stage)\n\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setApprovedAddress(contract, getConfig, logger),\n setPriceConfigUpdater(contract, getConfig, logger),\n setPriceFeed(contract, logger, env, stage, local, deployments),\n ...remotes.flatMap((remote) => [\n setDstConfig(contract, getConfig, logger, local, remote),\n setPriceMultiplierBps(contract, getConfig, logger, local),\n ]),\n setDstPriceMultipliers(contract, getConfig, logger, local, remotes),\n setDstFloorMarginsUSD(contract, getConfig, logger, local, remotes),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setDstConfig(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstConfig'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type ConfigOption = { baseGas: ArgTypes[2]; airdropCap: ArgTypes[3]; gasPerByte: ArgTypes[4] }\n\n const chain: Chain = endpointIdToChain(local)\n const remoteChain: Chain = endpointIdToChain(remote)\n\n const supportedOutboundProofTypes = getConfig(\n 'evm',\n 'supportedOutboundProof',\n [local, 'default'],\n [remote, 'default']\n )\n const baseGas = getConfig('evm', 'relayerBaseGas', [remote, endpointIdToChain(remote), 'default']) // TODO(gx): double check it\n const airdropCap = getConfig('airdropCap', [chain, 'default'], [remoteChain, 'default'])\n\n const promises = Object.keys(baseGas).map(async (proofType: string): Promise<TransactionData> => {\n // TODO(donghua): double check it\n // the UX team uses prooftype 1 in some places, so we need to set airdrop for 1/2 no matter what\n // if (!supportedOutboundProofTypes.includes(parseInt(proofType))) {\n // continue\n // }\n const currentValue = await contract.dstConfigLookup(remote, proofType)\n const current: ConfigOption = {\n baseGas: currentValue.baseGas,\n airdropCap: currentValue.dstNativeAmtCap,\n gasPerByte: currentValue.gasPerByte,\n }\n\n const expected: ConfigOption = {\n baseGas: ethers.BigNumber.from(baseGas[proofType]),\n airdropCap: ethers.BigNumber.from(airdropCap),\n gasPerByte: ethers.BigNumber.from(currentValue.gasPerByte),\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, proofType, expected.airdropCap, expected.baseGas, expected.gasPerByte]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return txn\n })\n const txns = await Promise.all(promises)\n return txns\n}\n\nasync function setPriceMultiplierBps(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceMultiplierBps'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const current = await contract.multiplierBps()\n const expected: ArgTypes[0] = getConfig('evm', 'relayerPriceMultiplierBps', [\n local,\n endpointIdToChain(local),\n 'default',\n ])\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setDstPriceMultipliers(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remotes: EndpointId[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstPriceMultipliers'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type DstMultiplierStruct = ArgTypes[0][0]\n\n const current: ArgTypes[0] = []\n const expected: ArgTypes[0] = []\n const goal: ArgTypes[0] = []\n\n const chain: Chain = endpointIdToChain(local)\n for (const remoteId of remotes) {\n const remoteChain = endpointIdToChain(remoteId)\n const remoteEndpointVersion = endpointIdToVersion(remoteId)\n if (remoteEndpointVersion === EndpointVersion.V2) {\n logger.info(`Relayer V2 doesn't need to setDstPriceMultipliers with EndpointV2 remote ${remoteId}`)\n continue\n }\n const target = ethers.BigNumber.from(\n getConfig('evm', 'relayerPriceMultipliers', [chain, 'default'], [remoteChain, 'default'])\n )\n\n const present = await contract.dstMultipliers(remoteId)\n\n if (_.isEqualWith(target, present, isEqualBigNumberish) === true) {\n continue\n }\n\n current.push({ chainId: remoteId, multiplier: present } as DstMultiplierStruct)\n expected.push({ chainId: remoteId, multiplier: target } as DstMultiplierStruct)\n }\n\n if (expected.length === 0) {\n return []\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setDstFloorMarginsUSD(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remotes: EndpointId[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstFloorMarginsUSD'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type DstFloorMarginStruct = ArgTypes[0][0]\n\n const current: ArgTypes[0] = []\n const expected: ArgTypes[0] = []\n\n const chain = endpointIdToChain(local)\n for (const remoteId of remotes) {\n const remoteChain = endpointIdToChain(remoteId)\n const remoteEndpointVersion = endpointIdToVersion(remoteId)\n if (remoteEndpointVersion === EndpointVersion.V2) {\n logger.info(`Relayer V2 doesn't need to setDstFloorMarginsUSD with EndpointV2 remote ${remoteId}`)\n continue\n }\n const target = ethers.BigNumber.from(\n getConfig('evm', 'relayerFloorMargins', [chain, 'default'], [remoteChain, 'default'])\n )\n const present = await contract.dstFloorMarginsUSD(remoteId)\n\n if (_.isEqualWith(target, present, isEqualBigNumberish) === true) {\n continue\n }\n\n current.push({ chainId: remoteId, floorMargin: present } as DstFloorMarginStruct)\n expected.push({ chainId: remoteId, floorMargin: target } as DstFloorMarginStruct)\n }\n\n if (expected.length === 0) {\n return []\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setApprovedAddress(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setApprovedAddress'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const approvedAddresses = getConfig('evm', 'relayerApprovedAddresses')\n\n for (const address in approvedAddresses) {\n const current = await contract.isApproved(address)\n const expected: ArgTypes[1] = approvedAddresses[address]\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n\nasync function setPriceConfigUpdater(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceConfigUpdater'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const priceConfigUpdaterAddresses = getConfig('evm', 'relayerPriceConfigUpdaterAddresses') // TODO(gx): double check it\n for (const address in priceConfigUpdaterAddresses) {\n const current = await contract.priceConfigUpdaters(address)\n const expected: ArgTypes[1] = priceConfigUpdaterAddresses[address]\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n\nasync function setPriceFeed(\n contract: ethers.Contract,\n logger: Logger,\n env: Environment,\n stage: Stage,\n local: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceFeed'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n if (stage === Stage.TESTNET) {\n return []\n }\n\n const network = endpointIdToNetwork(local, env)\n const current = await contract.priceFeed()\n const deployment = findDeployment(deployments, 'PriceFeed', { network, source: '@layerzerolabs/lz-evm-sdk-v2' })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of PriceFeed in @layerzerolabs/lz-evm-sdk-v2`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n","import { BigNumber, ethers } from 'ethers'\nimport _ from 'lodash'\nimport invariant from 'tiny-invariant'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n Chain,\n ChainType,\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToChainType,\n endpointIdToNetwork,\n getChainType,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { ConfigurableOption, Deployment, Logger, Transaction, TransactionGroup } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n collectTransactionsEvmHelper,\n getConfigFunc,\n isBigNumberish,\n} from '@layerzerolabs/ops-utilities'\n\nimport { UltraLightNodeV2 } from '../../src/typechain-types'\n\nimport { getUltraLightNodeContractName } from './common'\n\nconst PACKAGE_NAME = '@layerzerolabs/lz-evm-sdk-v1'\n\nexport default class UltraLightNodeV2Configurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = []\n }\n\n async collectTransactions(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n option: ConfigurableOption\n ): Promise<(Transaction | TransactionGroup)[]> {\n const callback = this.buildTransactionDatas.bind(this)\n const chain = endpointIdToChain(local)\n const contractName = getUltraLightNodeContractName(chain)\n\n return await collectTransactionsEvmHelper(\n local,\n remotes,\n deployments,\n option,\n this.configManager,\n this.providerManager,\n [[PACKAGE_NAME, contractName]],\n callback\n )\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setTreasury(contract, logger, local, env, deployments),\n ...remotes.flatMap((remote) => [\n setChainAddressSize(contract, getConfig, logger, local, remote),\n setRemoteUln(contract, getConfig, logger, env, local, remote, deployments),\n initInboundProofLibrary(contract, getConfig, logger, env, local, remote, deployments),\n enableSupportedOutboundProof(contract, getConfig, logger, local, remote),\n setDefaultAdapterParamsForChainId(contract, getConfig, logger, local, remote),\n setDefaultConfigForChainId(contract, getConfig, logger, env, local, remote, deployments),\n ]),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setChainAddressSize(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setChainAddressSize'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const current = await contract.chainAddressSizeMap(remote)\n const configValue = getConfig('addressSize', [remote, endpointIdToChain(remote), 'default'])\n const expected: ArgTypes[1] = ethers.BigNumber.from(configValue)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setChainAddressSize`)\n return [txn]\n}\n\nasync function setRemoteUln(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setRemoteUln'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const cur = await contract.ulnLookup(remote)\n\n let candidate: string\n if (endpointIdToChainType(remote) === ChainType.EVM) {\n const remotePackageName = '@layerzerolabs/lz-evm-sdk-v1'\n const remoteContract = getUltraLightNodeContractName(endpointIdToChain(remote))\n const params = endpointIdToChain(remote) === Chain.APTOS ? ['layerzero'] : [remotePackageName, remoteContract]\n candidate = getAddress(deployments, remote, env, ...params).toLowerCase()\n } else if (endpointIdToChain(remote) === Chain.APTOS) {\n throw new Error(`No implementation to get target address in setRemoteUln for aptos`)\n } else if (endpointIdToChain(remote) === Chain.SOLANA) {\n throw new Error(`No implementation to get target address in setRemoteUln for solana`)\n } else {\n throw new Error(`No implementation to get target address in setRemoteUln for ${remote}`)\n }\n\n const target = ethers.utils.hexZeroPad(candidate, 32)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), target]\n const txn: TransactionData = [target, cur, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setRemoteUln`)\n return [txn]\n}\n\nfunction findDuplicates(arr: string[]) {\n const counts = _.countBy(arr)\n return _.filter(arr, (item) => counts[item] > 1)\n}\n\nasync function initInboundProofLibrary(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'addInboundProofLibraryForChain'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const network = endpointIdToNetwork(local, env)\n const countOfLibs = await contract.maxInboundProofLibrary(remote)\n const targets: [string, string][] = getConfig('evm', 'inboundProofLibrary', [local, 'default'], [remote, 'default'])\n const duplicated = findDuplicates(targets.map((x: [string, string]) => x[1]))\n if (duplicated.length > 0) {\n throw new Error(`duplicated targets ${duplicated} in evm.messageLibrary for ${local}`)\n }\n\n const countOfTargets = targets.length\n invariant(\n countOfTargets >= countOfLibs,\n `maxInboundProofLibrary:${countOfLibs} > inboundProofLibrary[${local}][${remote}]:${countOfTargets}`\n )\n\n const txns: TransactionData[] = []\n\n const libs: string[] = []\n for (let i = 1; i <= countOfLibs; i++) {\n libs.push(await contract.inboundProofLibrary(remote, i))\n }\n\n for (let i = countOfLibs; i < countOfTargets; i++) {\n const [proofType, contractName] = targets[i]\n const deployment = findDeployment(deployments, contractName, {\n network,\n source: PACKAGE_NAME, // TODO(gx): double check it\n })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of ${contractName} for ${network}`)\n }\n\n const targetAddr = deployment.address\n invariant(\n !libs.includes(targetAddr),\n `InboundProofLibrary(${targetAddr}) ${remote}->${local} already exists as library ${\n libs.indexOf(targetAddr) + 1\n }`\n )\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), targetAddr]\n const txn: TransactionData = [\n [i, countOfTargets],\n [countOfLibs, countOfLibs],\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n {},\n ]\n logger.debug(txn)\n\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): initInboundProofLibrary`)\n return txns\n}\n\nfunction getAddress(deployments: Deployment[], endpointId: EndpointId, env: Environment, ...params: string[]): string {\n const chainType = getChainType(endpointIdToChain(endpointId))\n switch (chainType) {\n case ChainType.APTOS: {\n // const [configName] = params\n // const addressName = `${configName.toUpperCase()}_ADDRESS`\n // invariant(addressName in layerzeroAptos.constants, `Couldn't find address in aptos sdk: ${addressName}`)\n // // @ts-ignore\n // const address = layerzeroAptos.constants[addressName][this.stage]\n // invariant(address, `Couldn't find address for ${addressName} and stage ${this.stage}`)\n // return address\n throw new Error('not support aptos') // todo need to been fix\n }\n case ChainType.EVM: {\n const [packageName, contractName] = params\n const network = endpointIdToNetwork(endpointId, env)\n const deployment = findDeployment(deployments, contractName, { source: packageName, network }) as Deployment\n if (!deployment) {\n throw new Error(\n `Not found deployment contractName:${contractName} packageName:${packageName} network:${network}`\n )\n }\n return deployment.address\n }\n case ChainType.SOLANA: {\n throw new Error('Not implemented')\n }\n case ChainType.UNKNOWN: {\n throw new Error('Unknown chain type')\n }\n }\n}\n\nasync function enableSupportedOutboundProof(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'enableSupportedOutboundProof'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const target = getConfig('evm', 'supportedOutboundProof', [local, 'default'], [remote, 'default'])\n const txns: TransactionData[] = []\n for (const proofType of target) {\n const cur = await contract.supportedOutboundProof(remote, proofType)\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), proofType]\n const txn: TransactionData = [true, cur, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setSupportedOutboundProofTypes`)\n return txns\n}\n\nasync function setDefaultAdapterParamsForChainId(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultAdapterParamsForChainId'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const config = getConfig('defaultAdapterParams', [local, 'default'], [remote, 'default'])\n const supportedOutboundProofTypes = getConfig(\n 'evm',\n 'supportedOutboundProof',\n [local, 'default'],\n [remote, 'default']\n )\n const txns: TransactionData[] = []\n for (const proofType of supportedOutboundProofTypes) {\n const current = await contract.defaultAdapterParams(remote, proofType)\n const expected: ArgTypes[2] = encodeAdapterParams(config[proofType])\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, proofType, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setDefaultAdapterParams`)\n return txns\n}\n\nfunction encodeAdapterParams(params: any[]): string {\n switch (params[0]) {\n case 1: {\n return ethers.utils.solidityPack(['uint16', 'uint256'], params)\n }\n case 2: {\n return ethers.utils.solidityPack(['uint16', 'uint256', 'uint256', 'bytes'], params)\n }\n default: {\n throw new Error('Invalid adapter type')\n }\n }\n}\n\nfunction getInboundProofVersion(getConfig: getConfigFunc, local: EndpointId, remote: EndpointId): number {\n const remoteOutboundProofType = getConfig('evm', 'outboundProofType', [remote, 'default'], [local, 'default'])\n const inboundProofLibrary = getConfig('evm', 'inboundProofLibrary', [local, 'default'], [remote, 'default'])\n let i = inboundProofLibrary.length\n while (i > 0) {\n const [libProofType] = inboundProofLibrary[i - 1]\n if (libProofType === remoteOutboundProofType) {\n return i\n }\n i--\n }\n throw new Error(\n `No matching inbound proof library on (${local}) for outbound proof type ${remoteOutboundProofType} on (${remote})`\n )\n}\n\nasync function setDefaultConfigForChainId(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultConfigForChainId'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n type AppConfigType = Awaited<ReturnType<UltraLightNodeV2['defaultAppConfig']>>\n\n const localChain = endpointIdToChain(local)\n const remoteChain = endpointIdToChain(remote)\n\n const defaultConfig: AppConfigType = await contract.defaultAppConfig(remote)\n const current = _.pick(defaultConfig, [\n 'inboundProofLibraryVersion',\n 'inboundBlockConfirmations',\n 'relayer',\n 'outboundProofType',\n 'outboundBlockConfirmations',\n 'oracle',\n ])\n\n // TODO(donghua): confirm the oracle packagename in configuration contains '@layerzerolabs'\n const [oraclePackageName, oracleType] = getConfig('oracle', 'evm', 'type', [local, 'default'], [remote, 'default'])\n if (oraclePackageName === undefined || oracleType === undefined) {\n throw new Error(\n `oracle setting for evm.type.${local}.${remote} is [${oraclePackageName}, ${oracleType}] which is invalid`\n )\n }\n\n const inboundProofLibraryVersion = getInboundProofVersion(getConfig, local, remote)\n if (isBigNumberish(inboundProofLibraryVersion) === false) {\n throw new Error(`inboundProofLibraryVersion for (${remoteChain}, ${localChain}) is not number`)\n }\n\n const inboundBlockConfirmations = getConfig('inboundBlockConf', [localChain, 'default'], [remoteChain, 'default'])\n if (isBigNumberish(inboundBlockConfirmations) === false) {\n throw new Error(`inboundBlockConf for (${remoteChain}, ${localChain}) is not number`)\n }\n\n const outboundProofType = getConfig('evm', 'outboundProofType', [local, 'default'], [remote, 'default'])\n if (isBigNumberish(outboundProofType) === false) {\n throw new Error(`outboundProofType for (${remoteChain}, ${localChain}) is not number`)\n }\n\n // TODO(gx): double check, get outboundBlockConfirmations from inboundBlockConfv ??\n const outboundBlockConfirmations = getConfig('inboundBlockConf', [remoteChain, 'default'], [localChain, 'default'])\n if (isBigNumberish(outboundBlockConfirmations) === false) {\n throw new Error(`outboundBlockConf for (${remoteChain}, ${localChain}) is invalid number`)\n }\n\n const relayer = ethers.utils.getAddress(getAddress(deployments, local, env, PACKAGE_NAME, 'RelayerV2'))\n if (ethers.utils.isAddress(relayer) === false) {\n throw new Error(`RelayerV2 is invalid`)\n }\n\n const oracle = ethers.utils.getAddress(getAddress(deployments, local, env, oraclePackageName, oracleType))\n if (ethers.utils.isAddress(oracle) === false) {\n throw new Error(`${oracleType} is invalid`)\n }\n\n // TODO(gx): declare type of expected with AppConfigType\n const expected = {\n inboundProofLibraryVersion: BigNumber.from(inboundProofLibraryVersion).toNumber(),\n inboundBlockConfirmations: BigNumber.from(inboundBlockConfirmations),\n relayer: relayer,\n outboundProofType: BigNumber.from(outboundProofType).toNumber(),\n outboundBlockConfirmations: BigNumber.from(outboundBlockConfirmations),\n oracle: oracle,\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [\n remote,\n expected.inboundProofLibraryVersion,\n expected.inboundBlockConfirmations,\n expected.relayer,\n expected.outboundProofType,\n expected.outboundBlockConfirmations,\n expected.oracle,\n ]\n\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '500000' },\n ]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setDefaultConfigForChainId`)\n return [txn]\n}\n\nasync function setTreasury(\n contract: ethers.Contract,\n logger: Logger,\n local: EndpointId,\n env: Environment,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setTreasury'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const network = endpointIdToNetwork(local, env)\n const deployment = findDeployment(deployments, 'TreasuryV2', { network })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of TreasuryV2 for ${network}`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n if (ethers.utils.isAddress(expected) === false) {\n throw new Error(`the treasury address for ${network} in TreasuryV2 is invalid`)\n }\n\n const current = await contract.treasuryContract()\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n\n return [txn]\n}\n","import { Chain } from '@layerzerolabs/lz-definitions'\n\nexport function getUltraLightNodeContractName(chain: Chain): string {\n switch (chain) {\n case Chain.SHRAPNEL:\n case Chain.KIWI: {\n return 'UltraLightNodeV2AltToken'\n }\n default: {\n return 'UltraLightNodeV2'\n }\n }\n}\n","import { ethers } from 'ethers'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToNetwork,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { FeeHandler } from '../../src'\n\nimport { getUltraLightNodeContractName } from './common'\n\nconst PACKAGENAME = '@layerzerolabs/lz-evm-sdk-v1'\nexport default class FeeHandlerConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [[PACKAGENAME, 'FeeHandler']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setFeeToken(contract, getConfig, logger, local),\n approve(contract, logger, local, env, deployments),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setFeeToken(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setFeeToken'\n type ArgTypes = Parameters<FeeHandler[typeof METHOD_NAME]>\n\n const current = await contract.feeToken()\n const configValue = getConfig('altToken', [local, endpointIdToChain(local), 'default'])\n if (!configValue) {\n throw new Error(`No altToken configured for ${local}`)\n }\n const expected: ArgTypes[0] = ethers.utils.getAddress(configValue)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}): setFeeHandlerFeeToken`)\n return [txn]\n}\n\nasync function approve(\n contract: ethers.Contract,\n logger: Logger,\n local: EndpointId,\n env: Environment,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'approve'\n type ArgTypes = Parameters<FeeHandler[typeof METHOD_NAME]>\n const network = endpointIdToNetwork(local, env)\n\n const contractName = getUltraLightNodeContractName(endpointIdToChain(local))\n const ulnAddress = (findDeployment(deployments, contractName, { source: PACKAGENAME, network }) as Deployment)\n .address\n\n const current = await contract.approved(ulnAddress)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [ulnAddress]\n const txn: TransactionData = [true, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) : approve`)\n return [txn]\n}\n"]}
1
+ {"version":3,"sources":["../ops/wire/pricefeed.ts","../ops/wire/endpoint.ts","../ops/wire/relayer-v2.ts","../ops/wire/uln2.ts","../ops/wire/common.ts","../ops/wire/fee-handler.ts"],"names":["EvmWalletNames","networkToStage","LayerZeroEvmBaseConfigurable","_","endpointIdToChain","endpointIdToNetwork","findDeployment","ethers","invariant","Chain","findDuplicates"],"mappings":"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","sourcesContent":["import { ethers } from 'ethers'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport { EndpointId, Environment, Network, networkToStage } from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { PriceFeed } from '../../src/typechain-types'\n\nexport default class PriceFeedConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'PriceFeed']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [setPriceUpdater(contract, getConfig, logger)]\n return (await Promise.all(candidates)).flat()\n }\n}\n\n// setPriceUpdater\nasync function setPriceUpdater(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n type ArgTypes = Parameters<PriceFeed['setPriceUpdater']>\n\n const txns: TransactionData[] = []\n const updaters = getConfig('evm', 'priceFeedUpdaterAddresses')\n for (const address in updaters) {\n const current = await contract.priceUpdater(address)\n const expected: ArgTypes[1] = updaters[address]\n const method = contract.interface.getFunction('setPriceUpdater').name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n","import { ethers } from 'ethers'\nimport _, { parseInt } from 'lodash'\nimport invariant from 'tiny-invariant'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToNetwork,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { Endpoint } from '../../src/typechain-types'\n\nexport default class EndpointConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'Endpoint']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n newVersion(contract, getConfig, logger, env, local, deployments),\n setDefaultSendVersion(contract, getConfig, logger, local),\n setDefaultReceiveVersion(contract, getConfig, logger, local),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setDefaultSendVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultSendVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const current = await contract.defaultSendVersion()\n const configValue = getConfig('defaultSendVersion', [local, endpointIdToChain(local), 'default'])\n const expected: ArgTypes[0] = parseInt(configValue)\n if (expected === undefined) {\n throw new Error(`defaultSendVersion of ${local} in config is undefined`)\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '1000000' },\n ]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}): setDefaultSendVersion`)\n return [txn]\n}\n\nasync function setDefaultReceiveVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultReceiveVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const current = await contract.defaultReceiveVersion() // TODO(gx): confirm with carmen\n const configValue = getConfig('defaultReceiveVersion', [local, endpointIdToChain(local), 'default'])\n const expected: ArgTypes[0] = parseInt(configValue)\n if (expected === undefined) {\n throw new Error(`defaultSendVersion of ${local} in config is undefined`)\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '1000000' },\n ]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}): setDefaultReceiveVersion`)\n return [txn]\n}\n\nfunction findDuplicates(arr: string[]) {\n const counts = _.countBy(arr)\n return _.filter(arr, (item) => counts[item] > 1)\n}\n\nasync function newVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'newVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const network = endpointIdToNetwork(local, env)\n const latestVersion = await contract.latestVersion()\n const targets: string[] = getConfig('evm', 'messageLibrary', [local, endpointIdToChain(local), 'default'])\n const duplicated = findDuplicates(targets)\n if (duplicated.length > 0) {\n throw new Error(`duplicated targets ${duplicated} in evm.messageLibrary for ${local}`)\n }\n\n const countOfTargets = targets.length\n invariant(\n countOfTargets >= latestVersion,\n `latestVersion:${latestVersion} > messageLibrary[${local}]:${countOfTargets}`\n )\n\n const libs: string[] = []\n for (let i = 1; i <= latestVersion; i++) {\n libs.push(await contract.libraryLookup(i))\n }\n // deploy new versions\n for (let i = latestVersion; i < countOfTargets; i++) {\n const packageName =\n targets[i] === 'UltraLightNode301' ? '@layerzerolabs/lz-evm-sdk-v2' : '@layerzerolabs/lz-evm-sdk-v1'\n const deployment = findDeployment(deployments, targets[i], {\n source: packageName,\n network,\n })\n if (deployment === undefined) {\n throw new Error(`failed to find deployment of ${targets[i]} for ${network}`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n invariant(\n !libs.includes(expected),\n `MsgLib(${expected}) on ${local} already exists as version ${libs.indexOf(expected) + 1}`\n )\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, undefined, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n\n logger.debug(`Configured LayerZero(${local}) : initMsgLibVersion`)\n return txns\n}\n","import { ethers } from 'ethers'\nimport _ from 'lodash'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Environment,\n Network,\n Stage,\n endpointIdToChain,\n endpointIdToNetwork,\n endpointIdToVersion,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n isEqualBigNumberish,\n} from '@layerzerolabs/ops-utilities'\n\nimport { RelayerV2 } from '../../src'\n\nexport default class RelayerV2Configurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'RelayerV2']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const stage = networkToStage(network)\n const getConfig = this.configManager.get.bind(this.configManager, stage)\n\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setApprovedAddress(contract, getConfig, logger),\n setPriceConfigUpdater(contract, getConfig, logger),\n setPriceFeed(contract, logger, env, stage, local, deployments),\n ...remotes.flatMap((remote) => [\n setDstConfig(contract, getConfig, logger, local, remote),\n setPriceMultiplierBps(contract, getConfig, logger, local),\n ]),\n setDstPriceMultipliers(contract, getConfig, logger, local, remotes),\n setDstFloorMarginsUSD(contract, getConfig, logger, local, remotes),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setDstConfig(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstConfig'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type ConfigOption = { baseGas: ArgTypes[2]; airdropCap: ArgTypes[3]; gasPerByte: ArgTypes[4] }\n\n const chain: Chain = endpointIdToChain(local)\n const remoteChain: Chain = endpointIdToChain(remote)\n\n const supportedOutboundProofTypes = getConfig(\n 'evm',\n 'supportedOutboundProof',\n [local, 'default'],\n [remote, 'default']\n )\n const baseGas = getConfig('evm', 'relayerBaseGas', [remote, endpointIdToChain(remote), 'default']) // TODO(gx): double check it\n const airdropCap = getConfig('airdropCap', [chain, 'default'], [remoteChain, 'default'])\n\n const promises = Object.keys(baseGas).map(async (proofType: string): Promise<TransactionData> => {\n // TODO(donghua): double check it\n // the UX team uses prooftype 1 in some places, so we need to set airdrop for 1/2 no matter what\n // if (!supportedOutboundProofTypes.includes(parseInt(proofType))) {\n // continue\n // }\n const currentValue = await contract.dstConfigLookup(remote, proofType)\n const current: ConfigOption = {\n baseGas: currentValue.baseGas,\n airdropCap: currentValue.dstNativeAmtCap,\n gasPerByte: currentValue.gasPerByte,\n }\n\n const expected: ConfigOption = {\n baseGas: ethers.BigNumber.from(baseGas[proofType]),\n airdropCap: ethers.BigNumber.from(airdropCap),\n gasPerByte: ethers.BigNumber.from(currentValue.gasPerByte),\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, proofType, expected.airdropCap, expected.baseGas, expected.gasPerByte]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return txn\n })\n const txns = await Promise.all(promises)\n return txns\n}\n\nasync function setPriceMultiplierBps(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceMultiplierBps'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const current = await contract.multiplierBps()\n const expected: ArgTypes[0] = getConfig('evm', 'relayerPriceMultiplierBps', [\n local,\n endpointIdToChain(local),\n 'default',\n ])\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setDstPriceMultipliers(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remotes: EndpointId[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstPriceMultipliers'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type DstMultiplierStruct = ArgTypes[0][0]\n\n const current: ArgTypes[0] = []\n const expected: ArgTypes[0] = []\n const goal: ArgTypes[0] = []\n\n const chain: Chain = endpointIdToChain(local)\n for (const remoteId of remotes) {\n const remoteChain = endpointIdToChain(remoteId)\n const remoteEndpointVersion = endpointIdToVersion(remoteId)\n if (remoteEndpointVersion === EndpointVersion.V2) {\n logger.info(`Relayer V2 doesn't need to setDstPriceMultipliers with EndpointV2 remote ${remoteId}`)\n continue\n }\n const target = ethers.BigNumber.from(\n getConfig('evm', 'relayerPriceMultipliers', [chain, 'default'], [remoteChain, 'default'])\n )\n\n const present = await contract.dstMultipliers(remoteId)\n\n if (_.isEqualWith(target, present, isEqualBigNumberish) === true) {\n continue\n }\n\n current.push({ chainId: remoteId, multiplier: present } as DstMultiplierStruct)\n expected.push({ chainId: remoteId, multiplier: target } as DstMultiplierStruct)\n }\n\n if (expected.length === 0) {\n return []\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setDstFloorMarginsUSD(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remotes: EndpointId[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstFloorMarginsUSD'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type DstFloorMarginStruct = ArgTypes[0][0]\n\n const current: ArgTypes[0] = []\n const expected: ArgTypes[0] = []\n\n const chain = endpointIdToChain(local)\n for (const remoteId of remotes) {\n const remoteChain = endpointIdToChain(remoteId)\n const remoteEndpointVersion = endpointIdToVersion(remoteId)\n if (remoteEndpointVersion === EndpointVersion.V2) {\n logger.info(`Relayer V2 doesn't need to setDstFloorMarginsUSD with EndpointV2 remote ${remoteId}`)\n continue\n }\n const target = ethers.BigNumber.from(\n getConfig('evm', 'relayerFloorMargins', [chain, 'default'], [remoteChain, 'default'])\n )\n const present = await contract.dstFloorMarginsUSD(remoteId)\n\n if (_.isEqualWith(target, present, isEqualBigNumberish) === true) {\n continue\n }\n\n current.push({ chainId: remoteId, floorMargin: present } as DstFloorMarginStruct)\n expected.push({ chainId: remoteId, floorMargin: target } as DstFloorMarginStruct)\n }\n\n if (expected.length === 0) {\n return []\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setApprovedAddress(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setApprovedAddress'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const approvedAddresses = getConfig('evm', 'relayerApprovedAddresses')\n\n for (const address in approvedAddresses) {\n const current = await contract.isApproved(address)\n const expected: ArgTypes[1] = approvedAddresses[address]\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n\nasync function setPriceConfigUpdater(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceConfigUpdater'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const priceConfigUpdaterAddresses = getConfig('evm', 'relayerPriceConfigUpdaterAddresses') // TODO(gx): double check it\n for (const address in priceConfigUpdaterAddresses) {\n const current = await contract.priceConfigUpdaters(address)\n const expected: ArgTypes[1] = priceConfigUpdaterAddresses[address]\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n\nasync function setPriceFeed(\n contract: ethers.Contract,\n logger: Logger,\n env: Environment,\n stage: Stage,\n local: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceFeed'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n if (stage === Stage.TESTNET) {\n return []\n }\n\n const network = endpointIdToNetwork(local, env)\n const current = await contract.priceFeed()\n const deployment = findDeployment(deployments, 'PriceFeed', { network, source: '@layerzerolabs/lz-evm-sdk-v2' })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of PriceFeed in @layerzerolabs/lz-evm-sdk-v2`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n","import { BigNumber, ethers } from 'ethers'\nimport _ from 'lodash'\nimport invariant from 'tiny-invariant'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n Chain,\n ChainType,\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToChainType,\n endpointIdToNetwork,\n getChainType,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { ConfigurableOption, Deployment, Logger, Transaction, TransactionGroup } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n collectTransactionsEvmHelper,\n getConfigFunc,\n isBigNumberish,\n} from '@layerzerolabs/ops-utilities'\n\nimport { UltraLightNodeV2 } from '../../src/typechain-types'\n\nimport { getUltraLightNodeContractName } from './common'\n\nconst PACKAGE_NAME = '@layerzerolabs/lz-evm-sdk-v1'\n\nexport default class UltraLightNodeV2Configurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = []\n }\n\n async collectTransactions(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n option: ConfigurableOption\n ): Promise<(Transaction | TransactionGroup)[]> {\n const callback = this.buildTransactionDatas.bind(this)\n const chain = endpointIdToChain(local)\n const contractName = getUltraLightNodeContractName(chain)\n\n return await collectTransactionsEvmHelper(\n local,\n remotes,\n deployments,\n option,\n this.configManager,\n this.providerManager,\n [[PACKAGE_NAME, contractName]],\n callback\n )\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setTreasury(contract, logger, local, env, deployments),\n ...remotes.flatMap((remote) => [\n setChainAddressSize(contract, getConfig, logger, local, remote),\n setRemoteUln(contract, getConfig, logger, env, local, remote, deployments),\n initInboundProofLibrary(contract, getConfig, logger, env, local, remote, deployments),\n enableSupportedOutboundProof(contract, getConfig, logger, local, remote),\n setDefaultAdapterParamsForChainId(contract, getConfig, logger, local, remote),\n setDefaultConfigForChainId(contract, getConfig, logger, env, local, remote, deployments),\n ]),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setChainAddressSize(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setChainAddressSize'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const current = await contract.chainAddressSizeMap(remote)\n const configValue = getConfig('addressSize', [remote, endpointIdToChain(remote), 'default'])\n const expected: ArgTypes[1] = ethers.BigNumber.from(configValue)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setChainAddressSize`)\n return [txn]\n}\n\nasync function setRemoteUln(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setRemoteUln'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const cur = await contract.ulnLookup(remote)\n\n let candidate: string\n if (endpointIdToChainType(remote) === ChainType.EVM) {\n const remotePackageName = '@layerzerolabs/lz-evm-sdk-v1'\n const remoteContract = getUltraLightNodeContractName(endpointIdToChain(remote))\n const params = endpointIdToChain(remote) === Chain.APTOS ? ['layerzero'] : [remotePackageName, remoteContract]\n candidate = getAddress(deployments, remote, env, ...params).toLowerCase()\n } else if (endpointIdToChain(remote) === Chain.APTOS) {\n throw new Error(`No implementation to get target address in setRemoteUln for aptos`)\n } else if (endpointIdToChain(remote) === Chain.SOLANA) {\n throw new Error(`No implementation to get target address in setRemoteUln for solana`)\n } else {\n throw new Error(`No implementation to get target address in setRemoteUln for ${remote}`)\n }\n\n const target = ethers.utils.hexZeroPad(candidate, 32)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), target]\n const txn: TransactionData = [target, cur, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setRemoteUln`)\n return [txn]\n}\n\nfunction findDuplicates(arr: string[]) {\n const counts = _.countBy(arr)\n return _.filter(arr, (item) => counts[item] > 1)\n}\n\nasync function initInboundProofLibrary(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'addInboundProofLibraryForChain'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const network = endpointIdToNetwork(local, env)\n const countOfLibs = await contract.maxInboundProofLibrary(remote)\n const targets: [string, string][] = getConfig('evm', 'inboundProofLibrary', [local, 'default'], [remote, 'default'])\n const duplicated = findDuplicates(targets.map((x: [string, string]) => x[1]))\n if (duplicated.length > 0) {\n throw new Error(`duplicated targets ${duplicated} in evm.messageLibrary for ${local}`)\n }\n\n const countOfTargets = targets.length\n invariant(\n countOfTargets >= countOfLibs,\n `maxInboundProofLibrary:${countOfLibs} > inboundProofLibrary[${local}][${remote}]:${countOfTargets}`\n )\n\n const txns: TransactionData[] = []\n\n const libs: string[] = []\n for (let i = 1; i <= countOfLibs; i++) {\n libs.push(await contract.inboundProofLibrary(remote, i))\n }\n\n for (let i = countOfLibs; i < countOfTargets; i++) {\n const [proofType, contractName] = targets[i]\n const deployment = findDeployment(deployments, contractName, {\n network,\n source: PACKAGE_NAME, // TODO(gx): double check it\n })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of ${contractName} for ${network}`)\n }\n\n const targetAddr = deployment.address\n invariant(\n !libs.includes(targetAddr),\n `InboundProofLibrary(${targetAddr}) ${remote}->${local} already exists as library ${\n libs.indexOf(targetAddr) + 1\n }`\n )\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), targetAddr]\n const txn: TransactionData = [\n [i, countOfTargets],\n [countOfLibs, countOfLibs],\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n {},\n ]\n logger.debug(txn)\n\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): initInboundProofLibrary`)\n return txns\n}\n\nfunction getAddress(deployments: Deployment[], endpointId: EndpointId, env: Environment, ...params: string[]): string {\n const chainType = getChainType(endpointIdToChain(endpointId))\n switch (chainType) {\n case ChainType.APTOS: {\n // const [configName] = params\n // const addressName = `${configName.toUpperCase()}_ADDRESS`\n // invariant(addressName in layerzeroAptos.constants, `Couldn't find address in aptos sdk: ${addressName}`)\n // // @ts-ignore\n // const address = layerzeroAptos.constants[addressName][this.stage]\n // invariant(address, `Couldn't find address for ${addressName} and stage ${this.stage}`)\n // return address\n throw new Error('not support aptos') // todo need to been fix\n }\n case ChainType.EVM: {\n const [packageName, contractName] = params\n const network = endpointIdToNetwork(endpointId, env)\n const deployment = findDeployment(deployments, contractName, { source: packageName, network }) as Deployment\n if (!deployment) {\n throw new Error(\n `Not found deployment contractName:${contractName} packageName:${packageName} network:${network}`\n )\n }\n return deployment.address\n }\n case ChainType.SOLANA: {\n throw new Error('Not implemented')\n }\n case ChainType.UNKNOWN: {\n throw new Error('Unknown chain type')\n }\n }\n}\n\nasync function enableSupportedOutboundProof(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'enableSupportedOutboundProof'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const target = getConfig('evm', 'supportedOutboundProof', [local, 'default'], [remote, 'default'])\n const txns: TransactionData[] = []\n for (const proofType of target) {\n const cur = await contract.supportedOutboundProof(remote, proofType)\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), proofType]\n const txn: TransactionData = [true, cur, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setSupportedOutboundProofTypes`)\n return txns\n}\n\nasync function setDefaultAdapterParamsForChainId(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultAdapterParamsForChainId'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const config = getConfig('defaultAdapterParams', [local, 'default'], [remote, 'default'])\n const supportedOutboundProofTypes = getConfig(\n 'evm',\n 'supportedOutboundProof',\n [local, 'default'],\n [remote, 'default']\n )\n const txns: TransactionData[] = []\n for (const proofType of supportedOutboundProofTypes) {\n const current = await contract.defaultAdapterParams(remote, proofType)\n const expected: ArgTypes[2] = encodeAdapterParams(config[proofType])\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, proofType, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setDefaultAdapterParams`)\n return txns\n}\n\nfunction encodeAdapterParams(params: any[]): string {\n switch (params[0]) {\n case 1: {\n return ethers.utils.solidityPack(['uint16', 'uint256'], params)\n }\n case 2: {\n return ethers.utils.solidityPack(['uint16', 'uint256', 'uint256', 'bytes'], params)\n }\n default: {\n throw new Error('Invalid adapter type')\n }\n }\n}\n\nfunction getInboundProofVersion(getConfig: getConfigFunc, local: EndpointId, remote: EndpointId): number {\n const remoteOutboundProofType = getConfig('evm', 'outboundProofType', [remote, 'default'], [local, 'default'])\n const inboundProofLibrary = getConfig('evm', 'inboundProofLibrary', [local, 'default'], [remote, 'default'])\n let i = inboundProofLibrary.length\n while (i > 0) {\n const [libProofType] = inboundProofLibrary[i - 1]\n if (libProofType === remoteOutboundProofType) {\n return i\n }\n i--\n }\n throw new Error(\n `No matching inbound proof library on (${local}) for outbound proof type ${remoteOutboundProofType} on (${remote})`\n )\n}\n\nasync function setDefaultConfigForChainId(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultConfigForChainId'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n type AppConfigType = Awaited<ReturnType<UltraLightNodeV2['defaultAppConfig']>>\n\n const localChain = endpointIdToChain(local)\n const remoteChain = endpointIdToChain(remote)\n\n const defaultConfig: AppConfigType = await contract.defaultAppConfig(remote)\n const current = _.pick(defaultConfig, [\n 'inboundProofLibraryVersion',\n 'inboundBlockConfirmations',\n 'relayer',\n 'outboundProofType',\n 'outboundBlockConfirmations',\n 'oracle',\n ])\n\n // TODO(donghua): confirm the oracle packagename in configuration contains '@layerzerolabs'\n const [oraclePackageName, oracleType] = getConfig('oracle', 'evm', 'type', [local, 'default'], [remote, 'default'])\n if (oraclePackageName === undefined || oracleType === undefined) {\n throw new Error(\n `oracle setting for evm.type.${local}.${remote} is [${oraclePackageName}, ${oracleType}] which is invalid`\n )\n }\n\n const inboundProofLibraryVersion = getInboundProofVersion(getConfig, local, remote)\n if (isBigNumberish(inboundProofLibraryVersion) === false) {\n throw new Error(`inboundProofLibraryVersion for (${remoteChain}, ${localChain}) is not number`)\n }\n\n const inboundBlockConfirmations = getConfig('inboundBlockConf', [localChain, 'default'], [remoteChain, 'default'])\n if (isBigNumberish(inboundBlockConfirmations) === false) {\n throw new Error(`inboundBlockConf for (${remoteChain}, ${localChain}) is not number`)\n }\n\n const outboundProofType = getConfig('evm', 'outboundProofType', [local, 'default'], [remote, 'default'])\n if (isBigNumberish(outboundProofType) === false) {\n throw new Error(`outboundProofType for (${remoteChain}, ${localChain}) is not number`)\n }\n\n // TODO(gx): double check, get outboundBlockConfirmations from inboundBlockConfv ??\n const outboundBlockConfirmations = getConfig('inboundBlockConf', [remoteChain, 'default'], [localChain, 'default'])\n if (isBigNumberish(outboundBlockConfirmations) === false) {\n throw new Error(`outboundBlockConf for (${remoteChain}, ${localChain}) is invalid number`)\n }\n\n const relayer = ethers.utils.getAddress(getAddress(deployments, local, env, PACKAGE_NAME, 'RelayerV2'))\n if (ethers.utils.isAddress(relayer) === false) {\n throw new Error(`RelayerV2 is invalid`)\n }\n\n const oracle = ethers.utils.getAddress(getAddress(deployments, local, env, oraclePackageName, oracleType))\n if (ethers.utils.isAddress(oracle) === false) {\n throw new Error(`${oracleType} is invalid`)\n }\n\n // TODO(gx): declare type of expected with AppConfigType\n const expected = {\n inboundProofLibraryVersion: BigNumber.from(inboundProofLibraryVersion).toNumber(),\n inboundBlockConfirmations: BigNumber.from(inboundBlockConfirmations),\n relayer: relayer,\n outboundProofType: BigNumber.from(outboundProofType).toNumber(),\n outboundBlockConfirmations: BigNumber.from(outboundBlockConfirmations),\n oracle: oracle,\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [\n remote,\n expected.inboundProofLibraryVersion,\n expected.inboundBlockConfirmations,\n expected.relayer,\n expected.outboundProofType,\n expected.outboundBlockConfirmations,\n expected.oracle,\n ]\n\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '500000' },\n ]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setDefaultConfigForChainId`)\n return [txn]\n}\n\nasync function setTreasury(\n contract: ethers.Contract,\n logger: Logger,\n local: EndpointId,\n env: Environment,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setTreasury'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const network = endpointIdToNetwork(local, env)\n const deployment = findDeployment(deployments, 'TreasuryV2', { network })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of TreasuryV2 for ${network}`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n if (ethers.utils.isAddress(expected) === false) {\n throw new Error(`the treasury address for ${network} in TreasuryV2 is invalid`)\n }\n\n const current = await contract.treasuryContract()\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n\n return [txn]\n}\n","import { Chain } from '@layerzerolabs/lz-definitions'\n\nexport function getUltraLightNodeContractName(chain: Chain): string {\n switch (chain) {\n case Chain.SHRAPNEL:\n case Chain.KIWI: {\n return 'UltraLightNodeV2AltToken'\n }\n default: {\n return 'UltraLightNodeV2'\n }\n }\n}\n","import { ethers } from 'ethers'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToNetwork,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { FeeHandler } from '../../src'\n\nimport { getUltraLightNodeContractName } from './common'\n\nconst PACKAGENAME = '@layerzerolabs/lz-evm-sdk-v1'\nexport default class FeeHandlerConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [[PACKAGENAME, 'FeeHandler']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setFeeToken(contract, getConfig, logger, local),\n approve(contract, logger, local, env, deployments),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setFeeToken(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setFeeToken'\n type ArgTypes = Parameters<FeeHandler[typeof METHOD_NAME]>\n\n const current = await contract.feeToken()\n const configValue = getConfig('altToken', [local, endpointIdToChain(local), 'default'])\n if (!configValue) {\n throw new Error(`No altToken configured for ${local}`)\n }\n const expected: ArgTypes[0] = ethers.utils.getAddress(configValue)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}): setFeeHandlerFeeToken`)\n return [txn]\n}\n\nasync function approve(\n contract: ethers.Contract,\n logger: Logger,\n local: EndpointId,\n env: Environment,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'approve'\n type ArgTypes = Parameters<FeeHandler[typeof METHOD_NAME]>\n const network = endpointIdToNetwork(local, env)\n\n const contractName = getUltraLightNodeContractName(endpointIdToChain(local))\n const ulnAddress = (findDeployment(deployments, contractName, { source: PACKAGENAME, network }) as Deployment)\n .address\n\n const current = await contract.approved(ulnAddress)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [ulnAddress]\n const txn: TransactionData = [true, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) : approve`)\n return [txn]\n}\n"]}
package/dist/ops.mjs CHANGED
@@ -125,7 +125,7 @@ async function newVersion(contract, getConfig, logger, env, local, deployments)
125
125
  libs.push(await contract.libraryLookup(i));
126
126
  }
127
127
  for (let i = latestVersion; i < countOfTargets; i++) {
128
- const packageName = targets[i] === "SendUln301" || targets[i] === "ReceiveUln301" ? "@layerzerolabs/lz-evm-sdk-v2" : "@layerzerolabs/lz-evm-sdk-v1";
128
+ const packageName = targets[i] === "UltraLightNode301" ? "@layerzerolabs/lz-evm-sdk-v2" : "@layerzerolabs/lz-evm-sdk-v1";
129
129
  const deployment = findDeployment(deployments, targets[i], {
130
130
  source: packageName,
131
131
  network
package/dist/ops.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../ops/wire/pricefeed.ts","../ops/wire/endpoint.ts","../ops/wire/relayer-v2.ts","../ops/wire/uln2.ts","../ops/wire/common.ts","../ops/wire/fee-handler.ts"],"names":["EvmWalletNames","networkToStage","LayerZeroEvmBaseConfigurable","_","endpointIdToChain","endpointIdToNetwork","findDeployment","ethers","invariant","Chain","findDuplicates"],"mappings":"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","sourcesContent":["import { ethers } from 'ethers'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport { EndpointId, Environment, Network, networkToStage } from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { PriceFeed } from '../../src/typechain-types'\n\nexport default class PriceFeedConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'PriceFeed']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [setPriceUpdater(contract, getConfig, logger)]\n return (await Promise.all(candidates)).flat()\n }\n}\n\n// setPriceUpdater\nasync function setPriceUpdater(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n type ArgTypes = Parameters<PriceFeed['setPriceUpdater']>\n\n const txns: TransactionData[] = []\n const updaters = getConfig('evm', 'priceFeedUpdaterAddresses')\n for (const address in updaters) {\n const current = await contract.priceUpdater(address)\n const expected: ArgTypes[1] = updaters[address]\n const method = contract.interface.getFunction('setPriceUpdater').name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n","import { ethers } from 'ethers'\nimport _, { parseInt } from 'lodash'\nimport invariant from 'tiny-invariant'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToNetwork,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { Endpoint } from '../../src/typechain-types'\n\nexport default class EndpointConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'Endpoint']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n newVersion(contract, getConfig, logger, env, local, deployments),\n setDefaultSendVersion(contract, getConfig, logger, local),\n setDefaultReceiveVersion(contract, getConfig, logger, local),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setDefaultSendVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultSendVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const current = await contract.defaultSendVersion()\n const configValue = getConfig('defaultSendVersion', [local, endpointIdToChain(local), 'default'])\n const expected: ArgTypes[0] = parseInt(configValue)\n if (expected === undefined) {\n throw new Error(`defaultSendVersion of ${local} in config is undefined`)\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '1000000' },\n ]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}): setDefaultSendVersion`)\n return [txn]\n}\n\nasync function setDefaultReceiveVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultReceiveVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const current = await contract.defaultReceiveVersion() // TODO(gx): confirm with carmen\n const configValue = getConfig('defaultReceiveVersion', [local, endpointIdToChain(local), 'default'])\n const expected: ArgTypes[0] = parseInt(configValue)\n if (expected === undefined) {\n throw new Error(`defaultSendVersion of ${local} in config is undefined`)\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '1000000' },\n ]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}): setDefaultReceiveVersion`)\n return [txn]\n}\n\nfunction findDuplicates(arr: string[]) {\n const counts = _.countBy(arr)\n return _.filter(arr, (item) => counts[item] > 1)\n}\n\nasync function newVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'newVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const network = endpointIdToNetwork(local, env)\n const latestVersion = await contract.latestVersion()\n const targets: string[] = getConfig('evm', 'messageLibrary', [local, endpointIdToChain(local), 'default'])\n const duplicated = findDuplicates(targets)\n if (duplicated.length > 0) {\n throw new Error(`duplicated targets ${duplicated} in evm.messageLibrary for ${local}`)\n }\n\n const countOfTargets = targets.length\n invariant(\n countOfTargets >= latestVersion,\n `latestVersion:${latestVersion} > messageLibrary[${local}]:${countOfTargets}`\n )\n\n const libs: string[] = []\n for (let i = 1; i <= latestVersion; i++) {\n libs.push(await contract.libraryLookup(i))\n }\n // deploy new versions\n for (let i = latestVersion; i < countOfTargets; i++) {\n const packageName =\n targets[i] === 'SendUln301' || targets[i] === 'ReceiveUln301'\n ? '@layerzerolabs/lz-evm-sdk-v2'\n : '@layerzerolabs/lz-evm-sdk-v1'\n const deployment = findDeployment(deployments, targets[i], {\n source: packageName,\n network,\n })\n if (deployment === undefined) {\n throw new Error(`failed to find deployment of ${targets[i]} for ${network}`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n invariant(\n !libs.includes(expected),\n `MsgLib(${expected}) on ${local} already exists as version ${libs.indexOf(expected) + 1}`\n )\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, undefined, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n\n logger.debug(`Configured LayerZero(${local}) : initMsgLibVersion`)\n return txns\n}\n","import { ethers } from 'ethers'\nimport _ from 'lodash'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Environment,\n Network,\n Stage,\n endpointIdToChain,\n endpointIdToNetwork,\n endpointIdToVersion,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n isEqualBigNumberish,\n} from '@layerzerolabs/ops-utilities'\n\nimport { RelayerV2 } from '../../src'\n\nexport default class RelayerV2Configurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'RelayerV2']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const stage = networkToStage(network)\n const getConfig = this.configManager.get.bind(this.configManager, stage)\n\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setApprovedAddress(contract, getConfig, logger),\n setPriceConfigUpdater(contract, getConfig, logger),\n setPriceFeed(contract, logger, env, stage, local, deployments),\n ...remotes.flatMap((remote) => [\n setDstConfig(contract, getConfig, logger, local, remote),\n setPriceMultiplierBps(contract, getConfig, logger, local),\n ]),\n setDstPriceMultipliers(contract, getConfig, logger, local, remotes),\n setDstFloorMarginsUSD(contract, getConfig, logger, local, remotes),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setDstConfig(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstConfig'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type ConfigOption = { baseGas: ArgTypes[2]; airdropCap: ArgTypes[3]; gasPerByte: ArgTypes[4] }\n\n const chain: Chain = endpointIdToChain(local)\n const remoteChain: Chain = endpointIdToChain(remote)\n\n const supportedOutboundProofTypes = getConfig(\n 'evm',\n 'supportedOutboundProof',\n [local, 'default'],\n [remote, 'default']\n )\n const baseGas = getConfig('evm', 'relayerBaseGas', [remote, endpointIdToChain(remote), 'default']) // TODO(gx): double check it\n const airdropCap = getConfig('airdropCap', [chain, 'default'], [remoteChain, 'default'])\n\n const promises = Object.keys(baseGas).map(async (proofType: string): Promise<TransactionData> => {\n // TODO(donghua): double check it\n // the UX team uses prooftype 1 in some places, so we need to set airdrop for 1/2 no matter what\n // if (!supportedOutboundProofTypes.includes(parseInt(proofType))) {\n // continue\n // }\n const currentValue = await contract.dstConfigLookup(remote, proofType)\n const current: ConfigOption = {\n baseGas: currentValue.baseGas,\n airdropCap: currentValue.dstNativeAmtCap,\n gasPerByte: currentValue.gasPerByte,\n }\n\n const expected: ConfigOption = {\n baseGas: ethers.BigNumber.from(baseGas[proofType]),\n airdropCap: ethers.BigNumber.from(airdropCap),\n gasPerByte: ethers.BigNumber.from(currentValue.gasPerByte),\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, proofType, expected.airdropCap, expected.baseGas, expected.gasPerByte]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return txn\n })\n const txns = await Promise.all(promises)\n return txns\n}\n\nasync function setPriceMultiplierBps(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceMultiplierBps'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const current = await contract.multiplierBps()\n const expected: ArgTypes[0] = getConfig('evm', 'relayerPriceMultiplierBps', [\n local,\n endpointIdToChain(local),\n 'default',\n ])\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setDstPriceMultipliers(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remotes: EndpointId[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstPriceMultipliers'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type DstMultiplierStruct = ArgTypes[0][0]\n\n const current: ArgTypes[0] = []\n const expected: ArgTypes[0] = []\n const goal: ArgTypes[0] = []\n\n const chain: Chain = endpointIdToChain(local)\n for (const remoteId of remotes) {\n const remoteChain = endpointIdToChain(remoteId)\n const remoteEndpointVersion = endpointIdToVersion(remoteId)\n if (remoteEndpointVersion === EndpointVersion.V2) {\n logger.info(`Relayer V2 doesn't need to setDstPriceMultipliers with EndpointV2 remote ${remoteId}`)\n continue\n }\n const target = ethers.BigNumber.from(\n getConfig('evm', 'relayerPriceMultipliers', [chain, 'default'], [remoteChain, 'default'])\n )\n\n const present = await contract.dstMultipliers(remoteId)\n\n if (_.isEqualWith(target, present, isEqualBigNumberish) === true) {\n continue\n }\n\n current.push({ chainId: remoteId, multiplier: present } as DstMultiplierStruct)\n expected.push({ chainId: remoteId, multiplier: target } as DstMultiplierStruct)\n }\n\n if (expected.length === 0) {\n return []\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setDstFloorMarginsUSD(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remotes: EndpointId[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstFloorMarginsUSD'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type DstFloorMarginStruct = ArgTypes[0][0]\n\n const current: ArgTypes[0] = []\n const expected: ArgTypes[0] = []\n\n const chain = endpointIdToChain(local)\n for (const remoteId of remotes) {\n const remoteChain = endpointIdToChain(remoteId)\n const remoteEndpointVersion = endpointIdToVersion(remoteId)\n if (remoteEndpointVersion === EndpointVersion.V2) {\n logger.info(`Relayer V2 doesn't need to setDstFloorMarginsUSD with EndpointV2 remote ${remoteId}`)\n continue\n }\n const target = ethers.BigNumber.from(\n getConfig('evm', 'relayerFloorMargins', [chain, 'default'], [remoteChain, 'default'])\n )\n const present = await contract.dstFloorMarginsUSD(remoteId)\n\n if (_.isEqualWith(target, present, isEqualBigNumberish) === true) {\n continue\n }\n\n current.push({ chainId: remoteId, floorMargin: present } as DstFloorMarginStruct)\n expected.push({ chainId: remoteId, floorMargin: target } as DstFloorMarginStruct)\n }\n\n if (expected.length === 0) {\n return []\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setApprovedAddress(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setApprovedAddress'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const approvedAddresses = getConfig('evm', 'relayerApprovedAddresses')\n\n for (const address in approvedAddresses) {\n const current = await contract.isApproved(address)\n const expected: ArgTypes[1] = approvedAddresses[address]\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n\nasync function setPriceConfigUpdater(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceConfigUpdater'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const priceConfigUpdaterAddresses = getConfig('evm', 'relayerPriceConfigUpdaterAddresses') // TODO(gx): double check it\n for (const address in priceConfigUpdaterAddresses) {\n const current = await contract.priceConfigUpdaters(address)\n const expected: ArgTypes[1] = priceConfigUpdaterAddresses[address]\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n\nasync function setPriceFeed(\n contract: ethers.Contract,\n logger: Logger,\n env: Environment,\n stage: Stage,\n local: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceFeed'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n if (stage === Stage.TESTNET) {\n return []\n }\n\n const network = endpointIdToNetwork(local, env)\n const current = await contract.priceFeed()\n const deployment = findDeployment(deployments, 'PriceFeed', { network, source: '@layerzerolabs/lz-evm-sdk-v2' })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of PriceFeed in @layerzerolabs/lz-evm-sdk-v2`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n","import { BigNumber, ethers } from 'ethers'\nimport _ from 'lodash'\nimport invariant from 'tiny-invariant'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n Chain,\n ChainType,\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToChainType,\n endpointIdToNetwork,\n getChainType,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { ConfigurableOption, Deployment, Logger, Transaction, TransactionGroup } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n collectTransactionsEvmHelper,\n getConfigFunc,\n isBigNumberish,\n} from '@layerzerolabs/ops-utilities'\n\nimport { UltraLightNodeV2 } from '../../src/typechain-types'\n\nimport { getUltraLightNodeContractName } from './common'\n\nconst PACKAGE_NAME = '@layerzerolabs/lz-evm-sdk-v1'\n\nexport default class UltraLightNodeV2Configurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = []\n }\n\n async collectTransactions(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n option: ConfigurableOption\n ): Promise<(Transaction | TransactionGroup)[]> {\n const callback = this.buildTransactionDatas.bind(this)\n const chain = endpointIdToChain(local)\n const contractName = getUltraLightNodeContractName(chain)\n\n return await collectTransactionsEvmHelper(\n local,\n remotes,\n deployments,\n option,\n this.configManager,\n this.providerManager,\n [[PACKAGE_NAME, contractName]],\n callback\n )\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setTreasury(contract, logger, local, env, deployments),\n ...remotes.flatMap((remote) => [\n setChainAddressSize(contract, getConfig, logger, local, remote),\n setRemoteUln(contract, getConfig, logger, env, local, remote, deployments),\n initInboundProofLibrary(contract, getConfig, logger, env, local, remote, deployments),\n enableSupportedOutboundProof(contract, getConfig, logger, local, remote),\n setDefaultAdapterParamsForChainId(contract, getConfig, logger, local, remote),\n setDefaultConfigForChainId(contract, getConfig, logger, env, local, remote, deployments),\n ]),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setChainAddressSize(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setChainAddressSize'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const current = await contract.chainAddressSizeMap(remote)\n const configValue = getConfig('addressSize', [remote, endpointIdToChain(remote), 'default'])\n const expected: ArgTypes[1] = ethers.BigNumber.from(configValue)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setChainAddressSize`)\n return [txn]\n}\n\nasync function setRemoteUln(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setRemoteUln'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const cur = await contract.ulnLookup(remote)\n\n let candidate: string\n if (endpointIdToChainType(remote) === ChainType.EVM) {\n const remotePackageName = '@layerzerolabs/lz-evm-sdk-v1'\n const remoteContract = getUltraLightNodeContractName(endpointIdToChain(remote))\n const params = endpointIdToChain(remote) === Chain.APTOS ? ['layerzero'] : [remotePackageName, remoteContract]\n candidate = getAddress(deployments, remote, env, ...params).toLowerCase()\n } else if (endpointIdToChain(remote) === Chain.APTOS) {\n throw new Error(`No implementation to get target address in setRemoteUln for aptos`)\n } else if (endpointIdToChain(remote) === Chain.SOLANA) {\n throw new Error(`No implementation to get target address in setRemoteUln for solana`)\n } else {\n throw new Error(`No implementation to get target address in setRemoteUln for ${remote}`)\n }\n\n const target = ethers.utils.hexZeroPad(candidate, 32)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), target]\n const txn: TransactionData = [target, cur, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setRemoteUln`)\n return [txn]\n}\n\nfunction findDuplicates(arr: string[]) {\n const counts = _.countBy(arr)\n return _.filter(arr, (item) => counts[item] > 1)\n}\n\nasync function initInboundProofLibrary(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'addInboundProofLibraryForChain'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const network = endpointIdToNetwork(local, env)\n const countOfLibs = await contract.maxInboundProofLibrary(remote)\n const targets: [string, string][] = getConfig('evm', 'inboundProofLibrary', [local, 'default'], [remote, 'default'])\n const duplicated = findDuplicates(targets.map((x: [string, string]) => x[1]))\n if (duplicated.length > 0) {\n throw new Error(`duplicated targets ${duplicated} in evm.messageLibrary for ${local}`)\n }\n\n const countOfTargets = targets.length\n invariant(\n countOfTargets >= countOfLibs,\n `maxInboundProofLibrary:${countOfLibs} > inboundProofLibrary[${local}][${remote}]:${countOfTargets}`\n )\n\n const txns: TransactionData[] = []\n\n const libs: string[] = []\n for (let i = 1; i <= countOfLibs; i++) {\n libs.push(await contract.inboundProofLibrary(remote, i))\n }\n\n for (let i = countOfLibs; i < countOfTargets; i++) {\n const [proofType, contractName] = targets[i]\n const deployment = findDeployment(deployments, contractName, {\n network,\n source: PACKAGE_NAME, // TODO(gx): double check it\n })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of ${contractName} for ${network}`)\n }\n\n const targetAddr = deployment.address\n invariant(\n !libs.includes(targetAddr),\n `InboundProofLibrary(${targetAddr}) ${remote}->${local} already exists as library ${\n libs.indexOf(targetAddr) + 1\n }`\n )\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), targetAddr]\n const txn: TransactionData = [\n [i, countOfTargets],\n [countOfLibs, countOfLibs],\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n {},\n ]\n logger.debug(txn)\n\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): initInboundProofLibrary`)\n return txns\n}\n\nfunction getAddress(deployments: Deployment[], endpointId: EndpointId, env: Environment, ...params: string[]): string {\n const chainType = getChainType(endpointIdToChain(endpointId))\n switch (chainType) {\n case ChainType.APTOS: {\n // const [configName] = params\n // const addressName = `${configName.toUpperCase()}_ADDRESS`\n // invariant(addressName in layerzeroAptos.constants, `Couldn't find address in aptos sdk: ${addressName}`)\n // // @ts-ignore\n // const address = layerzeroAptos.constants[addressName][this.stage]\n // invariant(address, `Couldn't find address for ${addressName} and stage ${this.stage}`)\n // return address\n throw new Error('not support aptos') // todo need to been fix\n }\n case ChainType.EVM: {\n const [packageName, contractName] = params\n const network = endpointIdToNetwork(endpointId, env)\n const deployment = findDeployment(deployments, contractName, { source: packageName, network }) as Deployment\n if (!deployment) {\n throw new Error(\n `Not found deployment contractName:${contractName} packageName:${packageName} network:${network}`\n )\n }\n return deployment.address\n }\n case ChainType.SOLANA: {\n throw new Error('Not implemented')\n }\n case ChainType.UNKNOWN: {\n throw new Error('Unknown chain type')\n }\n }\n}\n\nasync function enableSupportedOutboundProof(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'enableSupportedOutboundProof'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const target = getConfig('evm', 'supportedOutboundProof', [local, 'default'], [remote, 'default'])\n const txns: TransactionData[] = []\n for (const proofType of target) {\n const cur = await contract.supportedOutboundProof(remote, proofType)\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), proofType]\n const txn: TransactionData = [true, cur, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setSupportedOutboundProofTypes`)\n return txns\n}\n\nasync function setDefaultAdapterParamsForChainId(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultAdapterParamsForChainId'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const config = getConfig('defaultAdapterParams', [local, 'default'], [remote, 'default'])\n const supportedOutboundProofTypes = getConfig(\n 'evm',\n 'supportedOutboundProof',\n [local, 'default'],\n [remote, 'default']\n )\n const txns: TransactionData[] = []\n for (const proofType of supportedOutboundProofTypes) {\n const current = await contract.defaultAdapterParams(remote, proofType)\n const expected: ArgTypes[2] = encodeAdapterParams(config[proofType])\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, proofType, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setDefaultAdapterParams`)\n return txns\n}\n\nfunction encodeAdapterParams(params: any[]): string {\n switch (params[0]) {\n case 1: {\n return ethers.utils.solidityPack(['uint16', 'uint256'], params)\n }\n case 2: {\n return ethers.utils.solidityPack(['uint16', 'uint256', 'uint256', 'bytes'], params)\n }\n default: {\n throw new Error('Invalid adapter type')\n }\n }\n}\n\nfunction getInboundProofVersion(getConfig: getConfigFunc, local: EndpointId, remote: EndpointId): number {\n const remoteOutboundProofType = getConfig('evm', 'outboundProofType', [remote, 'default'], [local, 'default'])\n const inboundProofLibrary = getConfig('evm', 'inboundProofLibrary', [local, 'default'], [remote, 'default'])\n let i = inboundProofLibrary.length\n while (i > 0) {\n const [libProofType] = inboundProofLibrary[i - 1]\n if (libProofType === remoteOutboundProofType) {\n return i\n }\n i--\n }\n throw new Error(\n `No matching inbound proof library on (${local}) for outbound proof type ${remoteOutboundProofType} on (${remote})`\n )\n}\n\nasync function setDefaultConfigForChainId(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultConfigForChainId'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n type AppConfigType = Awaited<ReturnType<UltraLightNodeV2['defaultAppConfig']>>\n\n const localChain = endpointIdToChain(local)\n const remoteChain = endpointIdToChain(remote)\n\n const defaultConfig: AppConfigType = await contract.defaultAppConfig(remote)\n const current = _.pick(defaultConfig, [\n 'inboundProofLibraryVersion',\n 'inboundBlockConfirmations',\n 'relayer',\n 'outboundProofType',\n 'outboundBlockConfirmations',\n 'oracle',\n ])\n\n // TODO(donghua): confirm the oracle packagename in configuration contains '@layerzerolabs'\n const [oraclePackageName, oracleType] = getConfig('oracle', 'evm', 'type', [local, 'default'], [remote, 'default'])\n if (oraclePackageName === undefined || oracleType === undefined) {\n throw new Error(\n `oracle setting for evm.type.${local}.${remote} is [${oraclePackageName}, ${oracleType}] which is invalid`\n )\n }\n\n const inboundProofLibraryVersion = getInboundProofVersion(getConfig, local, remote)\n if (isBigNumberish(inboundProofLibraryVersion) === false) {\n throw new Error(`inboundProofLibraryVersion for (${remoteChain}, ${localChain}) is not number`)\n }\n\n const inboundBlockConfirmations = getConfig('inboundBlockConf', [localChain, 'default'], [remoteChain, 'default'])\n if (isBigNumberish(inboundBlockConfirmations) === false) {\n throw new Error(`inboundBlockConf for (${remoteChain}, ${localChain}) is not number`)\n }\n\n const outboundProofType = getConfig('evm', 'outboundProofType', [local, 'default'], [remote, 'default'])\n if (isBigNumberish(outboundProofType) === false) {\n throw new Error(`outboundProofType for (${remoteChain}, ${localChain}) is not number`)\n }\n\n // TODO(gx): double check, get outboundBlockConfirmations from inboundBlockConfv ??\n const outboundBlockConfirmations = getConfig('inboundBlockConf', [remoteChain, 'default'], [localChain, 'default'])\n if (isBigNumberish(outboundBlockConfirmations) === false) {\n throw new Error(`outboundBlockConf for (${remoteChain}, ${localChain}) is invalid number`)\n }\n\n const relayer = ethers.utils.getAddress(getAddress(deployments, local, env, PACKAGE_NAME, 'RelayerV2'))\n if (ethers.utils.isAddress(relayer) === false) {\n throw new Error(`RelayerV2 is invalid`)\n }\n\n const oracle = ethers.utils.getAddress(getAddress(deployments, local, env, oraclePackageName, oracleType))\n if (ethers.utils.isAddress(oracle) === false) {\n throw new Error(`${oracleType} is invalid`)\n }\n\n // TODO(gx): declare type of expected with AppConfigType\n const expected = {\n inboundProofLibraryVersion: BigNumber.from(inboundProofLibraryVersion).toNumber(),\n inboundBlockConfirmations: BigNumber.from(inboundBlockConfirmations),\n relayer: relayer,\n outboundProofType: BigNumber.from(outboundProofType).toNumber(),\n outboundBlockConfirmations: BigNumber.from(outboundBlockConfirmations),\n oracle: oracle,\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [\n remote,\n expected.inboundProofLibraryVersion,\n expected.inboundBlockConfirmations,\n expected.relayer,\n expected.outboundProofType,\n expected.outboundBlockConfirmations,\n expected.oracle,\n ]\n\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '500000' },\n ]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setDefaultConfigForChainId`)\n return [txn]\n}\n\nasync function setTreasury(\n contract: ethers.Contract,\n logger: Logger,\n local: EndpointId,\n env: Environment,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setTreasury'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const network = endpointIdToNetwork(local, env)\n const deployment = findDeployment(deployments, 'TreasuryV2', { network })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of TreasuryV2 for ${network}`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n if (ethers.utils.isAddress(expected) === false) {\n throw new Error(`the treasury address for ${network} in TreasuryV2 is invalid`)\n }\n\n const current = await contract.treasuryContract()\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n\n return [txn]\n}\n","import { Chain } from '@layerzerolabs/lz-definitions'\n\nexport function getUltraLightNodeContractName(chain: Chain): string {\n switch (chain) {\n case Chain.SHRAPNEL:\n case Chain.KIWI: {\n return 'UltraLightNodeV2AltToken'\n }\n default: {\n return 'UltraLightNodeV2'\n }\n }\n}\n","import { ethers } from 'ethers'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToNetwork,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { FeeHandler } from '../../src'\n\nimport { getUltraLightNodeContractName } from './common'\n\nconst PACKAGENAME = '@layerzerolabs/lz-evm-sdk-v1'\nexport default class FeeHandlerConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [[PACKAGENAME, 'FeeHandler']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setFeeToken(contract, getConfig, logger, local),\n approve(contract, logger, local, env, deployments),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setFeeToken(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setFeeToken'\n type ArgTypes = Parameters<FeeHandler[typeof METHOD_NAME]>\n\n const current = await contract.feeToken()\n const configValue = getConfig('altToken', [local, endpointIdToChain(local), 'default'])\n if (!configValue) {\n throw new Error(`No altToken configured for ${local}`)\n }\n const expected: ArgTypes[0] = ethers.utils.getAddress(configValue)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}): setFeeHandlerFeeToken`)\n return [txn]\n}\n\nasync function approve(\n contract: ethers.Contract,\n logger: Logger,\n local: EndpointId,\n env: Environment,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'approve'\n type ArgTypes = Parameters<FeeHandler[typeof METHOD_NAME]>\n const network = endpointIdToNetwork(local, env)\n\n const contractName = getUltraLightNodeContractName(endpointIdToChain(local))\n const ulnAddress = (findDeployment(deployments, contractName, { source: PACKAGENAME, network }) as Deployment)\n .address\n\n const current = await contract.approved(ulnAddress)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [ulnAddress]\n const txn: TransactionData = [true, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) : approve`)\n return [txn]\n}\n"]}
1
+ {"version":3,"sources":["../ops/wire/pricefeed.ts","../ops/wire/endpoint.ts","../ops/wire/relayer-v2.ts","../ops/wire/uln2.ts","../ops/wire/common.ts","../ops/wire/fee-handler.ts"],"names":["EvmWalletNames","networkToStage","LayerZeroEvmBaseConfigurable","_","endpointIdToChain","endpointIdToNetwork","findDeployment","ethers","invariant","Chain","findDuplicates"],"mappings":"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","sourcesContent":["import { ethers } from 'ethers'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport { EndpointId, Environment, Network, networkToStage } from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { PriceFeed } from '../../src/typechain-types'\n\nexport default class PriceFeedConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'PriceFeed']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [setPriceUpdater(contract, getConfig, logger)]\n return (await Promise.all(candidates)).flat()\n }\n}\n\n// setPriceUpdater\nasync function setPriceUpdater(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n type ArgTypes = Parameters<PriceFeed['setPriceUpdater']>\n\n const txns: TransactionData[] = []\n const updaters = getConfig('evm', 'priceFeedUpdaterAddresses')\n for (const address in updaters) {\n const current = await contract.priceUpdater(address)\n const expected: ArgTypes[1] = updaters[address]\n const method = contract.interface.getFunction('setPriceUpdater').name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n","import { ethers } from 'ethers'\nimport _, { parseInt } from 'lodash'\nimport invariant from 'tiny-invariant'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToNetwork,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { Endpoint } from '../../src/typechain-types'\n\nexport default class EndpointConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'Endpoint']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n newVersion(contract, getConfig, logger, env, local, deployments),\n setDefaultSendVersion(contract, getConfig, logger, local),\n setDefaultReceiveVersion(contract, getConfig, logger, local),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setDefaultSendVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultSendVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const current = await contract.defaultSendVersion()\n const configValue = getConfig('defaultSendVersion', [local, endpointIdToChain(local), 'default'])\n const expected: ArgTypes[0] = parseInt(configValue)\n if (expected === undefined) {\n throw new Error(`defaultSendVersion of ${local} in config is undefined`)\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '1000000' },\n ]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}): setDefaultSendVersion`)\n return [txn]\n}\n\nasync function setDefaultReceiveVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultReceiveVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const current = await contract.defaultReceiveVersion() // TODO(gx): confirm with carmen\n const configValue = getConfig('defaultReceiveVersion', [local, endpointIdToChain(local), 'default'])\n const expected: ArgTypes[0] = parseInt(configValue)\n if (expected === undefined) {\n throw new Error(`defaultSendVersion of ${local} in config is undefined`)\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '1000000' },\n ]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}): setDefaultReceiveVersion`)\n return [txn]\n}\n\nfunction findDuplicates(arr: string[]) {\n const counts = _.countBy(arr)\n return _.filter(arr, (item) => counts[item] > 1)\n}\n\nasync function newVersion(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'newVersion'\n type ArgTypes = Parameters<Endpoint[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const network = endpointIdToNetwork(local, env)\n const latestVersion = await contract.latestVersion()\n const targets: string[] = getConfig('evm', 'messageLibrary', [local, endpointIdToChain(local), 'default'])\n const duplicated = findDuplicates(targets)\n if (duplicated.length > 0) {\n throw new Error(`duplicated targets ${duplicated} in evm.messageLibrary for ${local}`)\n }\n\n const countOfTargets = targets.length\n invariant(\n countOfTargets >= latestVersion,\n `latestVersion:${latestVersion} > messageLibrary[${local}]:${countOfTargets}`\n )\n\n const libs: string[] = []\n for (let i = 1; i <= latestVersion; i++) {\n libs.push(await contract.libraryLookup(i))\n }\n // deploy new versions\n for (let i = latestVersion; i < countOfTargets; i++) {\n const packageName =\n targets[i] === 'UltraLightNode301' ? '@layerzerolabs/lz-evm-sdk-v2' : '@layerzerolabs/lz-evm-sdk-v1'\n const deployment = findDeployment(deployments, targets[i], {\n source: packageName,\n network,\n })\n if (deployment === undefined) {\n throw new Error(`failed to find deployment of ${targets[i]} for ${network}`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n invariant(\n !libs.includes(expected),\n `MsgLib(${expected}) on ${local} already exists as version ${libs.indexOf(expected) + 1}`\n )\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, undefined, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n\n logger.debug(`Configured LayerZero(${local}) : initMsgLibVersion`)\n return txns\n}\n","import { ethers } from 'ethers'\nimport _ from 'lodash'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Environment,\n Network,\n Stage,\n endpointIdToChain,\n endpointIdToNetwork,\n endpointIdToVersion,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n isEqualBigNumberish,\n} from '@layerzerolabs/ops-utilities'\n\nimport { RelayerV2 } from '../../src'\n\nexport default class RelayerV2Configurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [['@layerzerolabs/lz-evm-sdk-v1', 'RelayerV2']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const stage = networkToStage(network)\n const getConfig = this.configManager.get.bind(this.configManager, stage)\n\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setApprovedAddress(contract, getConfig, logger),\n setPriceConfigUpdater(contract, getConfig, logger),\n setPriceFeed(contract, logger, env, stage, local, deployments),\n ...remotes.flatMap((remote) => [\n setDstConfig(contract, getConfig, logger, local, remote),\n setPriceMultiplierBps(contract, getConfig, logger, local),\n ]),\n setDstPriceMultipliers(contract, getConfig, logger, local, remotes),\n setDstFloorMarginsUSD(contract, getConfig, logger, local, remotes),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setDstConfig(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstConfig'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type ConfigOption = { baseGas: ArgTypes[2]; airdropCap: ArgTypes[3]; gasPerByte: ArgTypes[4] }\n\n const chain: Chain = endpointIdToChain(local)\n const remoteChain: Chain = endpointIdToChain(remote)\n\n const supportedOutboundProofTypes = getConfig(\n 'evm',\n 'supportedOutboundProof',\n [local, 'default'],\n [remote, 'default']\n )\n const baseGas = getConfig('evm', 'relayerBaseGas', [remote, endpointIdToChain(remote), 'default']) // TODO(gx): double check it\n const airdropCap = getConfig('airdropCap', [chain, 'default'], [remoteChain, 'default'])\n\n const promises = Object.keys(baseGas).map(async (proofType: string): Promise<TransactionData> => {\n // TODO(donghua): double check it\n // the UX team uses prooftype 1 in some places, so we need to set airdrop for 1/2 no matter what\n // if (!supportedOutboundProofTypes.includes(parseInt(proofType))) {\n // continue\n // }\n const currentValue = await contract.dstConfigLookup(remote, proofType)\n const current: ConfigOption = {\n baseGas: currentValue.baseGas,\n airdropCap: currentValue.dstNativeAmtCap,\n gasPerByte: currentValue.gasPerByte,\n }\n\n const expected: ConfigOption = {\n baseGas: ethers.BigNumber.from(baseGas[proofType]),\n airdropCap: ethers.BigNumber.from(airdropCap),\n gasPerByte: ethers.BigNumber.from(currentValue.gasPerByte),\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, proofType, expected.airdropCap, expected.baseGas, expected.gasPerByte]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return txn\n })\n const txns = await Promise.all(promises)\n return txns\n}\n\nasync function setPriceMultiplierBps(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceMultiplierBps'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const current = await contract.multiplierBps()\n const expected: ArgTypes[0] = getConfig('evm', 'relayerPriceMultiplierBps', [\n local,\n endpointIdToChain(local),\n 'default',\n ])\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setDstPriceMultipliers(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remotes: EndpointId[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstPriceMultipliers'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type DstMultiplierStruct = ArgTypes[0][0]\n\n const current: ArgTypes[0] = []\n const expected: ArgTypes[0] = []\n const goal: ArgTypes[0] = []\n\n const chain: Chain = endpointIdToChain(local)\n for (const remoteId of remotes) {\n const remoteChain = endpointIdToChain(remoteId)\n const remoteEndpointVersion = endpointIdToVersion(remoteId)\n if (remoteEndpointVersion === EndpointVersion.V2) {\n logger.info(`Relayer V2 doesn't need to setDstPriceMultipliers with EndpointV2 remote ${remoteId}`)\n continue\n }\n const target = ethers.BigNumber.from(\n getConfig('evm', 'relayerPriceMultipliers', [chain, 'default'], [remoteChain, 'default'])\n )\n\n const present = await contract.dstMultipliers(remoteId)\n\n if (_.isEqualWith(target, present, isEqualBigNumberish) === true) {\n continue\n }\n\n current.push({ chainId: remoteId, multiplier: present } as DstMultiplierStruct)\n expected.push({ chainId: remoteId, multiplier: target } as DstMultiplierStruct)\n }\n\n if (expected.length === 0) {\n return []\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setDstFloorMarginsUSD(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remotes: EndpointId[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDstFloorMarginsUSD'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n type DstFloorMarginStruct = ArgTypes[0][0]\n\n const current: ArgTypes[0] = []\n const expected: ArgTypes[0] = []\n\n const chain = endpointIdToChain(local)\n for (const remoteId of remotes) {\n const remoteChain = endpointIdToChain(remoteId)\n const remoteEndpointVersion = endpointIdToVersion(remoteId)\n if (remoteEndpointVersion === EndpointVersion.V2) {\n logger.info(`Relayer V2 doesn't need to setDstFloorMarginsUSD with EndpointV2 remote ${remoteId}`)\n continue\n }\n const target = ethers.BigNumber.from(\n getConfig('evm', 'relayerFloorMargins', [chain, 'default'], [remoteChain, 'default'])\n )\n const present = await contract.dstFloorMarginsUSD(remoteId)\n\n if (_.isEqualWith(target, present, isEqualBigNumberish) === true) {\n continue\n }\n\n current.push({ chainId: remoteId, floorMargin: present } as DstFloorMarginStruct)\n expected.push({ chainId: remoteId, floorMargin: target } as DstFloorMarginStruct)\n }\n\n if (expected.length === 0) {\n return []\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n\nasync function setApprovedAddress(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setApprovedAddress'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const approvedAddresses = getConfig('evm', 'relayerApprovedAddresses')\n\n for (const address in approvedAddresses) {\n const current = await contract.isApproved(address)\n const expected: ArgTypes[1] = approvedAddresses[address]\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n\nasync function setPriceConfigUpdater(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceConfigUpdater'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n const txns: TransactionData[] = []\n const priceConfigUpdaterAddresses = getConfig('evm', 'relayerPriceConfigUpdaterAddresses') // TODO(gx): double check it\n for (const address in priceConfigUpdaterAddresses) {\n const current = await contract.priceConfigUpdaters(address)\n const expected: ArgTypes[1] = priceConfigUpdaterAddresses[address]\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [address, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n return txns\n}\n\nasync function setPriceFeed(\n contract: ethers.Contract,\n logger: Logger,\n env: Environment,\n stage: Stage,\n local: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setPriceFeed'\n type ArgTypes = Parameters<RelayerV2[typeof METHOD_NAME]>\n\n if (stage === Stage.TESTNET) {\n return []\n }\n\n const network = endpointIdToNetwork(local, env)\n const current = await contract.priceFeed()\n const deployment = findDeployment(deployments, 'PriceFeed', { network, source: '@layerzerolabs/lz-evm-sdk-v2' })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of PriceFeed in @layerzerolabs/lz-evm-sdk-v2`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.relayer, {}]\n logger.debug(txn)\n return [txn]\n}\n","import { BigNumber, ethers } from 'ethers'\nimport _ from 'lodash'\nimport invariant from 'tiny-invariant'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n Chain,\n ChainType,\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToChainType,\n endpointIdToNetwork,\n getChainType,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { ConfigurableOption, Deployment, Logger, Transaction, TransactionGroup } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n collectTransactionsEvmHelper,\n getConfigFunc,\n isBigNumberish,\n} from '@layerzerolabs/ops-utilities'\n\nimport { UltraLightNodeV2 } from '../../src/typechain-types'\n\nimport { getUltraLightNodeContractName } from './common'\n\nconst PACKAGE_NAME = '@layerzerolabs/lz-evm-sdk-v1'\n\nexport default class UltraLightNodeV2Configurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = []\n }\n\n async collectTransactions(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n option: ConfigurableOption\n ): Promise<(Transaction | TransactionGroup)[]> {\n const callback = this.buildTransactionDatas.bind(this)\n const chain = endpointIdToChain(local)\n const contractName = getUltraLightNodeContractName(chain)\n\n return await collectTransactionsEvmHelper(\n local,\n remotes,\n deployments,\n option,\n this.configManager,\n this.providerManager,\n [[PACKAGE_NAME, contractName]],\n callback\n )\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setTreasury(contract, logger, local, env, deployments),\n ...remotes.flatMap((remote) => [\n setChainAddressSize(contract, getConfig, logger, local, remote),\n setRemoteUln(contract, getConfig, logger, env, local, remote, deployments),\n initInboundProofLibrary(contract, getConfig, logger, env, local, remote, deployments),\n enableSupportedOutboundProof(contract, getConfig, logger, local, remote),\n setDefaultAdapterParamsForChainId(contract, getConfig, logger, local, remote),\n setDefaultConfigForChainId(contract, getConfig, logger, env, local, remote, deployments),\n ]),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setChainAddressSize(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setChainAddressSize'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const current = await contract.chainAddressSizeMap(remote)\n const configValue = getConfig('addressSize', [remote, endpointIdToChain(remote), 'default'])\n const expected: ArgTypes[1] = ethers.BigNumber.from(configValue)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setChainAddressSize`)\n return [txn]\n}\n\nasync function setRemoteUln(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setRemoteUln'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const cur = await contract.ulnLookup(remote)\n\n let candidate: string\n if (endpointIdToChainType(remote) === ChainType.EVM) {\n const remotePackageName = '@layerzerolabs/lz-evm-sdk-v1'\n const remoteContract = getUltraLightNodeContractName(endpointIdToChain(remote))\n const params = endpointIdToChain(remote) === Chain.APTOS ? ['layerzero'] : [remotePackageName, remoteContract]\n candidate = getAddress(deployments, remote, env, ...params).toLowerCase()\n } else if (endpointIdToChain(remote) === Chain.APTOS) {\n throw new Error(`No implementation to get target address in setRemoteUln for aptos`)\n } else if (endpointIdToChain(remote) === Chain.SOLANA) {\n throw new Error(`No implementation to get target address in setRemoteUln for solana`)\n } else {\n throw new Error(`No implementation to get target address in setRemoteUln for ${remote}`)\n }\n\n const target = ethers.utils.hexZeroPad(candidate, 32)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), target]\n const txn: TransactionData = [target, cur, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setRemoteUln`)\n return [txn]\n}\n\nfunction findDuplicates(arr: string[]) {\n const counts = _.countBy(arr)\n return _.filter(arr, (item) => counts[item] > 1)\n}\n\nasync function initInboundProofLibrary(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'addInboundProofLibraryForChain'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const network = endpointIdToNetwork(local, env)\n const countOfLibs = await contract.maxInboundProofLibrary(remote)\n const targets: [string, string][] = getConfig('evm', 'inboundProofLibrary', [local, 'default'], [remote, 'default'])\n const duplicated = findDuplicates(targets.map((x: [string, string]) => x[1]))\n if (duplicated.length > 0) {\n throw new Error(`duplicated targets ${duplicated} in evm.messageLibrary for ${local}`)\n }\n\n const countOfTargets = targets.length\n invariant(\n countOfTargets >= countOfLibs,\n `maxInboundProofLibrary:${countOfLibs} > inboundProofLibrary[${local}][${remote}]:${countOfTargets}`\n )\n\n const txns: TransactionData[] = []\n\n const libs: string[] = []\n for (let i = 1; i <= countOfLibs; i++) {\n libs.push(await contract.inboundProofLibrary(remote, i))\n }\n\n for (let i = countOfLibs; i < countOfTargets; i++) {\n const [proofType, contractName] = targets[i]\n const deployment = findDeployment(deployments, contractName, {\n network,\n source: PACKAGE_NAME, // TODO(gx): double check it\n })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of ${contractName} for ${network}`)\n }\n\n const targetAddr = deployment.address\n invariant(\n !libs.includes(targetAddr),\n `InboundProofLibrary(${targetAddr}) ${remote}->${local} already exists as library ${\n libs.indexOf(targetAddr) + 1\n }`\n )\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), targetAddr]\n const txn: TransactionData = [\n [i, countOfTargets],\n [countOfLibs, countOfLibs],\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n {},\n ]\n logger.debug(txn)\n\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): initInboundProofLibrary`)\n return txns\n}\n\nfunction getAddress(deployments: Deployment[], endpointId: EndpointId, env: Environment, ...params: string[]): string {\n const chainType = getChainType(endpointIdToChain(endpointId))\n switch (chainType) {\n case ChainType.APTOS: {\n // const [configName] = params\n // const addressName = `${configName.toUpperCase()}_ADDRESS`\n // invariant(addressName in layerzeroAptos.constants, `Couldn't find address in aptos sdk: ${addressName}`)\n // // @ts-ignore\n // const address = layerzeroAptos.constants[addressName][this.stage]\n // invariant(address, `Couldn't find address for ${addressName} and stage ${this.stage}`)\n // return address\n throw new Error('not support aptos') // todo need to been fix\n }\n case ChainType.EVM: {\n const [packageName, contractName] = params\n const network = endpointIdToNetwork(endpointId, env)\n const deployment = findDeployment(deployments, contractName, { source: packageName, network }) as Deployment\n if (!deployment) {\n throw new Error(\n `Not found deployment contractName:${contractName} packageName:${packageName} network:${network}`\n )\n }\n return deployment.address\n }\n case ChainType.SOLANA: {\n throw new Error('Not implemented')\n }\n case ChainType.UNKNOWN: {\n throw new Error('Unknown chain type')\n }\n }\n}\n\nasync function enableSupportedOutboundProof(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'enableSupportedOutboundProof'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const target = getConfig('evm', 'supportedOutboundProof', [local, 'default'], [remote, 'default'])\n const txns: TransactionData[] = []\n for (const proofType of target) {\n const cur = await contract.supportedOutboundProof(remote, proofType)\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote.toString(), proofType]\n const txn: TransactionData = [true, cur, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setSupportedOutboundProofTypes`)\n return txns\n}\n\nasync function setDefaultAdapterParamsForChainId(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId,\n remote: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultAdapterParamsForChainId'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const config = getConfig('defaultAdapterParams', [local, 'default'], [remote, 'default'])\n const supportedOutboundProofTypes = getConfig(\n 'evm',\n 'supportedOutboundProof',\n [local, 'default'],\n [remote, 'default']\n )\n const txns: TransactionData[] = []\n for (const proofType of supportedOutboundProofTypes) {\n const current = await contract.defaultAdapterParams(remote, proofType)\n const expected: ArgTypes[2] = encodeAdapterParams(config[proofType])\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [remote, proofType, expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n txns.push(txn)\n }\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setDefaultAdapterParams`)\n return txns\n}\n\nfunction encodeAdapterParams(params: any[]): string {\n switch (params[0]) {\n case 1: {\n return ethers.utils.solidityPack(['uint16', 'uint256'], params)\n }\n case 2: {\n return ethers.utils.solidityPack(['uint16', 'uint256', 'uint256', 'bytes'], params)\n }\n default: {\n throw new Error('Invalid adapter type')\n }\n }\n}\n\nfunction getInboundProofVersion(getConfig: getConfigFunc, local: EndpointId, remote: EndpointId): number {\n const remoteOutboundProofType = getConfig('evm', 'outboundProofType', [remote, 'default'], [local, 'default'])\n const inboundProofLibrary = getConfig('evm', 'inboundProofLibrary', [local, 'default'], [remote, 'default'])\n let i = inboundProofLibrary.length\n while (i > 0) {\n const [libProofType] = inboundProofLibrary[i - 1]\n if (libProofType === remoteOutboundProofType) {\n return i\n }\n i--\n }\n throw new Error(\n `No matching inbound proof library on (${local}) for outbound proof type ${remoteOutboundProofType} on (${remote})`\n )\n}\n\nasync function setDefaultConfigForChainId(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n env: Environment,\n local: EndpointId,\n remote: EndpointId,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setDefaultConfigForChainId'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n type AppConfigType = Awaited<ReturnType<UltraLightNodeV2['defaultAppConfig']>>\n\n const localChain = endpointIdToChain(local)\n const remoteChain = endpointIdToChain(remote)\n\n const defaultConfig: AppConfigType = await contract.defaultAppConfig(remote)\n const current = _.pick(defaultConfig, [\n 'inboundProofLibraryVersion',\n 'inboundBlockConfirmations',\n 'relayer',\n 'outboundProofType',\n 'outboundBlockConfirmations',\n 'oracle',\n ])\n\n // TODO(donghua): confirm the oracle packagename in configuration contains '@layerzerolabs'\n const [oraclePackageName, oracleType] = getConfig('oracle', 'evm', 'type', [local, 'default'], [remote, 'default'])\n if (oraclePackageName === undefined || oracleType === undefined) {\n throw new Error(\n `oracle setting for evm.type.${local}.${remote} is [${oraclePackageName}, ${oracleType}] which is invalid`\n )\n }\n\n const inboundProofLibraryVersion = getInboundProofVersion(getConfig, local, remote)\n if (isBigNumberish(inboundProofLibraryVersion) === false) {\n throw new Error(`inboundProofLibraryVersion for (${remoteChain}, ${localChain}) is not number`)\n }\n\n const inboundBlockConfirmations = getConfig('inboundBlockConf', [localChain, 'default'], [remoteChain, 'default'])\n if (isBigNumberish(inboundBlockConfirmations) === false) {\n throw new Error(`inboundBlockConf for (${remoteChain}, ${localChain}) is not number`)\n }\n\n const outboundProofType = getConfig('evm', 'outboundProofType', [local, 'default'], [remote, 'default'])\n if (isBigNumberish(outboundProofType) === false) {\n throw new Error(`outboundProofType for (${remoteChain}, ${localChain}) is not number`)\n }\n\n // TODO(gx): double check, get outboundBlockConfirmations from inboundBlockConfv ??\n const outboundBlockConfirmations = getConfig('inboundBlockConf', [remoteChain, 'default'], [localChain, 'default'])\n if (isBigNumberish(outboundBlockConfirmations) === false) {\n throw new Error(`outboundBlockConf for (${remoteChain}, ${localChain}) is invalid number`)\n }\n\n const relayer = ethers.utils.getAddress(getAddress(deployments, local, env, PACKAGE_NAME, 'RelayerV2'))\n if (ethers.utils.isAddress(relayer) === false) {\n throw new Error(`RelayerV2 is invalid`)\n }\n\n const oracle = ethers.utils.getAddress(getAddress(deployments, local, env, oraclePackageName, oracleType))\n if (ethers.utils.isAddress(oracle) === false) {\n throw new Error(`${oracleType} is invalid`)\n }\n\n // TODO(gx): declare type of expected with AppConfigType\n const expected = {\n inboundProofLibraryVersion: BigNumber.from(inboundProofLibraryVersion).toNumber(),\n inboundBlockConfirmations: BigNumber.from(inboundBlockConfirmations),\n relayer: relayer,\n outboundProofType: BigNumber.from(outboundProofType).toNumber(),\n outboundBlockConfirmations: BigNumber.from(outboundBlockConfirmations),\n oracle: oracle,\n }\n\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [\n remote,\n expected.inboundProofLibraryVersion,\n expected.inboundBlockConfirmations,\n expected.relayer,\n expected.outboundProofType,\n expected.outboundBlockConfirmations,\n expected.oracle,\n ]\n\n const txn: TransactionData = [\n expected,\n current,\n method,\n args,\n undefined,\n EvmWalletNames.layerzero,\n { gasLimit: '500000' },\n ]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) with remote(${remote}): setDefaultConfigForChainId`)\n return [txn]\n}\n\nasync function setTreasury(\n contract: ethers.Contract,\n logger: Logger,\n local: EndpointId,\n env: Environment,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setTreasury'\n type ArgTypes = Parameters<UltraLightNodeV2[typeof METHOD_NAME]>\n\n const network = endpointIdToNetwork(local, env)\n const deployment = findDeployment(deployments, 'TreasuryV2', { network })\n if (deployment === undefined) {\n throw new Error(`failed to find the deployment of TreasuryV2 for ${network}`)\n }\n\n const expected: ArgTypes[0] = deployment.address\n if (ethers.utils.isAddress(expected) === false) {\n throw new Error(`the treasury address for ${network} in TreasuryV2 is invalid`)\n }\n\n const current = await contract.treasuryContract()\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n\n return [txn]\n}\n","import { Chain } from '@layerzerolabs/lz-definitions'\n\nexport function getUltraLightNodeContractName(chain: Chain): string {\n switch (chain) {\n case Chain.SHRAPNEL:\n case Chain.KIWI: {\n return 'UltraLightNodeV2AltToken'\n }\n default: {\n return 'UltraLightNodeV2'\n }\n }\n}\n","import { ethers } from 'ethers'\n\nimport { EvmWalletNames } from '@layerzerolabs/internal-ops-utilities'\nimport {\n EndpointId,\n Environment,\n Network,\n endpointIdToChain,\n endpointIdToNetwork,\n networkToStage,\n} from '@layerzerolabs/lz-definitions'\nimport { Deployment, Logger } from '@layerzerolabs/ops-core'\nimport { findDeployment } from '@layerzerolabs/ops-plugin-core'\nimport {\n ConfigureManager,\n LayerZeroEvmBaseConfigurable,\n ProviderManager,\n SignerManager,\n TransactionData,\n getConfigFunc,\n} from '@layerzerolabs/ops-utilities'\n\nimport { FeeHandler } from '../../src'\n\nimport { getUltraLightNodeContractName } from './common'\n\nconst PACKAGENAME = '@layerzerolabs/lz-evm-sdk-v1'\nexport default class FeeHandlerConfigurable extends LayerZeroEvmBaseConfigurable {\n constructor(\n protected configManager: ConfigureManager,\n protected providerManager: ProviderManager,\n protected signerManager: SignerManager\n ) {\n super(configManager, providerManager, signerManager)\n this.contracts = [[PACKAGENAME, 'FeeHandler']]\n }\n\n async buildTransactionDatas(\n local: EndpointId,\n remotes: EndpointId[],\n deployments: Deployment[],\n network: Network,\n env: Environment,\n provider: ethers.providers.Provider,\n contract: ethers.Contract,\n packageName: string,\n contractName: string\n ): Promise<TransactionData[]> {\n const getConfig = this.configManager.get.bind(this.configManager, networkToStage(network))\n const logger = this.logger\n\n // [expected, current, method, args, remotes]\n const candidates: Promise<TransactionData[]>[] = [\n setFeeToken(contract, getConfig, logger, local),\n approve(contract, logger, local, env, deployments),\n ]\n return (await Promise.all(candidates)).flat()\n }\n}\n\nasync function setFeeToken(\n contract: ethers.Contract,\n getConfig: getConfigFunc,\n logger: Logger,\n local: EndpointId\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'setFeeToken'\n type ArgTypes = Parameters<FeeHandler[typeof METHOD_NAME]>\n\n const current = await contract.feeToken()\n const configValue = getConfig('altToken', [local, endpointIdToChain(local), 'default'])\n if (!configValue) {\n throw new Error(`No altToken configured for ${local}`)\n }\n const expected: ArgTypes[0] = ethers.utils.getAddress(configValue)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [expected]\n const txn: TransactionData = [expected, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}): setFeeHandlerFeeToken`)\n return [txn]\n}\n\nasync function approve(\n contract: ethers.Contract,\n logger: Logger,\n local: EndpointId,\n env: Environment,\n deployments: Deployment[]\n): Promise<TransactionData[]> {\n const METHOD_NAME = 'approve'\n type ArgTypes = Parameters<FeeHandler[typeof METHOD_NAME]>\n const network = endpointIdToNetwork(local, env)\n\n const contractName = getUltraLightNodeContractName(endpointIdToChain(local))\n const ulnAddress = (findDeployment(deployments, contractName, { source: PACKAGENAME, network }) as Deployment)\n .address\n\n const current = await contract.approved(ulnAddress)\n const method = contract.interface.getFunction(METHOD_NAME).name\n const args: ArgTypes = [ulnAddress]\n const txn: TransactionData = [true, current, method, args, undefined, EvmWalletNames.layerzero, {}]\n logger.debug(txn)\n logger.debug(`Configured LayerZero(${local}) : approve`)\n return [txn]\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layerzerolabs/lz-evm-v1-0.7",
3
- "version": "1.5.61",
3
+ "version": "1.5.62",
4
4
  "license": "BUSL-1.1",
5
5
  "exports": {
6
6
  ".": {
@@ -43,7 +43,7 @@
43
43
  "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers^v0.3.0-beta.14"
44
44
  },
45
45
  "dependencies": {
46
- "@layerzerolabs/ops-plugin-core": "^1.5.61",
46
+ "@layerzerolabs/ops-plugin-core": "^1.5.62",
47
47
  "@openzeppelin/contracts": "3.4.2-solc-0.7",
48
48
  "@openzeppelin/contracts-upgradeable": "3.4.2-solc-0.7",
49
49
  "lodash": "^4.17.21"
@@ -51,17 +51,17 @@
51
51
  "devDependencies": {
52
52
  "@ethersproject/abi": "^5.7.0",
53
53
  "@ethersproject/providers": "^5.7.2",
54
- "@layerzerolabs-internal/tsup-config": "^1.5.61",
55
- "@layerzerolabs-internal/typescript-config": "^1.5.61",
56
- "@layerzerolabs/hardhat-collect-outcomes": "^1.5.61",
57
- "@layerzerolabs/hardhat-config": "^1.5.61",
58
- "@layerzerolabs/internal-ops-utilities": "^1.5.61",
59
- "@layerzerolabs/lz-definitions": "^1.5.61",
60
- "@layerzerolabs/lz-proof-utility": "^1.5.61",
61
- "@layerzerolabs/lz-utilities": "^1.5.61",
62
- "@layerzerolabs/ops-core": "^1.5.61",
63
- "@layerzerolabs/ops-plugin-core": "^1.5.61",
64
- "@layerzerolabs/ops-utilities": "^1.5.61",
54
+ "@layerzerolabs-internal/tsup-config": "^1.5.62",
55
+ "@layerzerolabs-internal/typescript-config": "^1.5.62",
56
+ "@layerzerolabs/hardhat-collect-outcomes": "^1.5.62",
57
+ "@layerzerolabs/hardhat-config": "^1.5.62",
58
+ "@layerzerolabs/internal-ops-utilities": "^1.5.62",
59
+ "@layerzerolabs/lz-definitions": "^1.5.62",
60
+ "@layerzerolabs/lz-proof-utility": "^1.5.62",
61
+ "@layerzerolabs/lz-utilities": "^1.5.62",
62
+ "@layerzerolabs/ops-core": "^1.5.62",
63
+ "@layerzerolabs/ops-plugin-core": "^1.5.62",
64
+ "@layerzerolabs/ops-utilities": "^1.5.62",
65
65
  "@matterlabs/hardhat-zksync-deploy": "^0.6.1",
66
66
  "@nomicfoundation/hardhat-chai-matchers": "^1.0.6",
67
67
  "@nomicfoundation/hardhat-network-helpers": "^1.0.7",