From ff2b4e2fbff5643b50f38811b3d6995d5e1dc929 Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Mon, 11 Nov 2024 20:56:49 +0000 Subject: [PATCH 1/7] docs(changeset): add changeset for SDK in previous PR (#4846) ### Description - Forgot to add a changeset here https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/4835 - this is the changeset for that PR ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- .changeset/odd-frogs-move.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/odd-frogs-move.md diff --git a/.changeset/odd-frogs-move.md b/.changeset/odd-frogs-move.md new file mode 100644 index 0000000000..d99e99107b --- /dev/null +++ b/.changeset/odd-frogs-move.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/sdk': minor +--- + +Added helpers to Token and token adapters to get bridged supply of tokens" From 92b5fe777eb143f52d3804afea76ff7559b4b398 Mon Sep 17 00:00:00 2001 From: Jason Guo <33064781+Xaroz@users.noreply.github.com> Date: Mon, 11 Nov 2024 17:59:34 -0400 Subject: [PATCH 2/7] chore(widgets): add and update components (#4847) ### Description - Props and style update: `IconButton` and `Tooltip` - New Icons: `XCircleIcon` and `SwapIcon` ### Backward compatibility Yes ### Testing Manual testing in warp UI and visual testing with storybook --- .changeset/strange-poems-build.md | 6 +++++ .../widgets/src/components/IconButton.tsx | 6 ++--- typescript/widgets/src/components/Tooltip.tsx | 20 ++++++++++++--- typescript/widgets/src/icons/Swap.tsx | 18 +++++++++++++ typescript/widgets/src/icons/XCircle.tsx | 25 +++++++++++++++++++ typescript/widgets/src/index.ts | 2 ++ .../widgets/src/stories/IconList.stories.tsx | 4 +-- 7 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 .changeset/strange-poems-build.md create mode 100644 typescript/widgets/src/icons/Swap.tsx create mode 100644 typescript/widgets/src/icons/XCircle.tsx diff --git a/.changeset/strange-poems-build.md b/.changeset/strange-poems-build.md new file mode 100644 index 0000000000..ffb1f8f238 --- /dev/null +++ b/.changeset/strange-poems-build.md @@ -0,0 +1,6 @@ +--- +'@hyperlane-xyz/widgets': minor +--- + +Props and style update: IconButton and Tooltip +New Icons: XCircleIcon and SwapIcon diff --git a/typescript/widgets/src/components/IconButton.tsx b/typescript/widgets/src/components/IconButton.tsx index bc515ee7e6..314ba40fa4 100644 --- a/typescript/widgets/src/components/IconButton.tsx +++ b/typescript/widgets/src/components/IconButton.tsx @@ -7,17 +7,17 @@ type Props = PropsWithChildren> & { }; export function IconButton(props: Props) { - const { className, children, ...rest } = props; + const { className, children, type, ...rest } = props; const base = 'htw-flex htw-items-center htw-justify-center htw-transition-all'; - const onHover = 'hover:htw-opacity-70 hover:htw-scale-105'; + const onHover = 'hover:htw-opacity-70'; const onDisabled = 'disabled:htw-opacity-30 disabled:htw-cursor-default'; const onActive = 'active:htw-opacity-60'; const allClasses = clsx(base, onHover, onDisabled, onActive, className); return ( - ); diff --git a/typescript/widgets/src/components/Tooltip.tsx b/typescript/widgets/src/components/Tooltip.tsx index 24c591132d..e62c46816a 100644 --- a/typescript/widgets/src/components/Tooltip.tsx +++ b/typescript/widgets/src/components/Tooltip.tsx @@ -1,5 +1,5 @@ import React, { AnchorHTMLAttributes } from 'react'; -import { Tooltip as ReactTooltip } from 'react-tooltip'; +import { PlacesType, Tooltip as ReactTooltip } from 'react-tooltip'; import { Circle } from '../icons/Circle.js'; import { QuestionMarkIcon } from '../icons/QuestionMark.js'; @@ -8,12 +8,26 @@ type Props = AnchorHTMLAttributes & { id: string; content: string; size?: number; + placement?: PlacesType; }; -export function Tooltip({ id, content, size = 16, ...rest }: Props) { +export function Tooltip({ + id, + content, + size = 16, + className, + placement = 'top-start', + ...rest +}: Props) { return ( <> - + + + + ); +} + +export const SwapIcon = memo(_SwapIcon); diff --git a/typescript/widgets/src/icons/XCircle.tsx b/typescript/widgets/src/icons/XCircle.tsx new file mode 100644 index 0000000000..b5b400ae27 --- /dev/null +++ b/typescript/widgets/src/icons/XCircle.tsx @@ -0,0 +1,25 @@ +import React, { memo } from 'react'; + +import { ColorPalette } from '../color.js'; + +import { DefaultIconProps } from './types.js'; + +function _XCircleIcon({ + color = ColorPalette.Black, + ...rest +}: DefaultIconProps) { + return ( + + + + + ); +} + +export const XCircleIcon = memo(_XCircleIcon); diff --git a/typescript/widgets/src/index.ts b/typescript/widgets/src/index.ts index 2bb43315c8..0762ec9da0 100644 --- a/typescript/widgets/src/index.ts +++ b/typescript/widgets/src/index.ts @@ -44,11 +44,13 @@ export { QuestionMarkIcon } from './icons/QuestionMark.js'; export { SearchIcon } from './icons/Search.js'; export { ShieldIcon } from './icons/Shield.js'; export { SpinnerIcon } from './icons/Spinner.js'; +export { SwapIcon } from './icons/Swap.js'; export { TwitterIcon } from './icons/Twitter.js'; export { UpDownArrowsIcon } from './icons/UpDownArrows.js'; export { WalletIcon } from './icons/Wallet.js'; export { WebIcon } from './icons/Web.js'; export { WideChevronIcon } from './icons/WideChevron.js'; +export { XCircleIcon } from './icons/XCircle.js'; export { XIcon } from './icons/X.js'; export { type DefaultIconProps } from './icons/types.js'; export { DropdownMenu, type DropdownMenuProps } from './layout/DropdownMenu.js'; diff --git a/typescript/widgets/src/stories/IconList.stories.tsx b/typescript/widgets/src/stories/IconList.stories.tsx index 48570f106c..9027956919 100644 --- a/typescript/widgets/src/stories/IconList.stories.tsx +++ b/typescript/widgets/src/stories/IconList.stories.tsx @@ -40,8 +40,8 @@ function IconList({ flexWrap: 'wrap', }} > - {iconList.map((Icon) => ( - + {iconList.map((Icon, index) => ( + {Icon.displayName} Date: Tue, 12 Nov 2024 10:08:44 +0000 Subject: [PATCH 3/7] feat: nov 8 enrollments (#4841) ### Description - enroll new validators for alephzeroevmmainnet, chilizmainnet, flowmainnet, immutablezkevmmainnet, metal, polynomialfi, rarichain, rootstockmainnet, superpositionmainnet, flame, prom - update validators for inevm - update ownership for recent two deploy batches - ICAs re-enabled - zeronetwork safe configured ### Drive-by changes - igp updates - fix some infra helper scripts - skip all chains to skip for ICA - only skip lumia for validator announce check ### Related issues ### Backward compatibility ### Testing manual + infra helper scripts --- .changeset/mighty-panthers-play.md | 5 + .../environments/mainnet3/gasPrices.json | 38 ++-- .../config/environments/mainnet3/owners.ts | 39 ++-- .../environments/mainnet3/tokenPrices.json | 166 +++++++++--------- .../infra/scripts/announce-validators.ts | 1 + .../infra/scripts/check/check-owner-ica.ts | 14 +- .../scripts/check/check-validator-announce.ts | 3 +- typescript/infra/scripts/get-owner-ica.ts | 5 +- typescript/infra/src/config/chain.ts | 4 +- typescript/sdk/src/consts/multisigIsm.ts | 90 +++++++--- 10 files changed, 216 insertions(+), 149 deletions(-) create mode 100644 .changeset/mighty-panthers-play.md diff --git a/.changeset/mighty-panthers-play.md b/.changeset/mighty-panthers-play.md new file mode 100644 index 0000000000..ef054787bf --- /dev/null +++ b/.changeset/mighty-panthers-play.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/sdk': minor +--- + +Enroll new validators for alephzeroevmmainnet, chilizmainnet, flowmainnet, immutablezkevmmainnet, metal, polynomialfi, rarichain, rootstockmainnet, superpositionmainnet, flame, prom, inevm. diff --git a/typescript/infra/config/environments/mainnet3/gasPrices.json b/typescript/infra/config/environments/mainnet3/gasPrices.json index 0973b4625e..e0eb030933 100644 --- a/typescript/infra/config/environments/mainnet3/gasPrices.json +++ b/typescript/infra/config/environments/mainnet3/gasPrices.json @@ -24,7 +24,7 @@ "decimals": 9 }, "astarzkevm": { - "amount": "0.105", + "amount": "0.078", "decimals": 9 }, "flame": { @@ -36,11 +36,11 @@ "decimals": 9 }, "b3": { - "amount": "0.001000252", + "amount": "0.001000254", "decimals": 9 }, "base": { - "amount": "0.010198987", + "amount": "0.004893247", "decimals": 9 }, "bitlayer": { @@ -48,7 +48,7 @@ "decimals": 9 }, "blast": { - "amount": "0.005065432", + "amount": "0.005018176", "decimals": 9 }, "bob": { @@ -96,7 +96,7 @@ "decimals": 9 }, "ethereum": { - "amount": "13.154482028", + "amount": "15.0", "decimals": 9 }, "everclear": { @@ -104,7 +104,7 @@ "decimals": 9 }, "fantom": { - "amount": "6.313597562", + "amount": "6.971582929", "decimals": 9 }, "flare": { @@ -112,7 +112,7 @@ "decimals": 9 }, "flowmainnet": { - "amount": "0.0000001", + "amount": "0.1", "decimals": 9 }, "fraxtal": { @@ -124,7 +124,7 @@ "decimals": 9 }, "gnosis": { - "amount": "1.500000008", + "amount": "1.500000007", "decimals": 9 }, "gravity": { @@ -136,7 +136,7 @@ "decimals": 9 }, "immutablezkevmmainnet": { - "amount": "10.000000051", + "amount": "10.000000056", "decimals": 9 }, "inevm": { @@ -156,7 +156,7 @@ "decimals": 9 }, "linea": { - "amount": "0.327116635", + "amount": "0.160485013", "decimals": 9 }, "lisk": { @@ -164,7 +164,7 @@ "decimals": 9 }, "lukso": { - "amount": "0.323509518", + "amount": "0.475094399", "decimals": 9 }, "lumia": { @@ -172,7 +172,7 @@ "decimals": 9 }, "mantapacific": { - "amount": "0.003000426", + "amount": "0.003001158", "decimals": 9 }, "mantle": { @@ -208,7 +208,7 @@ "decimals": 9 }, "morph": { - "amount": "0.201", + "amount": "0.002", "decimals": 9 }, "neutron": { @@ -220,7 +220,7 @@ "decimals": 9 }, "optimism": { - "amount": "0.001000638", + "amount": "0.001010111", "decimals": 9 }, "orderly": { @@ -232,11 +232,11 @@ "decimals": 1 }, "polygon": { - "amount": "36.937366533", + "amount": "47.07124319", "decimals": 9 }, "polygonzkevm": { - "amount": "0.217", + "amount": "0.146", "decimals": 9 }, "polynomialfi": { @@ -312,7 +312,7 @@ "decimals": 9 }, "worldchain": { - "amount": "0.001000279", + "amount": "0.00100025", "decimals": 9 }, "xai": { @@ -320,7 +320,7 @@ "decimals": 9 }, "xlayer": { - "amount": "10.982428125", + "amount": "7.04", "decimals": 9 }, "zeronetwork": { @@ -340,7 +340,7 @@ "decimals": 9 }, "zoramainnet": { - "amount": "0.001000252", + "amount": "0.001000269", "decimals": 9 } } diff --git a/typescript/infra/config/environments/mainnet3/owners.ts b/typescript/infra/config/environments/mainnet3/owners.ts index 4cd7567630..f97eafe171 100644 --- a/typescript/infra/config/environments/mainnet3/owners.ts +++ b/typescript/infra/config/environments/mainnet3/owners.ts @@ -55,6 +55,7 @@ export const safes: ChainMap
= { fusemainnet: '0x29a526227CB864C90Cf078d03872da913B473139', endurance: '0xaCD1865B262C89Fb0b50dcc8fB095330ae8F35b5', zircuit: '0x9e2fe7723b018d02cDE4f5cC1A9bC9C65b922Fc8', + zeronetwork: '0xCB21F61A3c8139F18e635d45aD1e62A4A61d2c3D', }; export const icaOwnerChain = 'ethereum'; @@ -130,18 +131,32 @@ export const icas: Partial< // ---------------------------------------------------------- // lumia: '0x418E10Ac9e0b84022d0636228d05bc74172e0e41', - // // Oct 30, 2024 batch - // // ---------------------------------------------------------- - // apechain: '0xe68b0aB6BB8c11D855556A5d3539524f6DB3bdc6', - // arbitrumnova: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', - // b3: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', - // fantom: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', - // gravity: '0x3104ADE26e21AEbdB325321433541DfE8B5dCF23', - // harmony: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', - // kaia: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', - // morph: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', - // orderly: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', - // snaxchain: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', + // Oct 30, 2024 batch + // ---------------------------------------------------------- + apechain: '0xe68b0aB6BB8c11D855556A5d3539524f6DB3bdc6', + arbitrumnova: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', + b3: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', + fantom: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', + gravity: '0x3104ADE26e21AEbdB325321433541DfE8B5dCF23', + harmony: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', + kaia: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', + morph: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', + orderly: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', + snaxchain: '0x8965d9f19336EB4e910d5f1B9070205FdBee6837', + + // Nov 8, 2024 batch + // ---------------------------------------------------------- + alephzeroevmmainnet: '0xDE91AC081E12107a033728A287b06B1Fc640A637', + chilizmainnet: '0x54AF0FCDCD58428f8dF3f825267DfB58f2C710eb', + flowmainnet: '0x65528D447C93CC1A1A7186CB4449d9fE0d5C1928', + immutablezkevmmainnet: '0x54AF0FCDCD58428f8dF3f825267DfB58f2C710eb', + metal: '0xf1d25462e1f82BbF25b3ef7A4C94F738a30a968B', + polynomialfi: '0x6ACa36E710dC0C80400090EA0bC55dA913a3D20D', + rarichain: '0xD0A4Ad2Ca0251BBc6541f8c2a594F1A82b67F114', + rootstockmainnet: '0x0C15f7479E0B46868693568a3f1C747Fdec9f17d', + superpositionmainnet: '0x5F17Dc2e1fd1371dc6e694c51f22aBAF8E27667B', + flame: '0x4F3d85360840497Cd1bc34Ca55f27629eee2AA2e', + prom: '0x1cDd3C143387cD1FaE23e2B66bc3F409D073aC3D', } as const; export const DEPLOYER = '0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba'; diff --git a/typescript/infra/config/environments/mainnet3/tokenPrices.json b/typescript/infra/config/environments/mainnet3/tokenPrices.json index 1051ca61ca..106c5831fa 100644 --- a/typescript/infra/config/environments/mainnet3/tokenPrices.json +++ b/typescript/infra/config/environments/mainnet3/tokenPrices.json @@ -1,88 +1,88 @@ { - "ancient8": "2709.5", - "alephzeroevmmainnet": "0.338269", - "apechain": "1.072", - "arbitrum": "2709.5", - "arbitrumnova": "2709.5", - "astar": "0.056141", - "astarzkevm": "2709.5", + "ancient8": "2901.97", + "alephzeroevmmainnet": "0.352558", + "apechain": "1.021", + "arbitrum": "2901.97", + "arbitrumnova": "2901.97", + "astar": "0.05516", + "astarzkevm": "2901.97", "flame": "5.14", - "avalanche": "27.18", - "b3": "2709.5", - "base": "2709.5", - "bitlayer": "75285", - "blast": "2709.5", - "bob": "2709.5", - "bsc": "595.27", - "celo": "0.639237", - "cheesechain": "0.00284839", - "chilizmainnet": "0.061694", - "coredao": "0.910171", - "cyber": "2709.5", - "degenchain": "0.00905774", - "dogechain": "0.195154", - "eclipsemainnet": "2709.5", - "endurance": "2.12", - "ethereum": "2709.5", - "everclear": "2709.5", - "fantom": "0.694411", - "flare": "0.01312677", - "flowmainnet": "0.541194", - "fraxtal": "2700.36", - "fusemainnet": "0.02836395", - "gnosis": "0.999944", - "gravity": "0.0295987", - "harmony": "0.01263325", - "immutablezkevmmainnet": "1.23", - "inevm": "21.24", - "injective": "21.24", - "kaia": "0.123184", - "kroma": "2709.5", - "linea": "2709.5", - "lisk": "2709.5", - "lukso": "1.47", - "lumia": "1.09", - "mantapacific": "2709.5", - "mantle": "0.598548", - "merlin": "75305", - "metal": "2709.5", - "metis": "44.4", - "mint": "2709.5", - "mode": "2709.5", - "molten": "0.23804", - "moonbeam": "0.166004", - "morph": "2709.5", - "neutron": "0.380957", - "oortmainnet": "0.097843", - "optimism": "2709.5", - "orderly": "2709.5", - "osmosis": "0.438116", - "polygon": "0.332225", - "polygonzkevm": "2709.5", - "polynomialfi": "2709.5", - "prom": "5.37", - "proofofplay": "2709.5", - "rarichain": "2709.5", + "avalanche": "27.43", + "b3": "2901.97", + "base": "2901.97", + "bitlayer": "75858", + "blast": "2901.97", + "bob": "2901.97", + "bsc": "596.14", + "celo": "0.63787", + "cheesechain": "0.00211859", + "chilizmainnet": "0.061174", + "coredao": "0.886582", + "cyber": "2901.97", + "degenchain": "0.00776785", + "dogechain": "0.197113", + "eclipsemainnet": "2901.97", + "endurance": "2.02", + "ethereum": "2901.97", + "everclear": "2901.97", + "fantom": "0.708456", + "flare": "0.01303515", + "flowmainnet": "0.5289", + "fraxtal": "2892.2", + "fusemainnet": "0.02930522", + "gnosis": "1.001", + "gravity": "0.02864739", + "harmony": "0.01246587", + "immutablezkevmmainnet": "1.18", + "inevm": "21.99", + "injective": "21.99", + "kaia": "0.121813", + "kroma": "2901.97", + "linea": "2901.97", + "lisk": "2901.97", + "lukso": "1.48", + "lumia": "1.059", + "mantapacific": "2901.97", + "mantle": "0.651888", + "merlin": "75853", + "metal": "2901.97", + "metis": "44.6", + "mint": "2901.97", + "mode": "2901.97", + "molten": "0.25598", + "moonbeam": "0.169922", + "morph": "2901.97", + "neutron": "0.374494", + "oortmainnet": "0.092246", + "optimism": "2901.97", + "orderly": "2901.97", + "osmosis": "0.43997", + "polygon": "0.343626", + "polygonzkevm": "2901.97", + "polynomialfi": "2901.97", + "prom": "5.38", + "proofofplay": "2901.97", + "rarichain": "2901.97", "real": "1", - "redstone": "2709.5", - "rootstockmainnet": "75239", - "sanko": "47.08", - "scroll": "2709.5", - "sei": "0.40953", - "shibarium": "0.393606", - "snaxchain": "2709.5", - "solanamainnet": "186.76", - "stride": "0.625491", - "superpositionmainnet": "2709.5", - "taiko": "2709.5", + "redstone": "2901.97", + "rootstockmainnet": "75541", + "sanko": "53.25", + "scroll": "2901.97", + "sei": "0.404683", + "shibarium": "0.407901", + "snaxchain": "2901.97", + "solanamainnet": "199.51", + "stride": "0.583853", + "superpositionmainnet": "2901.97", + "taiko": "2901.97", "tangle": "1", - "viction": "0.349089", - "worldchain": "2709.5", - "xai": "0.213165", - "xlayer": "39.31", - "zeronetwork": "2709.5", - "zetachain": "0.691041", - "zircuit": "2709.5", - "zksync": "2709.5", - "zoramainnet": "2709.5" + "viction": "0.340844", + "worldchain": "2901.97", + "xai": "0.2107", + "xlayer": "40.21", + "zeronetwork": "2901.97", + "zetachain": "0.680925", + "zircuit": "2901.97", + "zksync": "2901.97", + "zoramainnet": "2901.97" } diff --git a/typescript/infra/scripts/announce-validators.ts b/typescript/infra/scripts/announce-validators.ts index b09e58b1f9..9bc3e664f7 100644 --- a/typescript/infra/scripts/announce-validators.ts +++ b/typescript/infra/scripts/announce-validators.ts @@ -73,6 +73,7 @@ async function main() { await Promise.all( Object.entries(agentConfig.validators.chains) .filter(([validatorChain, _]) => { + // Ensure we skip lumia, as we don't have the addresses in registry. if (validatorChain === 'lumia') { return false; } diff --git a/typescript/infra/scripts/check/check-owner-ica.ts b/typescript/infra/scripts/check/check-owner-ica.ts index bd52ad9222..308093bf5a 100644 --- a/typescript/infra/scripts/check/check-owner-ica.ts +++ b/typescript/infra/scripts/check/check-owner-ica.ts @@ -1,14 +1,8 @@ -import { ethers } from 'ethers'; - import { AccountConfig, InterchainAccount } from '@hyperlane-xyz/sdk'; -import { - Address, - eqAddress, - isZeroish, - isZeroishAddress, -} from '@hyperlane-xyz/utils'; +import { Address, eqAddress, isZeroishAddress } from '@hyperlane-xyz/utils'; import { icas } from '../../config/environments/mainnet3/owners.js'; +import { chainsToSkip } from '../../src/config/chain.js'; import { isEthereumProtocolChain } from '../../src/utils/utils.js'; import { getArgs as getEnvArgs, withChains } from '../agent-utils.js'; import { getEnvironmentConfig, getHyperlaneCore } from '../core-utils.js'; @@ -39,7 +33,9 @@ async function main() { const checkOwnerIcaChains = ( chains?.length ? chains : Object.keys(icas) - ).filter(isEthereumProtocolChain); + ).filter( + (chain) => isEthereumProtocolChain(chain) && !chainsToSkip.includes(chain), + ); const ownerConfig: AccountConfig = { origin: ownerChain, diff --git a/typescript/infra/scripts/check/check-validator-announce.ts b/typescript/infra/scripts/check/check-validator-announce.ts index fec2f2e071..0f484329f4 100644 --- a/typescript/infra/scripts/check/check-validator-announce.ts +++ b/typescript/infra/scripts/check/check-validator-announce.ts @@ -23,9 +23,10 @@ async function main() { const config = getEnvironmentConfig(environment); const { core } = await getHyperlaneCore(environment); + // Ensure we skip lumia, as we don't have the addresses in registry. const targetNetworks = ( chains && chains.length > 0 ? chains : config.supportedChainNames - ).filter(isEthereumProtocolChain); + ).filter((chain) => isEthereumProtocolChain(chain) && chain !== 'lumia'); const chainsWithUnannouncedValidators: ChainMap = {}; diff --git a/typescript/infra/scripts/get-owner-ica.ts b/typescript/infra/scripts/get-owner-ica.ts index bfb348cb3a..16c6db99e3 100644 --- a/typescript/infra/scripts/get-owner-ica.ts +++ b/typescript/infra/scripts/get-owner-ica.ts @@ -1,6 +1,7 @@ import { AccountConfig, InterchainAccount } from '@hyperlane-xyz/sdk'; import { Address, eqAddress, isZeroishAddress } from '@hyperlane-xyz/utils'; +import { chainsToSkip } from '../src/config/chain.js'; import { isEthereumProtocolChain } from '../src/utils/utils.js'; import { getArgs as getEnvArgs, withChains } from './agent-utils.js'; @@ -62,7 +63,9 @@ async function main() { const getOwnerIcaChains = ( chains?.length ? chains : config.supportedChainNames - ).filter(isEthereumProtocolChain); + ).filter( + (chain) => isEthereumProtocolChain(chain) && !chainsToSkip.includes(chain), + ); const results: Record = {}; const settledResults = await Promise.allSettled( diff --git a/typescript/infra/src/config/chain.ts b/typescript/infra/src/config/chain.ts index 49941e77d0..a7bb7c9f95 100644 --- a/typescript/infra/src/config/chain.ts +++ b/typescript/infra/src/config/chain.ts @@ -16,7 +16,9 @@ import { inCIMode } from '../utils/utils.js'; import { DeployEnvironment } from './environment.js'; -// Temporarily skip some chains +// A list of chains to skip during deploy, check-deploy and ICA operations. +// Used by scripts like check-owner-ica.ts to exclude chains that are temporarily +// unsupported (e.g. zksync, zeronetwork) or have known issues (e.g. lumia). export const chainsToSkip: ChainName[] = [ // TODO: remove once zksync PR is merged into main // mainnets diff --git a/typescript/sdk/src/consts/multisigIsm.ts b/typescript/sdk/src/consts/multisigIsm.ts index 55a52e1d75..88f42c7822 100644 --- a/typescript/sdk/src/consts/multisigIsm.ts +++ b/typescript/sdk/src/consts/multisigIsm.ts @@ -9,8 +9,12 @@ export const defaultMultisigConfigs: ChainMap = { }, alephzeroevmmainnet: { - threshold: 1, - validators: ['0x33f20e6e775747d60301c6ea1c50e51f0389740c'], + threshold: 2, + validators: [ + '0x33f20e6e775747d60301c6ea1c50e51f0389740c', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + ], }, alephzeroevmtestnet: { @@ -213,8 +217,12 @@ export const defaultMultisigConfigs: ChainMap = { }, chilizmainnet: { - threshold: 1, - validators: ['0x7403e5d58b48b0f5f715d9c78fbc581f01a625cb'], + threshold: 2, + validators: [ + '0x7403e5d58b48b0f5f715d9c78fbc581f01a625cb', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + ], }, citreatestnet: { @@ -324,8 +332,12 @@ export const defaultMultisigConfigs: ChainMap = { }, flame: { - threshold: 1, - validators: ['0x1fa928ce884fa16357d4b8866e096392d4d81f43'], + threshold: 2, + validators: [ + '0x1fa928ce884fa16357d4b8866e096392d4d81f43', + '0xa6c998f0db2b56d7a63faf30a9b677c8b9b6faab', // p-ops + '0x0d4c1394a255568ec0ecd11795b28d1bda183ca4', // tessellated + ], }, flare: { @@ -338,8 +350,12 @@ export const defaultMultisigConfigs: ChainMap = { }, flowmainnet: { - threshold: 1, - validators: ['0xe132235c958ca1f3f24d772e5970dd58da4c0f6e'], + threshold: 2, + validators: [ + '0xe132235c958ca1f3f24d772e5970dd58da4c0f6e', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + ], }, formtestnet: { @@ -413,15 +429,19 @@ export const defaultMultisigConfigs: ChainMap = { }, immutablezkevmmainnet: { - threshold: 1, - validators: ['0xbdda85b19a5efbe09e52a32db1a072f043dd66da'], + threshold: 2, + validators: [ + '0xbdda85b19a5efbe09e52a32db1a072f043dd66da', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + ], }, inevm: { threshold: 2, validators: [ '0xf9e35ee88e4448a3673b4676a4e153e3584a08eb', - '0x6B1d09A97b813D53e9D4b7523DA36604C0B52242', // caldera + '0x0d4e7e64f3a032db30b75fe7acae4d2c877883bc', // decentrio '0x9ab11f38a609940153850df611c9a2175dcffe0f', // imperator ], }, @@ -529,8 +549,12 @@ export const defaultMultisigConfigs: ChainMap = { }, metal: { - threshold: 1, - validators: ['0xd9f7f1a05826197a93df51e86cefb41dfbfb896a'], + threshold: 2, + validators: [ + '0xd9f7f1a05826197a93df51e86cefb41dfbfb896a', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + ], }, metis: { @@ -679,13 +703,21 @@ export const defaultMultisigConfigs: ChainMap = { }, polynomialfi: { - threshold: 1, - validators: ['0x23d348c2d365040e56f3fee07e6897122915f513'], + threshold: 2, + validators: [ + '0x23d348c2d365040e56f3fee07e6897122915f513', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + ], }, prom: { - threshold: 1, - validators: ['0xb0c4042b7c9a95345be8913f4cdbf4043b923d98'], + threshold: 2, + validators: [ + '0xb0c4042b7c9a95345be8913f4cdbf4043b923d98', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + ], }, proofofplay: { @@ -698,8 +730,12 @@ export const defaultMultisigConfigs: ChainMap = { }, rarichain: { - threshold: 1, - validators: ['0xeac012df7530720dd7d6f9b727e4fe39807d1516'], + threshold: 2, + validators: [ + '0xeac012df7530720dd7d6f9b727e4fe39807d1516', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + ], }, real: { @@ -722,8 +758,12 @@ export const defaultMultisigConfigs: ChainMap = { }, rootstockmainnet: { - threshold: 1, - validators: ['0x8675eb603d62ab64e3efe90df914e555966e04ac'], + threshold: 2, + validators: [ + '0x8675eb603d62ab64e3efe90df914e555966e04ac', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + ], }, sanko: { @@ -848,8 +888,12 @@ export const defaultMultisigConfigs: ChainMap = { }, superpositionmainnet: { - threshold: 1, - validators: ['0x3f489acdd341c6b4dd86293fa2cc5ecc8ccf4f84'], + threshold: 2, + validators: [ + '0x3f489acdd341c6b4dd86293fa2cc5ecc8ccf4f84', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + ], }, superpositiontestnet: { From f76984baa516a40961f5f56911ec5649004f7416 Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Tue, 12 Nov 2024 15:45:59 +0000 Subject: [PATCH 4/7] fix: update warp monitors with latest registry to fix collateral value (#4849) ### Description - To include some fixes to the coinGeckoIds of warp routes recently merged into the registry ### Drive-by changes - made an agent metrics log `warn`, which helped debugging some recent issues - Update the eclipsemainnet owner in owners.ts, a mostly symbolic change as this isn't actually used in our tooling in infra ### Related issues ### Backward compatibility ### Testing --- .github/workflows/monorepo-docker.yml | 3 +- .registryrc | 2 +- rust/main/config/mainnet_config.json | 167 +++++++++--------- .../src/metrics/agent_metrics.rs | 2 +- .../config/environments/mainnet3/owners.ts | 3 +- typescript/infra/src/warp/helm.ts | 2 +- typescript/utils/src/async.test.ts | 2 +- 7 files changed, 92 insertions(+), 89 deletions(-) diff --git a/.github/workflows/monorepo-docker.yml b/.github/workflows/monorepo-docker.yml index e697aae22c..750a903d19 100644 --- a/.github/workflows/monorepo-docker.yml +++ b/.github/workflows/monorepo-docker.yml @@ -6,8 +6,9 @@ on: - '**' pull_request: paths: - # For now, because this image is only used to use `infra`, we just build for infra changes + # For now, because this image is only used to use `infra`, we just build for infra or .registryrc changes - 'typescript/infra/**' + - '.registryrc' - 'Dockerfile' - '.dockerignore' - '.github/workflows/monorepo-docker.yml' diff --git a/.registryrc b/.registryrc index 24eb8a50a3..9f4316497a 100644 --- a/.registryrc +++ b/.registryrc @@ -1 +1 @@ -10fdae0f566c7c213b6b1b27b8620e8776f2895f +3e366eae1d49da4270695b157d7af00bb761156a diff --git a/rust/main/config/mainnet_config.json b/rust/main/config/mainnet_config.json index 6388fd2d39..f0ea1a9ddd 100644 --- a/rust/main/config/mainnet_config.json +++ b/rust/main/config/mainnet_config.json @@ -34,7 +34,7 @@ "interchainAccountIsm": "0xd766e7C7517f2d0D92754b2fe4aE7AdEf7bDEC3e", "interchainAccountRouter": "0x25C87e735021F72d8728438C2130b02E3141f2cb", "interchainGasPaymaster": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", - "interchainSecurityModule": "0x259Da872714f84B74B4473fab45e9839f3453a40", + "interchainSecurityModule": "0xECd85a9d1215eab1a53364dA71A57634b1a0e1C8", "isTestnet": false, "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x811808Dd29ba8B0FC6C0ec0b5537035E59745162", @@ -100,7 +100,7 @@ "interchainAccountIsm": "0x2A7574358Ec53522CE2452887661AB4c86F7d400", "interchainAccountRouter": "0x91874Dbed74925dFe6059B90385EEb90DdE0B2E6", "interchainGasPaymaster": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", - "interchainSecurityModule": "0xDeeE785e0b3De36A7F1aF5d0A0a1F86e7c356a58", + "interchainSecurityModule": "0x25ebF66b71a3De55D25CcFea5C0d4f974931CeeA", "mailbox": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9", "merkleTreeHook": "0x748040afB89B8FdBb992799808215419d36A0930", "name": "arbitrum", @@ -172,7 +172,7 @@ "interchainAccountIsm": "0x27a3233c05C1Df7c163123301D14bE9349E3Cb48", "interchainAccountRouter": "0xa82a0227e6d6db53AF4B264A852bfF91C6504a51", "interchainGasPaymaster": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", - "interchainSecurityModule": "0x8Ea008E1E39D9770312b9b516D1f0C41DD3feCb3", + "interchainSecurityModule": "0x57576C0A653d3E9697E16f331ef8aBd8f9c9f64e", "mailbox": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6", "merkleTreeHook": "0x84eea61D679F42D92145fA052C89900CBAccE95A", "name": "avalanche", @@ -245,7 +245,7 @@ "interchainAccountIsm": "0x223F7D3f27E6272266AE4B5B91Fd5C7A2d798cD8", "interchainAccountRouter": "0x4767D22117bBeeb295413000B620B93FD8522d53", "interchainGasPaymaster": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", - "interchainSecurityModule": "0x875a788e4A887848ac0B5d4431125Ecd5cdB3dAe", + "interchainSecurityModule": "0x4EC3B7A1E41032C7b557fBb5c7FEbB255D23d41E", "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", "merkleTreeHook": "0x19dc38aeae620380430C200a6E990D5Af5480117", "name": "base", @@ -309,14 +309,14 @@ "domainRoutingIsmFactory": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "fallbackRoutingHook": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", "gasCurrencyCoinGeckoId": "ethereum", - "gnosisSafeTransactionServiceUrl": "https://transaction.blast-safe.io", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-blast.safe.global", "index": { "from": 2496427 }, "interchainAccountIsm": "0xe93f2f409ad8B5000431D234472973fe848dcBEC", "interchainAccountRouter": "0x2f4Eb04189e11Af642237Da62d163Ab714614498", "interchainGasPaymaster": "0xB3fCcD379ad66CED0c91028520C64226611A48c9", - "interchainSecurityModule": "0x518C62D6771b7a6b393E429ba5f9025a6F485301", + "interchainSecurityModule": "0x91c650094f876498B544cFbF47bDf4AD5762571f", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", "name": "blast", @@ -384,7 +384,7 @@ "interchainAccountIsm": "0x451dF8AB0936D85526D816f0b4dCaDD934A034A4", "interchainAccountRouter": "0x5C02157068a52cEcfc98EDb6115DE6134EcB4764", "interchainGasPaymaster": "0x62B7592C1B6D1E43f4630B8e37f4377097840C05", - "interchainSecurityModule": "0x28Df661E61e2f4e7a35F3a554094191e64cd6E5A", + "interchainSecurityModule": "0xCE12fcDAA985D84CBb9e17EA81AFa23e5756ECf9", "mailbox": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147", "merkleTreeHook": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", "name": "bob", @@ -450,7 +450,7 @@ "interchainAccountIsm": "0x9e22945bE593946618383B108CC5bce09eBA4C26", "interchainAccountRouter": "0x32A07c1B7a7fe8D4A0e44B0181873aB9d64C16c1", "interchainGasPaymaster": "0x78E25e7f84416e69b9339B0A6336EB6EFfF6b451", - "interchainSecurityModule": "0x5BC506C2C04dfDe5b45cbF47f05b4373D65832e4", + "interchainSecurityModule": "0x08b98B5a7ef4AF12c87Efb6848AC56F13072Acc1", "mailbox": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4", "merkleTreeHook": "0xFDb9Cd5f9daAA2E4474019405A328a88E7484f26", "name": "bsc", @@ -531,7 +531,7 @@ "interchainAccountIsm": "0xB732c83aeE29596E3163Da2260710eAB67Bc0B29", "interchainAccountRouter": "0x27a6cAe33378bB6A6663b382070427A01fc9cB37", "interchainGasPaymaster": "0x571f1435613381208477ac5d6974310d88AC7cB7", - "interchainSecurityModule": "0xB9aD1ccE862444B5C3bad009ef500AD3680940Da", + "interchainSecurityModule": "0x75EEa329FAD5680f386d586Ac453b62e858C1CA8", "mailbox": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb", "merkleTreeHook": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", "name": "celo", @@ -596,7 +596,7 @@ "interchainAccountIsm": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", "interchainAccountRouter": "0xEF9A332Ec1fD233Bf9344A58be56ff9E104B4f60", "interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503", - "interchainSecurityModule": "0x77e9F81405DBC1eBeDA93f23aB4a339452d2AD9D", + "interchainSecurityModule": "0x15f859523466132580AB74Fd27c920CE5372a1b0", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD", "name": "cheesechain", @@ -659,7 +659,7 @@ "from": 4842212 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xcC5534C4665D9BD93B377F56eC4c09Fdee87AD30", + "interchainSecurityModule": "0xf563C8347b0b03542d1027e0450166A9E56Ce4b0", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "cyber", @@ -726,7 +726,7 @@ "from": 23783929 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xF6C78dDeeb0Ef1682bC020787ecA835C5F353701", + "interchainSecurityModule": "0xc6282b9525b43E373BdE5B8C018a486502552B73", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "degenchain", @@ -839,7 +839,7 @@ "interchainAccountIsm": "0xCeafc098e5c3c7768b9229Be2FEC275862A81Abd", "interchainAccountRouter": "0xed9a722c543883FB7e07E78F3879762DE09eA7D5", "interchainGasPaymaster": "0xB30EAB08aa87138D57168D0e236850A530f49921", - "interchainSecurityModule": "0x702A7e81b3625AA02b365Aa95A7123a9EB31012f", + "interchainSecurityModule": "0x48Be1A244EbFEe8E66D220004f93e2aa42CC3463", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xC831271c1fB212012811a91Dd43e5926C1020563", "name": "endurance", @@ -910,7 +910,7 @@ "interchainAccountIsm": "0x292C614ED53DaaDBf971521bc2C652d1ca51cB47", "interchainAccountRouter": "0x5E532F7B610618eE73C2B462978e94CB1F7995Ce", "interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", - "interchainSecurityModule": "0xc7b5BA9EcedcFd7D250Cf7df19558D7dd0d06ECc", + "interchainSecurityModule": "0x0DCb0e2ceDB8828Ab1809d742C3621c7FE169E5B", "mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239", "merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", "name": "ethereum", @@ -979,7 +979,7 @@ "interchainAccountIsm": "0x7C012DCA02C42cfA3Fd7Da3B0ED7234B52AE68eF", "interchainAccountRouter": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9", "interchainGasPaymaster": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", - "interchainSecurityModule": "0xC8e75e117E1dBC43880ac6c85e820844Dd5f527a", + "interchainSecurityModule": "0xF80aaED3e93c02ceEE812cCAe6d15BDB68e62F4D", "mailbox": "0x2f9DB5616fa3fAd1aB06cB2C906830BA63d135e3", "merkleTreeHook": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147", "name": "fraxtal", @@ -1047,7 +1047,7 @@ "interchainAccountIsm": "0x9629c28990F11c31735765A6FD59E1E1bC197DbD", "interchainAccountRouter": "0x2351FBe24C1212F253b7a300ff0cBCFd97952a19", "interchainGasPaymaster": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", - "interchainSecurityModule": "0xf0b1EC4228c0F26B7225851f940c625e4Be12226", + "interchainSecurityModule": "0x58f85b68c664017247E6A65290409953a10adbd8", "mailbox": "0x3071D4DA6020C956Fe15Bfd0a9Ca8D4574f16696", "merkleTreeHook": "0xfBc08389224d23b79cb21cDc16c5d42F0ad0F57f", "name": "fusemainnet", @@ -1121,7 +1121,7 @@ "interchainAccountIsm": "0x07E2062A1bC66a2C1d05cb5C3870a4AF86e0056E", "interchainAccountRouter": "0xBE70Ab882D1F7E37e04a70CDd9Ec23b37a234064", "interchainGasPaymaster": "0xDd260B99d302f0A3fF885728c086f729c06f227f", - "interchainSecurityModule": "0xcfA4D90A43AAB0dE6a07c33A0614606b5Fbf71eC", + "interchainSecurityModule": "0x4845d050F06482960435499e88286808c181F913", "mailbox": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", "merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645", "name": "gnosis", @@ -1192,7 +1192,7 @@ "interchainAccountIsm": "0x708E002637792FDC031E6B62f23DD60014AC976a", "interchainAccountRouter": "0xfB8cea1c7F45608Da30655b50bbF355D123A4358", "interchainGasPaymaster": "0x19dc38aeae620380430C200a6E990D5Af5480117", - "interchainSecurityModule": "0x5f39C3f0d9c74a667C177795b769CC22aE0A200d", + "interchainSecurityModule": "0xf7CaC1C661fe307CD4Eadb08EE5E64bb34623c11", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x0972954923a1e2b2aAb04Fa0c4a0797e5989Cd65", "name": "inevm", @@ -1320,7 +1320,7 @@ "from": 14616307 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xa078A84FCB5d53BCe9529DcF96635794951116Ba", + "interchainSecurityModule": "0xf6AB62267aA88f7219CB9d77e361687e090b224F", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "kroma", @@ -1386,14 +1386,14 @@ "domainRoutingIsmFactory": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "fallbackRoutingHook": "0x4E1c88DD261BEe2941e6c1814597e30F53330428", "gasCurrencyCoinGeckoId": "ethereum", - "gnosisSafeTransactionServiceUrl": "https://transaction.safe.linea.build", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-linea.safe.global", "index": { "from": 5154574 }, "interchainAccountIsm": "0xdcA646C56E7768DD11654956adE24bfFf9Ba4893", "interchainAccountRouter": "0xD59dA396F162Ed93a41252Cebb8d5DD4F093238C", "interchainGasPaymaster": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", - "interchainSecurityModule": "0x3902B990C5DC30D6CeeFf8b8B6Ad0cb6466b7d45", + "interchainSecurityModule": "0x914E4A88Be1e835b17B6f2F259861989fCB27978", "mailbox": "0x02d16BC51af6BfD153d67CA61754cF912E82C4d9", "merkleTreeHook": "0xC077A0Cc408173349b1c9870C667B40FE3C01dd7", "name": "linea", @@ -1464,7 +1464,7 @@ "from": 4195553 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xcee06f87aC789615B0BF989B54fb36De334af5bC", + "interchainSecurityModule": "0xEED58BC374386596a848856aDCD07f597B70e2d9", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "lisk", @@ -1528,7 +1528,7 @@ "from": 3088760 }, "interchainGasPaymaster": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", - "interchainSecurityModule": "0x351621b2fbfe92193304A8e4DD97E04108883Ac8", + "interchainSecurityModule": "0xf660731c69aF0E1C441bEE544595dbBEE652ebb6", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x062200d92dF6bB7bA89Ce4D6800110450f94784e", "name": "lukso", @@ -1602,7 +1602,7 @@ "interchainAccountIsm": "0x8Ea50255C282F89d1A14ad3F159437EE5EF0507f", "interchainAccountRouter": "0x693A4cE39d99e46B04cb562329e3F0141cA17331", "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "interchainSecurityModule": "0x4110577c0970e591b3DC6D8FfCbE8FA499b4cD14", + "interchainSecurityModule": "0x4cD0894d9277e62906c788c2F39Ab04610e577B7", "isTestnet": false, "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", @@ -1672,7 +1672,7 @@ "interchainAccountIsm": "0xe039DA3A0071BEd087A12660D7b03cf669c7776E", "interchainAccountRouter": "0x45285463352c53a481e882cD5E2AF2E25BBdAd0D", "interchainGasPaymaster": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", - "interchainSecurityModule": "0xAb7DdE83cf33e0B305624462A6B9D7D06A32A699", + "interchainSecurityModule": "0xA5c6193F340F05feD2064a9e56Bb7b3c6242E21E", "mailbox": "0x398633D19f4371e1DB5a8EFE90468eB70B1176AA", "merkleTreeHook": "0x5332D1AC0A626D265298c14ff681c0A8D28dB86d", "name": "mantle", @@ -1734,7 +1734,7 @@ "from": 13523607 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xc0dc69896334eD2f3Af2666d5EEF70e062a4636e", + "interchainSecurityModule": "0xF16b870563cbb181A53D5e8152cAAa3bF4c356D6", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "merlin", @@ -1801,7 +1801,7 @@ "from": 17966274 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xA04202E77957f7451c0a2F2CA9eF54FFC334BcF3", + "interchainSecurityModule": "0x015c05e7bCeAB0D16912667cC03282C6276aC7d7", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "metis", @@ -1866,7 +1866,7 @@ "from": 3752032 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0x120bbFe296f11Dd653Cd6aC4F93106d9e6ADe5Bc", + "interchainSecurityModule": "0xe5E2224EaF5488Cbc992a35C828Ae0006dFbfE27", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "mint", @@ -1933,7 +1933,7 @@ "interchainAccountIsm": "0xa377b8269e0A47cdd2fD5AAeAe860b45623c6d82", "interchainAccountRouter": "0x6e1B9f776bd415d7cC3C7458A5f0d801016918f8", "interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "interchainSecurityModule": "0x0ab4853f2104C8f8e0b4Da4028601D999c7dFCF5", + "interchainSecurityModule": "0xBE3E3bAe7b14098111dC0bBD0dFce251217E386A", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6", "name": "mode", @@ -2001,7 +2001,7 @@ "interchainAccountIsm": "0x79b3730CE3685f65802aF1771319992bA960EB9D", "interchainAccountRouter": "0xc4482f66191754a8629D35289043C4EB0285F10E", "interchainGasPaymaster": "0x14760E32C0746094cF14D97124865BC7F0F7368F", - "interchainSecurityModule": "0x11cC5Ac8F65e337Db6E95a542e87Af630cd0b1CD", + "interchainSecurityModule": "0x0F016E98B570D263cb5E37948bF4D92F328fcA4A", "mailbox": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", "merkleTreeHook": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", "name": "moonbeam", @@ -2143,7 +2143,7 @@ "interchainAccountIsm": "0x2c46BF14641d00549ECa4779BF5CBf91602C1DEd", "interchainAccountRouter": "0x03D6cC17d45E9EA27ED757A8214d1F07F7D901aD", "interchainGasPaymaster": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", - "interchainSecurityModule": "0x5E04bA55C08456562f7e1BF9E2b46628b81593c8", + "interchainSecurityModule": "0x3f8b6df0282D9fAF0d12752cD40166298A67f29B", "mailbox": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", "merkleTreeHook": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", "name": "optimism", @@ -2278,7 +2278,7 @@ "interchainAccountIsm": "0xBAC4529cdfE7CCe9E858BF706e41F8Ed096C1BAd", "interchainAccountRouter": "0xF163949AD9F88977ebF649D0461398Ca752E64B9", "interchainGasPaymaster": "0x0071740Bf129b05C4684abfbBeD248D80971cce2", - "interchainSecurityModule": "0x0c3fE398595235A3163b39E5C6443aa1f7e145c4", + "interchainSecurityModule": "0x40249639D8b148EBD66FE5b110DEbcE2fa06D683", "mailbox": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", "merkleTreeHook": "0x73FbD25c3e817DC4B4Cd9d00eff6D83dcde2DfF6", "name": "polygon", @@ -2355,7 +2355,7 @@ "interchainAccountIsm": "0xc1198e241DAe48BF5AEDE5DCE49Fe4A6064cF7a7", "interchainAccountRouter": "0x20a0A32a110362920597F72974E1E0d7e25cA20a", "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "interchainSecurityModule": "0x3351FC009ccb309C367787ff9f3040FDee0Dcf66", + "interchainSecurityModule": "0xAaBb015A97a49eCEa506A3D7b831BFF8458B7421", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", "name": "polygonzkevm", @@ -2423,7 +2423,7 @@ "from": 32018468 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0x37282B7505DA332Fc57FAb1623C73A4AeDb49165", + "interchainSecurityModule": "0x015c05e7bCeAB0D16912667cC03282C6276aC7d7", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "proofofplay", @@ -2487,7 +2487,7 @@ "from": 363159 }, "interchainGasPaymaster": "0x3071D4DA6020C956Fe15Bfd0a9Ca8D4574f16696", - "interchainSecurityModule": "0x14551EfDB6c29c8fC61D469627255E5f2c8Bf981", + "interchainSecurityModule": "0xbFA199Fae108dF18860D847c881EF5F8a7745e85", "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", "merkleTreeHook": "0x55E4F0bc6b7Bb493D50839A8592e7ad8d5e93cf7", "name": "real", @@ -2554,7 +2554,7 @@ "interchainAccountIsm": "0x5DA60220C5dDe35b7aE91c042ff5979047FA0785", "interchainAccountRouter": "0x7a4d31a686A36285d68e14EDD53631417eB19603", "interchainGasPaymaster": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "interchainSecurityModule": "0x5fe5b8f20437336a74fA53e553472f6fF048e73A", + "interchainSecurityModule": "0xA3A88Cf5b9eB22a9a192d8fC592ac769B1EA150A", "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", "merkleTreeHook": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", "name": "redstone", @@ -2616,7 +2616,7 @@ "from": 937117 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xcC5534C4665D9BD93B377F56eC4c09Fdee87AD30", + "interchainSecurityModule": "0xAA379b1f1B425b8174e1bF1614A40845053A86cF", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "sanko", @@ -2684,7 +2684,7 @@ "interchainAccountIsm": "0x32af5Df81fEd5E26119F6640FBB13f3d63a94CDe", "interchainAccountRouter": "0x0B48a744698ba8dFa514742dFEB6728f52fD66f7", "interchainGasPaymaster": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", - "interchainSecurityModule": "0x41D5dbBe3a6B5d3937f03e82C23d1EDF9D4d0B6C", + "interchainSecurityModule": "0x2C63D8BA06b341E73392E4d6ef069064D6fE4CDc", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", "name": "scroll", @@ -2752,7 +2752,7 @@ "interchainAccountIsm": "0xf35dc7B9eE4Ebf0cd3546Bd6EE3b403dE2b9F5D6", "interchainAccountRouter": "0xBcaedE97a98573A88242B3b0CB0A255F3f90d4d5", "interchainGasPaymaster": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", - "interchainSecurityModule": "0x42Aa14207b41A7c2b1692DFC4927a32Caaa52b24", + "interchainSecurityModule": "0x9b8e185A2e166e6E2357d23b4626220C656aD8dF", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xca1b69fA4c4a7c7fD839bC50867c589592bcfe49", "name": "sei", @@ -2867,7 +2867,7 @@ "interchainAccountIsm": "0xAE557e108b3336130370aC74836f1356B4b30Cf2", "interchainAccountRouter": "0x1F8CF09F060A2AE962c0Bb1F92e209a1E7b0E10B", "interchainGasPaymaster": "0x273Bc6b01D9E88c064b6E5e409BdF998246AEF42", - "interchainSecurityModule": "0x2faB8c35cd093904F3d9a9f022996103d4bb7A85", + "interchainSecurityModule": "0x68Ea629559Df7041adCf61569576023695C4A76b", "mailbox": "0x28EFBCadA00A7ed6772b3666F3898d276e88CAe3", "merkleTreeHook": "0x6A55822cf11f9fcBc4c75BC2638AfE8Eb942cAdd", "name": "taiko", @@ -2929,7 +2929,7 @@ "from": 1678063 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xcC5534C4665D9BD93B377F56eC4c09Fdee87AD30", + "interchainSecurityModule": "0xAA379b1f1B425b8174e1bF1614A40845053A86cF", "isTestnet": false, "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", @@ -2997,7 +2997,7 @@ "interchainAccountIsm": "0x551BbEc45FD665a8C95ca8731CbC32b7653Bc59B", "interchainAccountRouter": "0xc11f8Cf2343d3788405582F65B8af6A4F7a6FfC8", "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "interchainSecurityModule": "0x87Fb0665D25aC674D4d1494a13cA60E378f7536F", + "interchainSecurityModule": "0x00cd5A9d087E1a87779252487c35ba37C399808D", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", "name": "viction", @@ -3065,7 +3065,7 @@ "interchainAccountIsm": "0xCB9f90EE5d83Ea52ABd922BD70898f0155D54798", "interchainAccountRouter": "0x473884010F0C1742DA8Ad01E7E295624B931076b", "interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503", - "interchainSecurityModule": "0xb936B97837C4158DEA65CBaBCcC55bAE24134108", + "interchainSecurityModule": "0x34aD800C9e56D75655680401B8c5140ce4cACDBa", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD", "name": "worldchain", @@ -3127,7 +3127,7 @@ "from": 24395308 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xf61ee4520B7b316a34cdB31F4B95d8ad1808F919", + "interchainSecurityModule": "0xd69d8FBC4d716d902f40d041596f024B705CE394", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "xai", @@ -3195,7 +3195,7 @@ "interchainAccountIsm": "0x29B37088724B745C0ABcE591449Cf042772160C2", "interchainAccountRouter": "0x03cF708E42C89623bd83B281A56935cB562b9258", "interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503", - "interchainSecurityModule": "0x59Dcbb486F91561acC3500cdc378104AaE27e94a", + "interchainSecurityModule": "0xe88402C8346b055644E9dBBf6125131F73d89763", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD", "name": "xlayer", @@ -3263,7 +3263,7 @@ "interchainAccountIsm": "0x2b6d3F7d28B5EC8C3C028fBCAdcf774D9709Dd29", "interchainAccountRouter": "0x3AdCBc94ab8C48EC52D06dc65Bb787fD1981E3d5", "interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "interchainSecurityModule": "0x3DFD05cc42F1B5370e688520e65C8fb909418471", + "interchainSecurityModule": "0xA20Df62dEC7B82ea026CDcaD99774cB667F75d88", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6", "name": "zetachain", @@ -3329,7 +3329,7 @@ "from": 1511458 }, "interchainGasPaymaster": "0x03cF708E42C89623bd83B281A56935cB562b9258", - "interchainSecurityModule": "0x6C5288BBdFBfED98aE3e2C4201a53A9bBcC24fCE", + "interchainSecurityModule": "0x9f5eFA37Aa96676A634eDbBd2E2132a75557a19e", "mailbox": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", "merkleTreeHook": "0x4C97D35c668EE5194a13c8DE8Afc18cce40C9F28", "name": "zircuit", @@ -3402,7 +3402,7 @@ "interchainAccountIsm": "0xb2674E213019972f937CCFc5e23BF963D915809e", "interchainAccountRouter": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", "interchainGasPaymaster": "0x18B0688990720103dB63559a3563f7E8d0f63EDb", - "interchainSecurityModule": "0x10455742E8D25b3FC2b19D41A006E91594D05Cd5", + "interchainSecurityModule": "0xB4F0a46314954446aeEb27254569510226ecd3c2", "mailbox": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "merkleTreeHook": "0x886BB0f329781b98f98FDeb1ce7a8957F2d43B9F", "name": "zoramainnet", @@ -3473,7 +3473,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0xed2b47397954E0a56ca7C2a862dba4027da0f595", + "interchainSecurityModule": "0x4b1EF66EB03743D243dca2024af3B6C4BB2afCAC", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3540,7 +3540,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x73b3A13eA8084C9BeAd07eD867cEe1E8F5cceF9e", + "interchainSecurityModule": "0x55bD770A3220A745B62600e3BEE6e6F944948c5B", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3610,7 +3610,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x0fFD49C8ae6f5DdC20124B92c4b4048EbeF71830", + "interchainSecurityModule": "0x2D78569De74146D7CDB5A8aabD8Bd451Da641c92", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3686,7 +3686,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x6dCfEB77d5801DCC76C0EDd1F44E32D6dEcAD2A2", + "interchainSecurityModule": "0x574A030c4636De291C42537d1dc0B9079318F839", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3750,7 +3750,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x119b3dFBef304b07BBCb08D5182459f35808bfF2", + "interchainSecurityModule": "0x376F482e4dF14f7d497Ee5bF827Cf7BC7688F9DD", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3823,7 +3823,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x7954Da9003180D64B9Eb7dE5E23fC83Fd7673047", + "interchainSecurityModule": "0x53245370532d36e57B2Ef87fAF7Fb389A88aC57e", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3891,7 +3891,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0xE96E34b0e66A5FAe90Be8f5FE41B6adB86D84A8b", + "interchainSecurityModule": "0xe8b432a77F1195bD7F27d54f0D354D25E014c1DE", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3954,7 +3954,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x6CECA24Ebc20183B17fbA17f2856d5B3f97659Db", + "interchainSecurityModule": "0x60DE73a356E9bEFBC73Ca55799ab4AE18d9f0574", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -4024,7 +4024,7 @@ "interchainAccountIsm": "0xcd9D3744512F07AE844c40E27912092d7c503565", "interchainAccountRouter": "0x92cdbF0Ccdf8E93467FA858fb986fa650A02f2A8", "interchainGasPaymaster": "0xb58257cc81E47EC72fD38aE16297048de23163b4", - "interchainSecurityModule": "0x6B38f93e9145BF8b09B127e20F0275E92E29E4F5", + "interchainSecurityModule": "0x099c96B148fC39c449884D7ABEC6837e51BF7fA9", "mailbox": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39", "merkleTreeHook": "0xCC3D1659D50461d27a2F025dDb2c9B06B584B7e1", "pausableHook": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", @@ -4084,7 +4084,7 @@ "interchainAccountIsm": "0xc23BaF5Eb5848D19701BbE7f139645e6bd58a319", "interchainAccountRouter": "0x7c58Cadcc2b60ACF794eE1843488d6f5703f76BE", "interchainGasPaymaster": "0xb4fc9B5fD57499Ef6FfF3995728a55F7A618ef86", - "interchainSecurityModule": "0x0d242364057129d99Fca35BA8Ed2d9Ae90956F63", + "interchainSecurityModule": "0x6aF9a16aa08e3ae6B3Cd898407dEfCF1de469783", "mailbox": "0xb129828B9EDa48192D0B2db35D0E40dCF51B3594", "merkleTreeHook": "0x3E969bA938E6A993eeCD6F65b0dd8712B07dFe59", "pausableHook": "0x6Fb36672365C7c797028C400A61c58c0ECc53cD2", @@ -4215,7 +4215,7 @@ "interchainAccountIsm": "0x6119B76720CcfeB3D256EC1b91218EEfFD6756E1", "interchainAccountRouter": "0x9eaaC366BFD70430cFee6E70265fefFf1CfC9E47", "interchainGasPaymaster": "0x18B0688990720103dB63559a3563f7E8d0f63EDb", - "interchainSecurityModule": "0x70196Ec5e193dC07CFDC7AeC583DF9aeC20f4939", + "interchainSecurityModule": "0x03426Cf05E862B4702391Ff7E005E7cDB71cC789", "mailbox": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39", "merkleTreeHook": "0x886BB0f329781b98f98FDeb1ce7a8957F2d43B9F", "pausableHook": "0x2F619Ac5122689180AeBB930ADccdae215d538a9", @@ -4279,7 +4279,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0x8FBFF0cF2920c4deFfd8EAE6a51BB55E1d40eFFc", + "interchainSecurityModule": "0xD70e68A8CBEff2349b3F0455B45d58D555256633", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4340,7 +4340,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0xCC95B2978F65B2f358dD4A8B428Dd442AB37f478", + "interchainSecurityModule": "0xD91a9416ffd488eEfFD8F3E1dF884d54eaD87673", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4419,7 +4419,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0xeD0fc456143f761614478D170bf12403638DDa1e", + "interchainSecurityModule": "0xC601666Ca22649b20d642c0eb36047d265928D04", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4486,7 +4486,7 @@ "interchainAccountIsm": "0x783EC5e105234a570eB90f314284E5dBe53bdd90", "interchainAccountRouter": "0xc5D6aCaafBCcEC6D7fD7d92F4509befce641c563", "interchainGasPaymaster": "0xf3dFf6747E7FC74B431C943961054B7BF6309d8a", - "interchainSecurityModule": "0xFbDfEE404a9DFA413fF8B587aDad4B7979Db28a0", + "interchainSecurityModule": "0x1738cd8652a324DD9781D5Ce0f609827761D48dA", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x5090dF2FBDa7127c7aDa41f60B79F5c55D380Dd8", "pausableHook": "0x886BB0f329781b98f98FDeb1ce7a8957F2d43B9F", @@ -4557,7 +4557,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0x2D92EeB56FbEB258d918485200aC1C2e010547b8", + "interchainSecurityModule": "0x9e92E451b71378aBf1cd4769f34528af9C0e97Fd", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4622,7 +4622,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0xCC95B2978F65B2f358dD4A8B428Dd442AB37f478", + "interchainSecurityModule": "0xD91a9416ffd488eEfFD8F3E1dF884d54eaD87673", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4686,7 +4686,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0x8FBFF0cF2920c4deFfd8EAE6a51BB55E1d40eFFc", + "interchainSecurityModule": "0x330063B36D40D1d77DBAd7e9552b97433f281090", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4753,7 +4753,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0x8FBFF0cF2920c4deFfd8EAE6a51BB55E1d40eFFc", + "interchainSecurityModule": "0xD70e68A8CBEff2349b3F0455B45d58D555256633", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4817,7 +4817,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0xC7a2a8103dF4bdE8c78C2C5C03389ee9337A9942", + "interchainSecurityModule": "0x0197F4a7ED6db49Ad345214C710206aCfFBA241a", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4842,7 +4842,7 @@ "zeronetwork": { "blockExplorers": [ { - "apiUrl": "https://zero-network-api.calderaexplorer.xyz/api", + "apiUrl": "https://zero-network.calderaexplorer.xyz/verification/contract_verification", "family": "etherscan", "name": "Zero Network Explorer", "url": "https://zerion-explorer.vercel.app" @@ -4894,19 +4894,20 @@ "validatorAnnounce": "0xB2F0e411B46AbE3248dAFB5e89aDB5b8404F45DF", "index": { "from": 475 - } + }, + "gnosisSafeTransactionServiceUrl": "https://prod.zeronet-mainnet.transaction.keypersafe.xyz" }, "zksync": { "blockExplorers": [ { - "apiUrl": "https://block-explorer-api.mainnet.zksync.io/api", + "apiUrl": "https://zksync2-mainnet-explorer.zksync.io/contract_verification", "family": "etherscan", "name": "zkSync Explorer", "url": "https://explorer.zksync.io" } ], "blocks": { - "confirmations": 2, + "confirmations": 1, "estimateBlockTime": 1, "reorgPeriod": 0 }, @@ -5002,7 +5003,7 @@ "interchainAccountIsm": "0x4d264424905535E97396Db83bd553D0d73A4EF9d", "interchainAccountRouter": "0x26A29486480BD74f9B830a9B8dB33cb43C40f496", "interchainGasPaymaster": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", - "interchainSecurityModule": "0x3c23D983112Ab87662A1227678ba1f3483E03dFe", + "interchainSecurityModule": "0x28Ce6b8aB49e37f2B386056bB7D9779Ecc89f4EE", "mailbox": "0x5bdADEAD721Eb4C4038fF7c989E3C7BbBA302435", "merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645", "pausableHook": "0xC8E323036AAFB4B4201e7B640E79C4Db285A3FC8", @@ -5066,7 +5067,7 @@ "interchainAccountIsm": "0x545E289B88c6d97b74eC0B96e308cae46Bf5f832", "interchainAccountRouter": "0x4ef363Da5bb09CC6aeA16973786963d0C8820778", "interchainGasPaymaster": "0x561BcA8D862536CD9C88f332C1A1Da0fC8F96e40", - "interchainSecurityModule": "0xfE0c963aDF971956BbeD320995d6b34db087C0A4", + "interchainSecurityModule": "0x5Cd2d33b51b3394A14C11ea79E5E0Ba6bCC81e83", "mailbox": "0x248aDe14C0489E20C9a7Fea5F86DBfC3702208eF", "merkleTreeHook": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", "pausableHook": "0x2f536FB7a37bd817Af644072a904Ddc02Dae429f", @@ -5133,7 +5134,7 @@ "interchainAccountIsm": "0x60bB6D060393D3C206719A7bD61844cC82891cfB", "interchainAccountRouter": "0x9534122Aae7978dB8f5f10dF4432233c53e820A1", "interchainGasPaymaster": "0x61374178e45F65fF9D6252d017Cd580FC60B7654", - "interchainSecurityModule": "0x7c6A51101Ba76EC1f358C11d349fbEd9486B62Ee", + "interchainSecurityModule": "0xE97f143373BA2f424a67FC3fc5cf7EfE2095aF0A", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0xEe08043cf22c80b27BF24d19999231dF4a3fC256", "pausableHook": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", @@ -5198,7 +5199,7 @@ "interchainAccountIsm": "0xcdc31BA959DE8C035A03167ebAE1961208CDf172", "interchainAccountRouter": "0x349831a180eE4265008C5FFB9465Ff97c1CF0028", "interchainGasPaymaster": "0x6AA10748a036a49Cb290C0e12B77319b76792D5E", - "interchainSecurityModule": "0x806342559EBD943f259cFCf606aad7c50DE81f42", + "interchainSecurityModule": "0xBB7E1A95C63cc745b6e51127d04e9a957966591e", "mailbox": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", "merkleTreeHook": "0x2783D98CC073dbcDa90241C804d16982D3d75821", "pausableHook": "0x3bb2D0a828f7dD91bA786091F421f6d7cF376445", @@ -5268,7 +5269,7 @@ "interchainAccountIsm": "0x545E289B88c6d97b74eC0B96e308cae46Bf5f832", "interchainAccountRouter": "0x4ef363Da5bb09CC6aeA16973786963d0C8820778", "interchainGasPaymaster": "0xc6835e52C1b976F1ebC71Bc8919738E02849FdA9", - "interchainSecurityModule": "0x1941d3fA81a868e401a0C8E0a1443d59D3Ec04Fe", + "interchainSecurityModule": "0xc622B32Da6Bc983B7aE6Ea7253D39396512e5F70", "mailbox": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", "merkleTreeHook": "0xdAa1B65547fB969c9ff5678956AB2FF9771B883D", "pausableHook": "0xA0e0829DA397CcF55d5B779C31728f21Cb8219DF", @@ -5380,7 +5381,7 @@ "interchainAccountIsm": "0x8c794a781327b819416E7b67908f1D22397f1E67", "interchainAccountRouter": "0x16625230dD6cFe1B2bec3eCaEc7d43bA3A902CD6", "interchainGasPaymaster": "0x2b79328DA089E89A9E9c08732b56dd31F01011Db", - "interchainSecurityModule": "0xe05Bac82CeC0Ee8c66a29E37108E319A3B993539", + "interchainSecurityModule": "0xFdd7f8b8CBe3612609Fe5bf0332B280182dcB74F", "mailbox": "0x730f8a4128Fa8c53C777B62Baa1abeF94cAd34a9", "merkleTreeHook": "0x9c64f327F0140DeBd430aab3E2F1d6cbcA921227", "pausableHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645", @@ -5444,7 +5445,7 @@ "interchainAccountIsm": "0xE67Dc24970B482579923551Ede52BD35a2858989", "interchainAccountRouter": "0xDDE46032Baf4da13fDD79BF9dfbaA2749615C409", "interchainGasPaymaster": "0x2f536FB7a37bd817Af644072a904Ddc02Dae429f", - "interchainSecurityModule": "0x848A33eE97898B1Dbd11DaCd0ff9101c71C4fabA", + "interchainSecurityModule": "0xcCe65dffEc65798B986969EE9A490AC096d0E54e", "mailbox": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", "merkleTreeHook": "0xC8E323036AAFB4B4201e7B640E79C4Db285A3FC8", "pausableHook": "0xdAa1B65547fB969c9ff5678956AB2FF9771B883D", @@ -5508,7 +5509,7 @@ "interchainAccountIsm": "0x20a0A32a110362920597F72974E1E0d7e25cA20a", "interchainAccountRouter": "0x5b3EeADcc0E2d4284eA6816e2E503c24d30a9E54", "interchainGasPaymaster": "0x282629Af1A2f9b8e2c5Cbc54C35C7989f21950c6", - "interchainSecurityModule": "0x9A1b90A6c7b2835A895bAD9072e0fBdbb225baC0", + "interchainSecurityModule": "0x7B891Aec2e7edA0215Be884f2396615a231A1502", "mailbox": "0x5C02157068a52cEcfc98EDb6115DE6134EcB4764", "merkleTreeHook": "0xf147bBD944C610F86DaE6C7668497D22932C1E4A", "pausableHook": "0x872Bd98057931c8809927c6dE2ef39738a80Eb0C", @@ -5575,7 +5576,7 @@ "interchainAccountIsm": "0xf40eE9FF75Fa34910b7C4C8d68d4850B3bD184D3", "interchainAccountRouter": "0xf6fB78dc009C1A4286c0E7d90C10c9E8906a62Ea", "interchainGasPaymaster": "0xDDE46032Baf4da13fDD79BF9dfbaA2749615C409", - "interchainSecurityModule": "0x72AafB2129B3cCCc9A89A1EEdCdF50D1Ccb4a3C8", + "interchainSecurityModule": "0xc09E4b2C7b3884609dded73571a27B8F6D05aA66", "mailbox": "0x65dCf8F6b3f6a0ECEdf3d0bdCB036AEa47A1d615", "merkleTreeHook": "0x8c794a781327b819416E7b67908f1D22397f1E67", "pausableHook": "0x4d264424905535E97396Db83bd553D0d73A4EF9d", @@ -5642,7 +5643,7 @@ "interchainAccountIsm": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", "interchainAccountRouter": "0x7279B1e11142078b8dC9e69620200f4C84FB8aaa", "interchainGasPaymaster": "0x5ae1ECA065aC8ee92Ce98E584fc3CE43070020e7", - "interchainSecurityModule": "0xE5bdba0070d0665F5f61847277b201bD29113347", + "interchainSecurityModule": "0xE367092A59d558a9Ee8894D12f4Fa363A168870e", "mailbox": "0x96D51cc3f7500d501bAeB1A2a62BB96fa03532F8", "merkleTreeHook": "0x086c3947F71BE98A0bDf4AB7239955e7542b0CbA", "pausableHook": "0x9C6e8d989ea7F212e679191BEb44139d83ac927a", @@ -5712,7 +5713,7 @@ "interchainAccountIsm": "0x8a733038eF4BbC314eE0F7595257D8d3799B6aA9", "interchainAccountRouter": "0xCE8260c1b5cF2fAD15bb4B6542716b050Fdf35c9", "interchainGasPaymaster": "0xa1c3884EbE24Cccb120B2E98a55f85140563aa4C", - "interchainSecurityModule": "0x0CFf4d26bF35E69DcdE55B161952656E40028a18", + "interchainSecurityModule": "0x5D26b61F665FabFF52D6f5260072dc20BC9b0652", "mailbox": "0x5e8a0fCc0D1DF583322943e01F02cB243e5300f6", "merkleTreeHook": "0x2f536FB7a37bd817Af644072a904Ddc02Dae429f", "pausableHook": "0xc6835e52C1b976F1ebC71Bc8919738E02849FdA9", diff --git a/rust/main/hyperlane-base/src/metrics/agent_metrics.rs b/rust/main/hyperlane-base/src/metrics/agent_metrics.rs index 16fd8fb9f9..ad1320488f 100644 --- a/rust/main/hyperlane-base/src/metrics/agent_metrics.rs +++ b/rust/main/hyperlane-base/src/metrics/agent_metrics.rs @@ -214,7 +214,7 @@ impl MetricsUpdater { let chain_metrics = match self.provider.get_chain_metrics().await { Ok(Some(chain_metrics)) => chain_metrics, Err(err) => { - trace!(chain, ?err, "Failed to get chain metrics"); + warn!(chain, ?err, "Failed to get chain metrics"); return; } _ => { diff --git a/typescript/infra/config/environments/mainnet3/owners.ts b/typescript/infra/config/environments/mainnet3/owners.ts index f97eafe171..5fa21d9b65 100644 --- a/typescript/infra/config/environments/mainnet3/owners.ts +++ b/typescript/infra/config/environments/mainnet3/owners.ts @@ -193,7 +193,8 @@ export const chainOwners: ChainMap = { owner: 'BNGDJ1h9brgt6FFVd8No1TVAH48Fp44d7jkuydr1URwJ', }, eclipsemainnet: { - owner: 'B32qTbw8iDcVdagMAMBfDFCef88N1KtfRG5QoPVzbj5K', + // Squads multisig + owner: 'E4TncCw3WMqQZbkACVcomX3HqcSzLfNyhTnqKN1DimGr', }, injective: { // Native multisig diff --git a/typescript/infra/src/warp/helm.ts b/typescript/infra/src/warp/helm.ts index 019e9b5b27..02b8d9dc99 100644 --- a/typescript/infra/src/warp/helm.ts +++ b/typescript/infra/src/warp/helm.ts @@ -22,7 +22,7 @@ export class WarpRouteMonitorHelmManager extends HelmManager { return { image: { repository: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '91aaa4a-20241108-204429', + tag: '6cd61f1-20241112-111341', }, warpRouteId: this.warpRouteId, fullnameOverride: this.helmReleaseName, diff --git a/typescript/utils/src/async.test.ts b/typescript/utils/src/async.test.ts index 004abb1d18..74a830c0cd 100644 --- a/typescript/utils/src/async.test.ts +++ b/typescript/utils/src/async.test.ts @@ -17,7 +17,7 @@ describe('Async Utilities', () => { const start = Date.now(); await sleep(100); const duration = Date.now() - start; - expect(duration).to.be.at.least(100); + expect(duration).to.be.at.least(95); expect(duration).to.be.lessThan(200); }); }); From 5db46bd315de02f1c7514aeee24aec349b6b8f80 Mon Sep 17 00:00:00 2001 From: Yorke Rhodes Date: Tue, 12 Nov 2024 17:14:49 -0500 Subject: [PATCH 5/7] feat: persistent ts relayer (#4831) ### Description - Adjust long running TS relayer with retry queue instead of crashing. - Adds a "whitelist" for relaying to specific message senders/recipients. - Adds a "symbol" flag borrowed from warp commands for filtering on a specific warp route. ### Drive-by changes None ### Related issues - Enables warp route deployer to run the CLI relayer in the background and test/share the warp UI. ### Backward compatibility Yes ### Testing CLI e2e tests --- .changeset/real-phones-bake.md | 7 + typescript/cli/scripts/run-e2e-test.sh | 3 +- typescript/cli/src/commands/relayer.ts | 81 +++++++- typescript/cli/src/commands/signCommands.ts | 2 +- typescript/cli/src/tests/commands/helpers.ts | 25 +++ typescript/cli/src/tests/commands/warp.ts | 3 +- typescript/cli/src/tests/relay.e2e-test.ts | 82 ++++++++ typescript/cli/src/utils/relay.ts | 1 + typescript/infra/scripts/relay.ts | 11 +- typescript/sdk/src/core/HyperlaneCore.ts | 13 +- typescript/sdk/src/core/HyperlaneRelayer.ts | 200 +++++++++++++++---- 11 files changed, 363 insertions(+), 65 deletions(-) create mode 100644 .changeset/real-phones-bake.md create mode 100644 typescript/cli/src/tests/relay.e2e-test.ts diff --git a/.changeset/real-phones-bake.md b/.changeset/real-phones-bake.md new file mode 100644 index 0000000000..589c4e012f --- /dev/null +++ b/.changeset/real-phones-bake.md @@ -0,0 +1,7 @@ +--- +'@hyperlane-xyz/infra': minor +'@hyperlane-xyz/cli': minor +'@hyperlane-xyz/sdk': minor +--- + +Implements persistent relayer for use in CLI diff --git a/typescript/cli/scripts/run-e2e-test.sh b/typescript/cli/scripts/run-e2e-test.sh index e398253b2e..bfa89a0b31 100755 --- a/typescript/cli/scripts/run-e2e-test.sh +++ b/typescript/cli/scripts/run-e2e-test.sh @@ -3,8 +3,7 @@ function cleanup() { set +e pkill -f anvil - rm -rf /tmp/anvil2 - rm -rf /tmp/anvil3 + rm -rf ./tmp rm -f ./test-configs/anvil/chains/anvil2/addresses.yaml rm -f ./test-configs/anvil/chains/anvil3/addresses.yaml set -e diff --git a/typescript/cli/src/commands/relayer.ts b/typescript/cli/src/commands/relayer.ts index de7ae18e1e..0d7672e734 100644 --- a/typescript/cli/src/commands/relayer.ts +++ b/typescript/cli/src/commands/relayer.ts @@ -1,35 +1,94 @@ -import { HyperlaneCore, HyperlaneRelayer } from '@hyperlane-xyz/sdk'; +import { + ChainMap, + HyperlaneCore, + HyperlaneRelayer, + RelayerCacheSchema, +} from '@hyperlane-xyz/sdk'; +import { Address } from '@hyperlane-xyz/utils'; import { CommandModuleWithContext } from '../context/types.js'; import { log } from '../logger.js'; +import { tryReadJson, writeJson } from '../utils/files.js'; +import { getWarpCoreConfigOrExit } from '../utils/input.js'; -import { agentTargetsCommandOption } from './options.js'; +import { + agentTargetsCommandOption, + overrideRegistryUriCommandOption, + symbolCommandOption, + warpCoreConfigCommandOption, +} from './options.js'; import { MessageOptionsArgTypes } from './send.js'; +const DEFAULT_RELAYER_CACHE = `${overrideRegistryUriCommandOption.default}/relayer-cache.json`; + export const relayerCommand: CommandModuleWithContext< - MessageOptionsArgTypes & { chains?: string } + MessageOptionsArgTypes & { + chains?: string; + cache: string; + symbol?: string; + warp?: string; + } > = { command: 'relayer', - describe: 'Run a Hyperlane message self-relayer', + describe: 'Run a Hyperlane message relayer', builder: { chains: agentTargetsCommandOption, + cache: { + describe: 'Path to relayer cache file', + type: 'string', + default: DEFAULT_RELAYER_CACHE, + }, + symbol: symbolCommandOption, + warp: warpCoreConfigCommandOption, }, - handler: async ({ context, chains }) => { - const chainsArray = chains - ? chains.split(',').map((_) => _.trim()) - : undefined; + handler: async ({ context, cache, chains, symbol, warp }) => { const chainAddresses = await context.registry.getAddresses(); const core = HyperlaneCore.fromAddressesMap( chainAddresses, context.multiProvider, ); - const relayer = new HyperlaneRelayer({ core }); + const chainsArray = + chains?.split(',').map((_) => _.trim()) ?? Object.keys(chainAddresses); + + const whitelist: ChainMap = Object.fromEntries( + chainsArray.map((chain) => [chain, []]), + ); + + // add warp route addresses to whitelist + if (symbol || warp) { + const warpRoute = await getWarpCoreConfigOrExit({ + context, + symbol, + warp, + }); + warpRoute.tokens.forEach( + ({ chainName, addressOrDenom }) => + (whitelist[chainName] = [addressOrDenom!]), + ); + } + + const relayer = new HyperlaneRelayer({ core, whitelist }); + // TODO: fix merkle hook stubbing + + const jsonCache = tryReadJson(cache); + if (jsonCache) { + try { + const parsedCache = RelayerCacheSchema.parse(jsonCache); + relayer.hydrate(parsedCache); + } catch (error) { + log(`Error hydrating cache: ${error}`); + } + } + log('Starting relayer ...'); - relayer.start(chainsArray); + relayer.start(); + process.once('SIGINT', () => { - relayer.stop(chainsArray); log('Stopping relayer ...'); + relayer.stop(); + + writeJson(cache, relayer.cache); process.exit(0); }); }, diff --git a/typescript/cli/src/commands/signCommands.ts b/typescript/cli/src/commands/signCommands.ts index 79c243ca6f..37d83096a0 100644 --- a/typescript/cli/src/commands/signCommands.ts +++ b/typescript/cli/src/commands/signCommands.ts @@ -1,7 +1,7 @@ // Commands that send tx and require a key to sign. // It's useful to have this listed here so the context // middleware can request keys up front when required. -export const SIGN_COMMANDS = ['deploy', 'send', 'status', 'submit']; +export const SIGN_COMMANDS = ['deploy', 'send', 'status', 'submit', 'relayer']; export function isSignCommand(argv: any): boolean { return ( diff --git a/typescript/cli/src/tests/commands/helpers.ts b/typescript/cli/src/tests/commands/helpers.ts index 6dd76969f2..8cb6be0278 100644 --- a/typescript/cli/src/tests/commands/helpers.ts +++ b/typescript/cli/src/tests/commands/helpers.ts @@ -1,3 +1,5 @@ +import { $ } from 'zx'; + import { ERC20Test__factory, ERC4626Test__factory } from '@hyperlane-xyz/core'; import { ChainAddresses } from '@hyperlane-xyz/registry'; import { @@ -183,3 +185,26 @@ export async function sendWarpRouteMessageRoundTrip( await hyperlaneWarpSendRelay(chain1, chain2, warpCoreConfigPath); return hyperlaneWarpSendRelay(chain2, chain1, warpCoreConfigPath); } + +export async function hyperlaneSendMessage( + origin: string, + destination: string, +) { + return $`yarn workspace @hyperlane-xyz/cli run hyperlane send message \ + --registry ${REGISTRY_PATH} \ + --origin ${origin} \ + --destination ${destination} \ + --key ${ANVIL_KEY} \ + --verbosity debug \ + --yes`; +} + +export function hyperlaneRelayer(chains: string[], warp?: string) { + return $`yarn workspace @hyperlane-xyz/cli run hyperlane relayer \ + --registry ${REGISTRY_PATH} \ + --chains ${chains.join(',')} \ + --warp ${warp ?? ''} \ + --key ${ANVIL_KEY} \ + --verbosity debug \ + --yes`; +} diff --git a/typescript/cli/src/tests/commands/warp.ts b/typescript/cli/src/tests/commands/warp.ts index 3f3eec3386..dc80b6ad24 100644 --- a/typescript/cli/src/tests/commands/warp.ts +++ b/typescript/cli/src/tests/commands/warp.ts @@ -60,9 +60,10 @@ export async function hyperlaneWarpSendRelay( origin: string, destination: string, warpCorePath: string, + relay = true, ) { return $`yarn workspace @hyperlane-xyz/cli run hyperlane warp send \ - --relay \ + ${relay ? '--relay' : ''} \ --registry ${REGISTRY_PATH} \ --overrides " " \ --origin ${origin} \ diff --git a/typescript/cli/src/tests/relay.e2e-test.ts b/typescript/cli/src/tests/relay.e2e-test.ts new file mode 100644 index 0000000000..3f970eed79 --- /dev/null +++ b/typescript/cli/src/tests/relay.e2e-test.ts @@ -0,0 +1,82 @@ +import { TokenType } from '@hyperlane-xyz/sdk'; + +import { writeYamlOrJson } from '../utils/files.js'; + +import { hyperlaneCoreDeploy } from './commands/core.js'; +import { + REGISTRY_PATH, + hyperlaneRelayer, + hyperlaneSendMessage, +} from './commands/helpers.js'; +import { + hyperlaneWarpDeploy, + hyperlaneWarpSendRelay, +} from './commands/warp.js'; + +const CHAIN_NAME_1 = 'anvil2'; +const CHAIN_NAME_2 = 'anvil3'; + +const SYMBOL = 'ETH'; + +const WARP_DEPLOY_OUTPUT = `${REGISTRY_PATH}/deployments/warp_routes/${SYMBOL}/${CHAIN_NAME_1}-${CHAIN_NAME_2}-config.yaml`; + +const EXAMPLES_PATH = './examples'; +const CORE_CONFIG_PATH = `${EXAMPLES_PATH}/core-config.yaml`; + +const TEST_TIMEOUT = 100_000; // Long timeout since these tests can take a while +describe('hyperlane relayer e2e tests', async function () { + this.timeout(TEST_TIMEOUT); + + before(async () => { + await hyperlaneCoreDeploy(CHAIN_NAME_1, CORE_CONFIG_PATH); + await hyperlaneCoreDeploy(CHAIN_NAME_2, CORE_CONFIG_PATH); + + const warpConfig = { + anvil2: { + type: TokenType.native, + symbol: SYMBOL, + }, + anvil3: { + type: TokenType.synthetic, + symbol: SYMBOL, + }, + }; + + const warpConfigPath = './tmp/warp-route-config.yaml'; + writeYamlOrJson(warpConfigPath, warpConfig); + await hyperlaneWarpDeploy(warpConfigPath); + }); + + describe('relayer', () => { + it('should relay core messages', async () => { + const process = hyperlaneRelayer([CHAIN_NAME_1, CHAIN_NAME_2]); + + await hyperlaneSendMessage(CHAIN_NAME_1, CHAIN_NAME_2); + await hyperlaneSendMessage(CHAIN_NAME_2, CHAIN_NAME_1); + + await process.kill('SIGINT'); + }); + + it('should relay warp messages', async () => { + const process = hyperlaneRelayer( + [CHAIN_NAME_1, CHAIN_NAME_2], + WARP_DEPLOY_OUTPUT, + ); + + await hyperlaneWarpSendRelay( + CHAIN_NAME_1, + CHAIN_NAME_2, + WARP_DEPLOY_OUTPUT, + false, + ); + await hyperlaneWarpSendRelay( + CHAIN_NAME_2, + CHAIN_NAME_1, + WARP_DEPLOY_OUTPUT, + false, + ); + + await process.kill('SIGINT'); + }); + }); +}); diff --git a/typescript/cli/src/utils/relay.ts b/typescript/cli/src/utils/relay.ts index 51ea7bc15b..24bdc96fca 100644 --- a/typescript/cli/src/utils/relay.ts +++ b/typescript/cli/src/utils/relay.ts @@ -19,5 +19,6 @@ export function stubMerkleTreeConfig( }, }, ism: {}, + backlog: [], }); } diff --git a/typescript/infra/scripts/relay.ts b/typescript/infra/scripts/relay.ts index ddfbad99df..e689146d8f 100644 --- a/typescript/infra/scripts/relay.ts +++ b/typescript/infra/scripts/relay.ts @@ -10,11 +10,10 @@ const CACHE_PATH = process.env.RELAYER_CACHE ?? './relayer-cache.json'; async function main() { const { environment } = await getArgs().argv; const { core } = await getHyperlaneCore(environment); - const relayer = new HyperlaneRelayer({ core }); - // target subset of chains - // const chains = ['ethereum', 'polygon', 'bsc'] - const chains = undefined; + // target subset of chains and senders/recipients + const whitelist = undefined; + const relayer = new HyperlaneRelayer({ core, whitelist }); try { const contents = await readFile(CACHE_PATH, 'utf-8'); @@ -26,10 +25,10 @@ async function main() { console.error(`Failed to load cache from ${CACHE_PATH}`); } - relayer.start(chains); + relayer.start(); process.once('SIGINT', async () => { - relayer.stop(chains); + relayer.stop(); const cache = JSON.stringify(relayer.cache); await writeFile(CACHE_PATH, cache, 'utf-8'); diff --git a/typescript/sdk/src/core/HyperlaneCore.ts b/typescript/sdk/src/core/HyperlaneCore.ts index 8b1425d102..a3f82e36d1 100644 --- a/typescript/sdk/src/core/HyperlaneCore.ts +++ b/typescript/sdk/src/core/HyperlaneCore.ts @@ -204,9 +204,16 @@ export class HyperlaneCore extends HyperlaneApp { mailbox.on( mailbox.filters.Dispatch(), (_sender, _destination, _recipient, message, event) => { - const parsed = HyperlaneCore.parseDispatchedMessage(message); - this.logger.info(`Observed message ${parsed.id} on ${originChain}`); - return handler(parsed, event); + const dispatched = HyperlaneCore.parseDispatchedMessage(message); + + // add human readable chain names + dispatched.parsed.originChain = this.getOrigin(dispatched); + dispatched.parsed.destinationChain = this.getDestination(dispatched); + + this.logger.info( + `Observed message ${dispatched.id} on ${originChain} to ${dispatched.parsed.destinationChain}`, + ); + return handler(dispatched, event); }, ); }); diff --git a/typescript/sdk/src/core/HyperlaneRelayer.ts b/typescript/sdk/src/core/HyperlaneRelayer.ts index cb0ba570e9..0a1a451ebf 100644 --- a/typescript/sdk/src/core/HyperlaneRelayer.ts +++ b/typescript/sdk/src/core/HyperlaneRelayer.ts @@ -2,13 +2,18 @@ import { ethers, providers } from 'ethers'; import { Logger } from 'pino'; import { z } from 'zod'; +import { ChainMap } from '@hyperlane-xyz/sdk'; import { Address, + ParsedMessage, assert, + bytes32ToAddress, + messageId, objMap, objMerge, - pollAsync, + parseMessage, promiseObjAll, + sleep, } from '@hyperlane-xyz/utils'; import { DerivedHookConfig, EvmHookReader } from '../hook/EvmHookReader.js'; @@ -31,19 +36,64 @@ const DerivedHookConfigWithAddressSchema = const DerivedIsmConfigWithAddressSchema = IsmConfigSchema.and(WithAddressSchema); +const BacklogMessageSchema = z.object({ + attempts: z.number(), + lastAttempt: z.number(), + message: z.string(), + dispatchTx: z.string(), +}); + +const MessageBacklogSchema = z.array(BacklogMessageSchema); + export const RelayerCacheSchema = z.object({ hook: z.record(z.record(DerivedHookConfigWithAddressSchema)), ism: z.record(z.record(DerivedIsmConfigWithAddressSchema)), + backlog: MessageBacklogSchema, }); type RelayerCache = z.infer; +type MessageWhitelist = ChainMap>; + +// message must have origin and destination chains in the whitelist +// if whitelist has non-empty address set for chain, message must have sender and recipient in the set +export function messageMatchesWhitelist( + whitelist: MessageWhitelist, + message: ParsedMessage, +): boolean { + const originAddresses = whitelist[message.originChain ?? message.origin]; + if (!originAddresses) { + return false; + } + + const sender = bytes32ToAddress(message.sender); + if (originAddresses.size !== 0 && !originAddresses.has(sender)) { + return false; + } + + const destinationAddresses = + whitelist[message.destinationChain ?? message.destination]; + if (!destinationAddresses) { + return false; + } + + const recipient = bytes32ToAddress(message.recipient); + if (destinationAddresses.size !== 0 && !destinationAddresses.has(recipient)) { + return false; + } + + return true; +} + export class HyperlaneRelayer { protected multiProvider: MultiProvider; protected metadataBuilder: BaseMetadataBuilder; protected readonly core: HyperlaneCore; protected readonly retryTimeout: number; + protected readonly whitelist: ChainMap> | undefined; + + public backlog: RelayerCache['backlog']; public cache: RelayerCache | undefined; protected stopRelayingHandler: ((chains?: ChainName[]) => void) | undefined; @@ -53,21 +103,32 @@ export class HyperlaneRelayer { constructor({ core, caching = true, - retryTimeout = 5 * 1000, + retryTimeout = 1000, + whitelist = undefined, }: { core: HyperlaneCore; caching?: boolean; retryTimeout?: number; + whitelist?: ChainMap; }) { this.core = core; this.retryTimeout = retryTimeout; this.logger = core.logger.child({ module: 'Relayer' }); this.metadataBuilder = new BaseMetadataBuilder(core); this.multiProvider = core.multiProvider; + if (whitelist) { + this.whitelist = objMap( + whitelist, + (_chain, addresses) => new Set(addresses), + ); + } + + this.backlog = []; if (caching) { this.cache = { hook: {}, ism: {}, + backlog: [], }; } } @@ -152,11 +213,24 @@ export class HyperlaneRelayer { messageIndex = 0, message = HyperlaneCore.getDispatchedMessages(dispatchTx)[messageIndex], ): Promise { + if (this.whitelist) { + // add human readable names for use in whitelist checks + message.parsed = { + originChain: this.core.getOrigin(message), + destinationChain: this.core.getDestination(message), + ...message.parsed, + }; + assert( + messageMatchesWhitelist(this.whitelist, message.parsed), + `Message ${message.id} does not match whitelist`, + ); + } + this.logger.info(`Preparing to relay message ${message.id}`); const isDelivered = await this.core.isDelivered(message); if (isDelivered) { - this.logger.debug(`Message ${message.id} already delivered`); + this.logger.info(`Message ${message.id} already delivered`); return this.core.getProcessedReceipt(message); } @@ -170,18 +244,14 @@ export class HyperlaneRelayer { ]); this.logger.debug({ ism, hook }, `Retrieved ISM and hook configs`); - const blockTime = this.multiProvider.getChainMetadata( - message.parsed.destination, - ).blocks?.estimateBlockTime; - const waitTime = blockTime ? blockTime * 2 : this.retryTimeout; - - const metadata = await pollAsync( - () => this.metadataBuilder.build({ message, ism, hook, dispatchTx }), - waitTime, - 12, // 12 attempts - ); + const metadata = await this.metadataBuilder.build({ + message, + ism, + hook, + dispatchTx, + }); - this.logger.info({ message, metadata }, `Relaying message ${message.id}`); + this.logger.info(`Relaying message ${message.id}`); return this.core.deliver(message, metadata); } @@ -206,44 +276,92 @@ export class HyperlaneRelayer { ); } - start(chains = this.core.chains()): void { - assert(!this.stopRelayingHandler, 'Relayer already started'); + protected async flushBacklog(): Promise { + while (this.stopRelayingHandler) { + const backlogMsg = this.backlog.shift(); - const { removeHandler } = this.core.onDispatch(async (message, event) => { - const destination = message.parsed.destination; - const chain = this.multiProvider.tryGetChainName(destination); - if (!chain) { - this.logger.warn(`Unknown destination ${destination}`); - return; + if (!backlogMsg) { + this.logger.trace('Backlog empty, waiting 1s'); + await sleep(1000); + continue; } - if (!chains.includes(chain)) { - this.logger.info(`Skipping message to chain ${chain}`); - return; + // linear backoff (attempts * retryTimeout) + if ( + Date.now() < + backlogMsg.lastAttempt + backlogMsg.attempts * this.retryTimeout + ) { + this.backlog.push(backlogMsg); + continue; } - const dispatchReceipt = await event.getTransactionReceipt(); - const processReceipt = await this.relayMessage( - dispatchReceipt, - undefined, - message, - ); + const { message, dispatchTx, attempts } = backlogMsg; + const id = messageId(message); + const parsed = parseMessage(message); + const dispatchMsg = { id, message, parsed }; + + try { + const dispatchReceipt = await this.multiProvider + .getProvider(parsed.origin) + .getTransactionReceipt(dispatchTx); + + // TODO: handle batching + await this.relayMessage(dispatchReceipt, undefined, dispatchMsg); + } catch (error) { + this.logger.error( + `Failed to relay message ${id} (attempt #${attempts + 1})`, + ); + this.backlog.push({ + ...backlogMsg, + attempts: attempts + 1, + lastAttempt: Date.now(), + }); + } + } + } - this.logger.info( - `Message ${message.id} was processed in ${ - this.multiProvider.tryGetExplorerTxUrl(destination, { - hash: processReceipt.transactionHash, - }) ?? 'tx ' + processReceipt.transactionHash - }`, - ); - }, chains); + protected whitelistChains() { + return this.whitelist ? Object.keys(this.whitelist) : undefined; + } + + start(): void { + assert(!this.stopRelayingHandler, 'Relayer already started'); + + this.backlog = this.cache?.backlog ?? []; + + const { removeHandler } = this.core.onDispatch(async (message, event) => { + if ( + this.whitelist && + !messageMatchesWhitelist(this.whitelist, message.parsed) + ) { + this.logger.debug( + { message, whitelist: this.whitelist }, + `Skipping message ${message.id} not matching whitelist`, + ); + return; + } + + this.backlog.push({ + attempts: 0, + lastAttempt: Date.now(), + message: message.message, + dispatchTx: event.transactionHash, + }); + }, this.whitelistChains()); this.stopRelayingHandler = removeHandler; + + // start flushing backlog + void this.flushBacklog(); } - stop(chains = this.core.chains()): void { + stop(): void { assert(this.stopRelayingHandler, 'Relayer not started'); - this.stopRelayingHandler(chains); + this.stopRelayingHandler(this.whitelistChains()); this.stopRelayingHandler = undefined; + + if (this.cache) { + this.cache.backlog = this.backlog; + } } } From 3e72ef70b8204936d7b11e552041f6c1b3137438 Mon Sep 17 00:00:00 2001 From: Lee <6251863+ltyu@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:55:17 -0500 Subject: [PATCH 6/7] fix: Update MINIMUM_WARP_DEPLOY_GAS (#4853) ### Description Reduce by 30x Screenshot_2024-11-11_at_2 12 03_PM --- typescript/cli/src/consts.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/typescript/cli/src/consts.ts b/typescript/cli/src/consts.ts index 674f7dd15d..9fb27df9f2 100644 --- a/typescript/cli/src/consts.ts +++ b/typescript/cli/src/consts.ts @@ -1,5 +1,5 @@ export const MINIMUM_CORE_DEPLOY_GAS = (1e8).toString(); -export const MINIMUM_WARP_DEPLOY_GAS = (6e8).toString(); // Rough calculation through deployments to testnets with 2x buffer +export const MINIMUM_WARP_DEPLOY_GAS = (3e7).toString(); export const MINIMUM_TEST_SEND_GAS = (3e5).toString(); export const MINIMUM_AVS_GAS = (3e6).toString(); export const PROXY_DEPLOYED_URL = 'https://proxy.hyperlane.xyz'; From 186663505b1ec7e54d3ac510bab2403f5b7dc17e Mon Sep 17 00:00:00 2001 From: Jason Guo <33064781+Xaroz@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:33:29 -0400 Subject: [PATCH 7/7] chore(widgets): components update (#4852) ### Description - Added new icons - Updated Modal with new props - Fixed an issue where the close icon button was not absolute positioned to the correct container in the Modal ### Drive-by changes No ### Backward compatibility Yes ### Testing Tested in warp UI --- .changeset/rare-llamas-float.md | 7 ++++ typescript/widgets/src/icons/Ellipsis.tsx | 38 +++++++++++++++++++ typescript/widgets/src/icons/Logout.tsx | 29 ++++++++++++++ typescript/widgets/src/icons/Warning.tsx | 30 +++++++++++++++ typescript/widgets/src/index.ts | 3 ++ typescript/widgets/src/layout/Modal.tsx | 27 ++++++++----- .../widgets/src/stories/IconList.stories.tsx | 22 ++++++++++- .../widgets/src/stories/Modal.stories.tsx | 15 ++++++-- 8 files changed, 157 insertions(+), 14 deletions(-) create mode 100644 .changeset/rare-llamas-float.md create mode 100644 typescript/widgets/src/icons/Ellipsis.tsx create mode 100644 typescript/widgets/src/icons/Logout.tsx create mode 100644 typescript/widgets/src/icons/Warning.tsx diff --git a/.changeset/rare-llamas-float.md b/.changeset/rare-llamas-float.md new file mode 100644 index 0000000000..337cdd5ebc --- /dev/null +++ b/.changeset/rare-llamas-float.md @@ -0,0 +1,7 @@ +--- +'@hyperlane-xyz/widgets': minor +--- + +New Icons +Updated modal with new props +Updated storybook for modal and icon list diff --git a/typescript/widgets/src/icons/Ellipsis.tsx b/typescript/widgets/src/icons/Ellipsis.tsx new file mode 100644 index 0000000000..3301badfdb --- /dev/null +++ b/typescript/widgets/src/icons/Ellipsis.tsx @@ -0,0 +1,38 @@ +import React, { memo } from 'react'; + +import { ColorPalette } from '../color.js'; + +import { DefaultIconProps } from './types.js'; + +type Props = DefaultIconProps & { + direction?: 'horizontal' | 'vertical'; +}; + +function _EllipsisIcon({ + color = ColorPalette.Black, + width = 24, + height = 6, + direction = 'horizontal', + className, + ...rest +}: Props) { + return ( + + + + ); +} + +export const EllipsisIcon = memo(_EllipsisIcon); diff --git a/typescript/widgets/src/icons/Logout.tsx b/typescript/widgets/src/icons/Logout.tsx new file mode 100644 index 0000000000..4832f7c2a0 --- /dev/null +++ b/typescript/widgets/src/icons/Logout.tsx @@ -0,0 +1,29 @@ +import React, { memo } from 'react'; + +import { ColorPalette } from '../color.js'; + +import { DefaultIconProps } from './types.js'; + +function _LogoutIcon({ + color = ColorPalette.Black, + width = 48, + height = 48, + ...rest +}: DefaultIconProps) { + return ( + + + + ); +} + +export const LogoutIcon = memo(_LogoutIcon); diff --git a/typescript/widgets/src/icons/Warning.tsx b/typescript/widgets/src/icons/Warning.tsx new file mode 100644 index 0000000000..cc60aac5f7 --- /dev/null +++ b/typescript/widgets/src/icons/Warning.tsx @@ -0,0 +1,30 @@ +import React, { memo } from 'react'; + +import { ColorPalette } from '../color.js'; + +import { DefaultIconProps } from './types.js'; + +function _WarningIcon({ + color = ColorPalette.Black, + width = 18, + height = 16, + ...rest +}: DefaultIconProps) { + return ( + + + + ); +} + +export const WarningIcon = memo(_WarningIcon); diff --git a/typescript/widgets/src/index.ts b/typescript/widgets/src/index.ts index 0762ec9da0..33eea26eff 100644 --- a/typescript/widgets/src/index.ts +++ b/typescript/widgets/src/index.ts @@ -28,6 +28,7 @@ export { Circle } from './icons/Circle.js'; export { CopyIcon } from './icons/Copy.js'; export { DiscordIcon } from './icons/Discord.js'; export { DocsIcon } from './icons/Docs.js'; +export { EllipsisIcon } from './icons/Ellipsis.js'; export { EnvelopeIcon } from './icons/Envelope.js'; export { FilterIcon } from './icons/Filter.js'; export { FunnelIcon } from './icons/Funnel.js'; @@ -36,6 +37,7 @@ export { GithubIcon } from './icons/Github.js'; export { HistoryIcon } from './icons/History.js'; export { LinkedInIcon } from './icons/LinkedIn.js'; export { LockIcon } from './icons/Lock.js'; +export { LogoutIcon } from './icons/Logout.js'; export { MediumIcon } from './icons/Medium.js'; export { PencilIcon } from './icons/Pencil.js'; export { PlusIcon } from './icons/Plus.js'; @@ -48,6 +50,7 @@ export { SwapIcon } from './icons/Swap.js'; export { TwitterIcon } from './icons/Twitter.js'; export { UpDownArrowsIcon } from './icons/UpDownArrows.js'; export { WalletIcon } from './icons/Wallet.js'; +export { WarningIcon } from './icons/Warning.js'; export { WebIcon } from './icons/Web.js'; export { WideChevronIcon } from './icons/WideChevron.js'; export { XCircleIcon } from './icons/XCircle.js'; diff --git a/typescript/widgets/src/layout/Modal.tsx b/typescript/widgets/src/layout/Modal.tsx index 87c36e8318..bc0b872f01 100644 --- a/typescript/widgets/src/layout/Modal.tsx +++ b/typescript/widgets/src/layout/Modal.tsx @@ -1,9 +1,14 @@ -import { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react'; +import { + Dialog, + DialogBackdrop, + DialogPanel, + DialogTitle, +} from '@headlessui/react'; import clsx from 'clsx'; import React, { ComponentProps, PropsWithChildren, useState } from 'react'; import { IconButton } from '../components/IconButton.js'; -import { XIcon } from '../icons/X.js'; +import { XCircleIcon } from '../icons/XCircle.js'; export function useModal() { const [isOpen, setIsOpen] = useState(false); @@ -20,6 +25,7 @@ export type ModalProps = PropsWithChildren<{ panelClassname?: string; panelProps?: ComponentProps; showCloseButton?: boolean; + title?: string; }>; export function Modal({ @@ -30,30 +36,33 @@ export function Modal({ panelClassname, panelProps, showCloseButton, + title, children, }: ModalProps) { return ( - +
+ {title && ( + + {title} + + )} {children} {showCloseButton && (
@@ -62,7 +71,7 @@ export function Modal({ title="Close" className="hover:htw-rotate-90" > - +
)} diff --git a/typescript/widgets/src/stories/IconList.stories.tsx b/typescript/widgets/src/stories/IconList.stories.tsx index 9027956919..2a458c0c22 100644 --- a/typescript/widgets/src/stories/IconList.stories.tsx +++ b/typescript/widgets/src/stories/IconList.stories.tsx @@ -11,8 +11,12 @@ interface StoryIconProps { rounded?: boolean; } +const excludedComponents = ['IconButton', 'EllipsisIcon']; + const iconList = Object.entries(Hyperlane) - .filter(([name]) => name.includes('Icon') && !name.includes('IconButton')) + .filter( + ([name]) => name.includes('Icon') && !excludedComponents.includes(name), + ) .map(([_, Component]) => Component as React.ComponentType); function IconList({ @@ -22,6 +26,7 @@ function IconList({ direction, bgColorSeed, roundedWideChevron, + ellipsisDirection, }: { width: number; height: number; @@ -29,6 +34,7 @@ function IconList({ direction: 'n' | 'e' | 's' | 'w'; bgColorSeed: number | undefined; roundedWideChevron: boolean; + ellipsisDirection: 'vertical' | 'horizontal'; }) { return ( <> @@ -52,6 +58,15 @@ function IconList({ /> ))} + + EllipsisIcon + + Circle @@ -85,6 +100,10 @@ const meta = { options: ['n', 'e', 's', 'w'], control: { type: 'select' }, }, + ellipsisDirection: { + options: ['horizontal', 'vertical'], + control: { type: 'select' }, + }, }, } satisfies Meta; export default meta; @@ -98,5 +117,6 @@ export const DefaultIconList = { direction: 's', bgColorSeed: 0, roundedWideChevron: false, + ellipsisDirection: 'horizontal', }, } satisfies Story; diff --git a/typescript/widgets/src/stories/Modal.stories.tsx b/typescript/widgets/src/stories/Modal.stories.tsx index ea667df311..073a7077ac 100644 --- a/typescript/widgets/src/stories/Modal.stories.tsx +++ b/typescript/widgets/src/stories/Modal.stories.tsx @@ -4,7 +4,13 @@ import React, { useState } from 'react'; import { Modal } from '../layout/Modal.js'; -function MyModal() { +function MyModal({ + title, + showCloseButton, +}: { + title?: string; + showCloseButton?: boolean; +}) { const [isOpen, setIsOpen] = useState(false); const open = () => setIsOpen(true); const close = () => setIsOpen(false); @@ -15,8 +21,9 @@ function MyModal() {
Hello Modal
@@ -32,5 +39,5 @@ export default meta; type Story = StoryObj; export const BasicModal = { - args: {}, + args: { title: '', showCloseButton: true }, } satisfies Story;