diff --git a/.changeset/violet-peas-raise.md b/.changeset/violet-peas-raise.md new file mode 100644 index 0000000000..b1c9128f0d --- /dev/null +++ b/.changeset/violet-peas-raise.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/cli': minor +--- + +Update submitWarpApplyTransactions() to try-catch and print safe errors diff --git a/typescript/cli/package.json b/typescript/cli/package.json index ed0540f050..ee43be4973 100644 --- a/typescript/cli/package.json +++ b/typescript/cli/package.json @@ -5,7 +5,7 @@ "dependencies": { "@aws-sdk/client-kms": "^3.577.0", "@aws-sdk/client-s3": "^3.577.0", - "@hyperlane-xyz/registry": "9.3.0", + "@hyperlane-xyz/registry": "9.4.0", "@hyperlane-xyz/sdk": "8.6.1", "@hyperlane-xyz/utils": "8.6.1", "@inquirer/core": "9.0.10", diff --git a/typescript/cli/src/deploy/warp.ts b/typescript/cli/src/deploy/warp.ts index eabcf15f90..af7af43616 100644 --- a/typescript/cli/src/deploy/warp.ts +++ b/typescript/cli/src/deploy/warp.ts @@ -1018,29 +1018,34 @@ async function submitWarpApplyTransactions( await promiseObjAll( objMap(chainTransactions, async (chainId, transactions) => { - await retryAsync( - async () => { - const chain = chainIdToName[chainId]; - const submitter: TxSubmitterBuilder = - await getWarpApplySubmitter({ - chain, - context: params.context, - strategyUrl: params.strategyUrl, - }); - const transactionReceipts = await submitter.submit(...transactions); - if (transactionReceipts) { - const receiptPath = `${params.receiptsDir}/${chain}-${ - submitter.txSubmitterType - }-${Date.now()}-receipts.json`; - writeYamlOrJson(receiptPath, transactionReceipts); - logGreen( - `Transactions receipts successfully written to ${receiptPath}`, - ); - } - }, - 5, // attempts - 100, // baseRetryMs - ); + try { + await retryAsync( + async () => { + const chain = chainIdToName[chainId]; + const submitter: TxSubmitterBuilder = + await getWarpApplySubmitter({ + chain, + context: params.context, + strategyUrl: params.strategyUrl, + }); + const transactionReceipts = await submitter.submit(...transactions); + if (transactionReceipts) { + const receiptPath = `${params.receiptsDir}/${chain}-${ + submitter.txSubmitterType + }-${Date.now()}-receipts.json`; + writeYamlOrJson(receiptPath, transactionReceipts); + logGreen( + `Transactions receipts successfully written to ${receiptPath}`, + ); + } + }, + 5, // attempts + 100, // baseRetryMs + ); + } catch (e) { + logBlue(`Error in submitWarpApplyTransactions`, e); + console.dir(transactions); + } }), ); } diff --git a/typescript/helloworld/package.json b/typescript/helloworld/package.json index d92e1ed305..fe4260518f 100644 --- a/typescript/helloworld/package.json +++ b/typescript/helloworld/package.json @@ -4,7 +4,7 @@ "version": "8.6.1", "dependencies": { "@hyperlane-xyz/core": "5.11.3", - "@hyperlane-xyz/registry": "9.3.0", + "@hyperlane-xyz/registry": "9.4.0", "@hyperlane-xyz/sdk": "8.6.1", "@openzeppelin/contracts-upgradeable": "^4.9.3", "ethers": "^5.7.2" diff --git a/typescript/infra/config/environments/mainnet3/warp/configGetters/getRenzoEZETHSTAGEWarpConfig.ts b/typescript/infra/config/environments/mainnet3/warp/configGetters/getRenzoEZETHSTAGEWarpConfig.ts index b1bf5a190c..7f3b15d877 100644 --- a/typescript/infra/config/environments/mainnet3/warp/configGetters/getRenzoEZETHSTAGEWarpConfig.ts +++ b/typescript/infra/config/environments/mainnet3/warp/configGetters/getRenzoEZETHSTAGEWarpConfig.ts @@ -1,6 +1,7 @@ import { chainsToDeploy, getRenzoEZETHWarpConfigGenerator, + getRenzoGnosisSafeBuilderStrategyConfigGenerator, } from './getRenzoEZETHWarpConfig.js'; const xERC20: Record<(typeof chainsToDeploy)[number], string> = { @@ -17,6 +18,8 @@ const xERC20: Record<(typeof chainsToDeploy)[number], string> = { taiko: '0x585afea249031Ea4168A379F664e91dFc5F77E7D', sei: '0x585afea249031Ea4168A379F664e91dFc5F77E7D', swell: '0x585afea249031Ea4168A379F664e91dFc5F77E7D', + unichain: '0x585afea249031Ea4168A379F664e91dFc5F77E7D', + berachain: '0x585afea249031Ea4168A379F664e91dFc5F77E7D', }; export const ezEthSafes: Record<(typeof chainsToDeploy)[number], string> = { @@ -33,6 +36,8 @@ export const ezEthSafes: Record<(typeof chainsToDeploy)[number], string> = { taiko: '0x31FF35F84ADB120DbE089D190F03Ac74731Ae83F', sei: '0xa30FF77d30Eb2d785f574344B4D11CAAe1949807', swell: '0xf40b75fb85C3bEc70D75A1B45ef08FC48Db61115', + unichain: '0xa7eccdb9be08178f896c26b7bbd8c3d4e844d9ba', + berachain: '0xf013c8Be28421b050cca5bD95cc57Af49568e8be', }; const xERC20StagingLockbox = '0x74c8290836612e6251E49e8f3198fdD80C4DbEB8'; @@ -41,3 +46,6 @@ export const getRenzoEZETHSTAGEWarpConfig = getRenzoEZETHWarpConfigGenerator( xERC20, xERC20StagingLockbox, ); + +export const getRenzoGnosisSafeBuilderStagingStrategyConfig = + getRenzoGnosisSafeBuilderStrategyConfigGenerator(ezEthSafes); diff --git a/typescript/infra/config/environments/mainnet3/warp/configGetters/getRenzoEZETHWarpConfig.ts b/typescript/infra/config/environments/mainnet3/warp/configGetters/getRenzoEZETHWarpConfig.ts index e22a223cc9..ee27bbbc82 100644 --- a/typescript/infra/config/environments/mainnet3/warp/configGetters/getRenzoEZETHWarpConfig.ts +++ b/typescript/infra/config/environments/mainnet3/warp/configGetters/getRenzoEZETHWarpConfig.ts @@ -33,6 +33,8 @@ export const chainsToDeploy = [ 'taiko', 'sei', 'swell', + 'unichain', + 'berachain', ]; export const MAX_PROTOCOL_FEE = parseEther('100').toString(); // Changing this will redeploy the PROTOCOL_FEE hook @@ -50,6 +52,8 @@ const tokenPrices: ChainMap = { taiko: '3157.26', sei: '0.354988', swell: '3157.26', + unichain: '2602.66', + berachain: '10', }; export function getProtocolFee(chain: ChainName) { return (0.5 / Number(tokenPrices[chain])).toFixed(10).toString(); // ~$0.50 USD @@ -93,6 +97,8 @@ const xERC20: Record<(typeof chainsToDeploy)[number], string> = { taiko: '0x2416092f143378750bb29b79eD961ab195CcEea5', sei: '0x6DCfbF4729890043DFd34A93A2694E5303BA2703', // redEth swell: '0x2416092f143378750bb29b79eD961ab195CcEea5', + unichain: '0x2416092f143378750bb29b79eD961ab195CcEea5', + berachain: '0x2416092f143378750bb29b79eD961ab195CcEea5', }; export const ezEthValidators: ChainMap = { @@ -226,6 +232,26 @@ export const ezEthValidators: ChainMap = { { address: '0xb6b9b4bd4eb6eb3aef5e9826e7f8b8455947f67c', alias: 'Renzo' }, ], }, + unichain: { + threshold: 1, + validators: [ + { + address: '0xa9d517776fe8beba7d67c21cac1e805bd609c08e', + alias: 'Luganodes', + }, + { address: '0xfe318024ca6197f2157905209149067a11e6982c', alias: 'Renzo' }, + ], + }, + berachain: { + threshold: 1, + validators: [ + { + address: '0xa7341aa60faad0ce728aa9aeb67bb880f55e4392', + alias: 'Luganodes', + }, + { address: '0xae09cb3febc4cad59ef5a56c1df741df4eb1f4b6', alias: 'Renzo' }, + ], + }, }; export const ezEthSafes: Record<(typeof chainsToDeploy)[number], string> = { @@ -242,6 +268,8 @@ export const ezEthSafes: Record<(typeof chainsToDeploy)[number], string> = { taiko: '0x8410927C286A38883BC23721e640F31D3E3E79F8', sei: '0x0e60fd361fF5b90088e1782e6b21A7D177d462C5', swell: '0x435E8c9652Da151292F3981bbf663EBEB6668501', + unichain: '0x70aF964829DA7F3f51973EE806AEeAB9225F2661', + berachain: '0x865BA5789D82F2D4C5595a3968dad729A8C3daE6', }; const existingProxyAdmins: ChainMap<{ address: string; owner: string }> = { diff --git a/typescript/infra/config/environments/mainnet3/warp/warpIds.ts b/typescript/infra/config/environments/mainnet3/warp/warpIds.ts index 5536a23ff8..d14079a70b 100644 --- a/typescript/infra/config/environments/mainnet3/warp/warpIds.ts +++ b/typescript/infra/config/environments/mainnet3/warp/warpIds.ts @@ -1,7 +1,7 @@ export enum WarpRouteIds { Ancient8EthereumUSDC = 'USDC/ancient8-ethereum', - ArbitrumBaseBlastBscEthereumFraxtalLineaModeOptimismSeiSwellTaikoZircuitEZETH = 'EZETH/arbitrum-base-blast-bsc-ethereum-fraxtal-linea-mode-optimism-sei-swell-taiko-zircuit', - ArbitrumBaseBlastBscEthereumFraxtalLineaModeOptimismSeiSwellTaikoZircuitEZETHSTAGE = 'EZETHSTAGE/arbitrum-base-blast-bsc-ethereum-fraxtal-linea-mode-optimism-sei-swell-taiko-zircuit', + ArbitrumBaseBerachainBlastBscEthereumFraxtalLineaModeOptimismSeiSwellTaikoUnichainZircuitEZETH = 'EZETH/arbitrum-base-berachain-blast-bsc-ethereum-fraxtal-linea-mode-optimism-sei-swell-taiko-unichain-zircuit', + ArbitrumBaseBerachainBlastBscEthereumFraxtalLineaModeOptimismSeiSwellTaikoUnichainZircuitEZETHSTAGE = 'EZETHSTAGE/arbitrum-base-berachain-blast-bsc-ethereum-fraxtal-linea-mode-optimism-sei-swell-taiko-unichain-zircuit', ArbitrumBaseEnduranceUSDC = 'USDC/arbitrum-base-endurance', ArbitrumEthereumZircuitAMPHRETH = 'AMPHRETH/arbitrum-ethereum-zircuit', ArbitrumNeutronEclip = 'ECLIP/arbitrum-neutron', diff --git a/typescript/infra/config/warp.ts b/typescript/infra/config/warp.ts index 7838df469b..00cb3094ec 100644 --- a/typescript/infra/config/warp.ts +++ b/typescript/infra/config/warp.ts @@ -44,7 +44,10 @@ import { getEthereumVictionUSDTWarpConfig } from './environments/mainnet3/warp/c import { getEthereumZircuitRe7LRTWarpConfig } from './environments/mainnet3/warp/configGetters/getEthereumZircuitRe7LRTWarpConfig.js'; import { getInevmInjectiveINJWarpConfig } from './environments/mainnet3/warp/configGetters/getInevmInjectiveINJWarpConfig.js'; import { getMantapacificNeutronTiaWarpConfig } from './environments/mainnet3/warp/configGetters/getMantapacificNeutronTiaWarpConfig.js'; -import { getRenzoEZETHSTAGEWarpConfig } from './environments/mainnet3/warp/configGetters/getRenzoEZETHSTAGEWarpConfig.js'; +import { + getRenzoEZETHSTAGEWarpConfig, + getRenzoGnosisSafeBuilderStagingStrategyConfig, +} from './environments/mainnet3/warp/configGetters/getRenzoEZETHSTAGEWarpConfig.js'; import { getRenzoEZETHWarpConfig, getRenzoGnosisSafeBuilderStrategyConfig, @@ -64,9 +67,9 @@ export const warpConfigGetterMap: Record = { [WarpRouteIds.EthereumInevmUSDC]: getEthereumInevmUSDCWarpConfig, [WarpRouteIds.EthereumInevmUSDT]: getEthereumInevmUSDTWarpConfig, [WarpRouteIds.ArbitrumNeutronTIA]: getArbitrumNeutronTiaWarpConfig, - [WarpRouteIds.ArbitrumBaseBlastBscEthereumFraxtalLineaModeOptimismSeiSwellTaikoZircuitEZETH]: + [WarpRouteIds.ArbitrumBaseBerachainBlastBscEthereumFraxtalLineaModeOptimismSeiSwellTaikoUnichainZircuitEZETH]: getRenzoEZETHWarpConfig, - [WarpRouteIds.ArbitrumBaseBlastBscEthereumFraxtalLineaModeOptimismSeiSwellTaikoZircuitEZETHSTAGE]: + [WarpRouteIds.ArbitrumBaseBerachainBlastBscEthereumFraxtalLineaModeOptimismSeiSwellTaikoUnichainZircuitEZETHSTAGE]: getRenzoEZETHSTAGEWarpConfig, [WarpRouteIds.InevmInjectiveINJ]: getInevmInjectiveINJWarpConfig, [WarpRouteIds.ArbitrumAvalancheBaseFlowmainnetFormOptimismSolanamainnetWorldchainTRUMP]: @@ -101,8 +104,10 @@ export const warpConfigGetterMap: Record = { type StrategyConfigGetter = () => ChainSubmissionStrategy; export const strategyConfigGetterMap: Record = { - [WarpRouteIds.ArbitrumBaseBlastBscEthereumFraxtalLineaModeOptimismSeiSwellTaikoZircuitEZETH]: + [WarpRouteIds.ArbitrumBaseBerachainBlastBscEthereumFraxtalLineaModeOptimismSeiSwellTaikoUnichainZircuitEZETH]: getRenzoGnosisSafeBuilderStrategyConfig, + [WarpRouteIds.ArbitrumBaseBerachainBlastBscEthereumFraxtalLineaModeOptimismSeiSwellTaikoUnichainZircuitEZETHSTAGE]: + getRenzoGnosisSafeBuilderStagingStrategyConfig, }; /** diff --git a/typescript/infra/package.json b/typescript/infra/package.json index 48fc7a201f..3a3b169097 100644 --- a/typescript/infra/package.json +++ b/typescript/infra/package.json @@ -15,7 +15,7 @@ "@google-cloud/secret-manager": "^5.5.0", "@hyperlane-xyz/cli": "8.6.1", "@hyperlane-xyz/helloworld": "8.6.1", - "@hyperlane-xyz/registry": "9.3.0", + "@hyperlane-xyz/registry": "9.4.0", "@hyperlane-xyz/sdk": "8.6.1", "@hyperlane-xyz/utils": "8.6.1", "@inquirer/prompts": "3.3.2", diff --git a/typescript/widgets/package.json b/typescript/widgets/package.json index 2496a14179..977a23c4e7 100644 --- a/typescript/widgets/package.json +++ b/typescript/widgets/package.json @@ -27,7 +27,7 @@ "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.0", "@eslint/js": "^9.15.0", - "@hyperlane-xyz/registry": "9.3.0", + "@hyperlane-xyz/registry": "9.4.0", "@storybook/addon-essentials": "^7.6.14", "@storybook/addon-interactions": "^7.6.14", "@storybook/addon-links": "^7.6.14", diff --git a/yarn.lock b/yarn.lock index fc3ac24822..02c725e3ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7320,7 +7320,7 @@ __metadata: "@eslint/js": "npm:^9.15.0" "@ethersproject/abi": "npm:*" "@ethersproject/providers": "npm:*" - "@hyperlane-xyz/registry": "npm:9.3.0" + "@hyperlane-xyz/registry": "npm:9.4.0" "@hyperlane-xyz/sdk": "npm:8.6.1" "@hyperlane-xyz/utils": "npm:8.6.1" "@inquirer/core": "npm:9.0.10" @@ -7425,7 +7425,7 @@ __metadata: dependencies: "@eslint/js": "npm:^9.15.0" "@hyperlane-xyz/core": "npm:5.11.3" - "@hyperlane-xyz/registry": "npm:9.3.0" + "@hyperlane-xyz/registry": "npm:9.4.0" "@hyperlane-xyz/sdk": "npm:8.6.1" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" @@ -7477,7 +7477,7 @@ __metadata: "@google-cloud/secret-manager": "npm:^5.5.0" "@hyperlane-xyz/cli": "npm:8.6.1" "@hyperlane-xyz/helloworld": "npm:8.6.1" - "@hyperlane-xyz/registry": "npm:9.3.0" + "@hyperlane-xyz/registry": "npm:9.4.0" "@hyperlane-xyz/sdk": "npm:8.6.1" "@hyperlane-xyz/utils": "npm:8.6.1" "@inquirer/prompts": "npm:3.3.2" @@ -7540,13 +7540,13 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/registry@npm:9.3.0": - version: 9.3.0 - resolution: "@hyperlane-xyz/registry@npm:9.3.0" +"@hyperlane-xyz/registry@npm:9.4.0": + version: 9.4.0 + resolution: "@hyperlane-xyz/registry@npm:9.4.0" dependencies: yaml: "npm:2.4.5" zod: "npm:^3.21.2" - checksum: 10/22d34cf5b002b9bca751dbfcc5ba0ea1cb145b0f1e9394c9a6fa4b80d84cc0f9b8f1461c9aed902892b6d351cfd7aaf77484f0db531aa913e646086ac467e80f + checksum: 10/13eb3ed671d70cc4b66a3546eb54b82e5606aed6c97cea82df54208415941026aab809ac434208a15b698d1b9fe88a828ce2e2b2d64239a6ca60d0dc2666c2fb languageName: node linkType: hard @@ -7645,7 +7645,7 @@ __metadata: "@emotion/styled": "npm:^11.13.0" "@eslint/js": "npm:^9.15.0" "@headlessui/react": "npm:^2.1.8" - "@hyperlane-xyz/registry": "npm:9.3.0" + "@hyperlane-xyz/registry": "npm:9.4.0" "@hyperlane-xyz/sdk": "npm:8.6.1" "@hyperlane-xyz/utils": "npm:8.6.1" "@interchain-ui/react": "npm:^1.23.28"