diff --git a/.changeset/five-bats-attend.md b/.changeset/five-bats-attend.md new file mode 100644 index 0000000000..02a7c986bb --- /dev/null +++ b/.changeset/five-bats-attend.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/cli': patch +--- + +fix: balance check skip confirmation diff --git a/.changeset/lovely-planes-end.md b/.changeset/lovely-planes-end.md new file mode 100644 index 0000000000..81bd6a8598 --- /dev/null +++ b/.changeset/lovely-planes-end.md @@ -0,0 +1,6 @@ +--- +'@hyperlane-xyz/cli': minor +'@hyperlane-xyz/sdk': minor +--- + +Allow self-relaying of all messages if there are multiple in a given dispatch transaction. diff --git a/.changeset/many-clouds-bow.md b/.changeset/many-clouds-bow.md new file mode 100644 index 0000000000..b481b543ff --- /dev/null +++ b/.changeset/many-clouds-bow.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/sdk': minor +--- + +Call google storage API directly and remove @google-cloud/storage dependency from the SDK. diff --git a/.changeset/neat-apples-marry.md b/.changeset/neat-apples-marry.md new file mode 100644 index 0000000000..514ac94ce8 --- /dev/null +++ b/.changeset/neat-apples-marry.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/infra': minor +--- + +added ubtc route extension config + usdc from appchain to base diff --git a/.changeset/new-seas-ring.md b/.changeset/new-seas-ring.md new file mode 100644 index 0000000000..a8462e4ff4 --- /dev/null +++ b/.changeset/new-seas-ring.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/sdk': minor +--- + +Deploy to new chains: arthera, aurora, conflux, conwai, corn, evmos, form, ink, rivalz, soneium, sonic, telos. diff --git a/.changeset/pink-sloths-turn.md b/.changeset/pink-sloths-turn.md new file mode 100644 index 0000000000..9c7cf6ea56 --- /dev/null +++ b/.changeset/pink-sloths-turn.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/widgets': patch +--- + +Hide outline in button and text input components diff --git a/.changeset/polite-bulldogs-sit.md b/.changeset/polite-bulldogs-sit.md new file mode 100644 index 0000000000..8acf555fe5 --- /dev/null +++ b/.changeset/polite-bulldogs-sit.md @@ -0,0 +1,5 @@ +--- +"@hyperlane-xyz/cli": patch +--- + +Fix strategy flag propagation diff --git a/.changeset/ten-spiders-trade.md b/.changeset/ten-spiders-trade.md new file mode 100644 index 0000000000..91eebf52f7 --- /dev/null +++ b/.changeset/ten-spiders-trade.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/cli': patch +--- + +Added ZKSync signer support using zksync-ethers package diff --git a/.registryrc b/.registryrc index 15e15930d3..db55765651 100644 --- a/.registryrc +++ b/.registryrc @@ -1 +1 @@ -bde63f7c32e8d169d7e3163b14b5bb25bd3d5042 +32b4ab3b3df2bedd0d905c6745bcf1c673a60a01 diff --git a/rust/main/Cargo.lock b/rust/main/Cargo.lock index e29131af94..c14e211f03 100644 --- a/rust/main/Cargo.lock +++ b/rust/main/Cargo.lock @@ -2901,7 +2901,7 @@ dependencies = [ [[package]] name = "ethers" version = "1.0.2" -source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-10#d9f822ef9dd3d63b88cae74973540ef9e6773015" +source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-16#c5c2a74660675ab968cf585893325e2faa807d14" dependencies = [ "ethers-addressbook", "ethers-contract", @@ -2915,7 +2915,7 @@ dependencies = [ [[package]] name = "ethers-addressbook" version = "1.0.2" -source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-10#d9f822ef9dd3d63b88cae74973540ef9e6773015" +source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-16#c5c2a74660675ab968cf585893325e2faa807d14" dependencies = [ "ethers-core", "once_cell", @@ -2926,7 +2926,7 @@ dependencies = [ [[package]] name = "ethers-contract" version = "1.0.2" -source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-10#d9f822ef9dd3d63b88cae74973540ef9e6773015" +source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-16#c5c2a74660675ab968cf585893325e2faa807d14" dependencies = [ "ethers-contract-abigen", "ethers-contract-derive", @@ -2944,7 +2944,7 @@ dependencies = [ [[package]] name = "ethers-contract-abigen" version = "1.0.2" -source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-10#d9f822ef9dd3d63b88cae74973540ef9e6773015" +source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-16#c5c2a74660675ab968cf585893325e2faa807d14" dependencies = [ "Inflector", "cfg-if", @@ -2968,7 +2968,7 @@ dependencies = [ [[package]] name = "ethers-contract-derive" version = "1.0.2" -source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-10#d9f822ef9dd3d63b88cae74973540ef9e6773015" +source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-16#c5c2a74660675ab968cf585893325e2faa807d14" dependencies = [ "ethers-contract-abigen", "ethers-core", @@ -2982,7 +2982,7 @@ dependencies = [ [[package]] name = "ethers-core" version = "1.0.2" -source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-10#d9f822ef9dd3d63b88cae74973540ef9e6773015" +source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-16#c5c2a74660675ab968cf585893325e2faa807d14" dependencies = [ "arrayvec", "bytes", @@ -3012,7 +3012,7 @@ dependencies = [ [[package]] name = "ethers-etherscan" version = "1.0.2" -source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-10#d9f822ef9dd3d63b88cae74973540ef9e6773015" +source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-16#c5c2a74660675ab968cf585893325e2faa807d14" dependencies = [ "ethers-core", "getrandom 0.2.15", @@ -3028,7 +3028,7 @@ dependencies = [ [[package]] name = "ethers-middleware" version = "1.0.2" -source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-10#d9f822ef9dd3d63b88cae74973540ef9e6773015" +source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-16#c5c2a74660675ab968cf585893325e2faa807d14" dependencies = [ "async-trait", "auto_impl 0.5.0", @@ -3076,7 +3076,7 @@ dependencies = [ [[package]] name = "ethers-providers" version = "1.0.2" -source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-10#d9f822ef9dd3d63b88cae74973540ef9e6773015" +source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-16#c5c2a74660675ab968cf585893325e2faa807d14" dependencies = [ "async-trait", "auto_impl 1.2.0", @@ -3112,7 +3112,7 @@ dependencies = [ [[package]] name = "ethers-signers" version = "1.0.2" -source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-10#d9f822ef9dd3d63b88cae74973540ef9e6773015" +source = "git+https://github.com/hyperlane-xyz/ethers-rs?tag=2024-12-16#c5c2a74660675ab968cf585893325e2faa807d14" dependencies = [ "async-trait", "coins-bip32 0.7.0", diff --git a/rust/main/Cargo.toml b/rust/main/Cargo.toml index 72e3d6348d..55cfc1573a 100644 --- a/rust/main/Cargo.toml +++ b/rust/main/Cargo.toml @@ -198,27 +198,27 @@ overflow-checks = true [workspace.dependencies.ethers] features = [] git = "https://github.com/hyperlane-xyz/ethers-rs" -tag = "2024-12-10" +tag = "2024-12-16" [workspace.dependencies.ethers-contract] features = ["legacy"] git = "https://github.com/hyperlane-xyz/ethers-rs" -tag = "2024-12-10" +tag = "2024-12-16" [workspace.dependencies.ethers-core] features = [] git = "https://github.com/hyperlane-xyz/ethers-rs" -tag = "2024-12-10" +tag = "2024-12-16" [workspace.dependencies.ethers-providers] features = [] git = "https://github.com/hyperlane-xyz/ethers-rs" -tag = "2024-12-10" +tag = "2024-12-16" [workspace.dependencies.ethers-signers] features = ["aws"] git = "https://github.com/hyperlane-xyz/ethers-rs" -tag = "2024-12-10" +tag = "2024-12-16" [patch.crates-io.curve25519-dalek] branch = "v3.2.2-relax-zeroize" diff --git a/rust/main/agents/relayer/src/msg/op_queue.rs b/rust/main/agents/relayer/src/msg/op_queue.rs index 95025d391c..99c9dde39f 100644 --- a/rust/main/agents/relayer/src/msg/op_queue.rs +++ b/rust/main/agents/relayer/src/msg/op_queue.rs @@ -29,10 +29,8 @@ impl OpQueue { /// it's very likely that its status has just changed, so this forces the caller to consider the new status #[instrument(skip(self), ret, fields(queue_label=%self.queue_metrics_label), level = "trace")] pub async fn push(&self, mut op: QueueOperation, new_status: Option) { - op.set_status_and_update_metrics( - new_status, - Arc::new(self.get_operation_metric(op.as_ref())), - ); + let new_metric = Arc::new(self.get_new_operation_metric(op.as_ref(), new_status.clone())); + op.set_status_and_update_metrics(new_status, new_metric); self.queue.lock().await.push(Reverse(op)); } @@ -99,12 +97,17 @@ impl OpQueue { } /// Get the metric associated with this operation - fn get_operation_metric(&self, operation: &dyn PendingOperation) -> IntGauge { + fn get_new_operation_metric( + &self, + operation: &dyn PendingOperation, + new_status: Option, + ) -> IntGauge { let (destination, app_context) = operation.get_operation_labels(); + let new_metric_status = new_status.unwrap_or(operation.status()); self.metrics.with_label_values(&[ &destination, &self.queue_metrics_label, - &operation.status().to_string(), + &new_metric_status.to_string(), &app_context, ]) } diff --git a/rust/main/chains/hyperlane-cosmos/src/merkle_tree_hook.rs b/rust/main/chains/hyperlane-cosmos/src/merkle_tree_hook.rs index b9acdd3571..9c03b824dc 100644 --- a/rust/main/chains/hyperlane-cosmos/src/merkle_tree_hook.rs +++ b/rust/main/chains/hyperlane-cosmos/src/merkle_tree_hook.rs @@ -4,7 +4,7 @@ use async_trait::async_trait; use base64::{engine::general_purpose::STANDARD as BASE64, Engine}; use once_cell::sync::Lazy; use tendermint::abci::EventAttribute; -use tracing::instrument; +use tracing::{debug, info, instrument}; use hyperlane_core::accumulator::incremental::IncrementalMerkle; use hyperlane_core::{ @@ -223,6 +223,11 @@ impl CosmosMerkleTreeHookIndexer { fn merkle_tree_insertion_parser( attrs: &Vec, ) -> ChainResult> { + debug!( + ?attrs, + "parsing merkle tree insertion from event attributes", + ); + let mut contract_address: Option = None; let mut insertion = IncompleteMerkleTreeInsertion::default(); @@ -233,6 +238,7 @@ impl CosmosMerkleTreeHookIndexer { match key { CONTRACT_ADDRESS_ATTRIBUTE_KEY => { contract_address = Some(value.to_string()); + debug!(?contract_address, "parsed contract address from plain text"); } v if *CONTRACT_ADDRESS_ATTRIBUTE_KEY_BASE64 == v => { contract_address = Some(String::from_utf8( @@ -240,10 +246,12 @@ impl CosmosMerkleTreeHookIndexer { .decode(value) .map_err(Into::::into)?, )?); + debug!(?contract_address, "parsed contract address from base64"); } MESSAGE_ID_ATTRIBUTE_KEY => { insertion.message_id = Some(H256::from_slice(hex::decode(value)?.as_slice())); + debug!(message_id = ?insertion.message_id, "parsed message_id from plain text"); } v if *MESSAGE_ID_ATTRIBUTE_KEY_BASE64 == v => { insertion.message_id = Some(H256::from_slice( @@ -254,10 +262,12 @@ impl CosmosMerkleTreeHookIndexer { )?)? .as_slice(), )); + debug!(message_id = ?insertion.message_id, "parsed message_id from base64"); } INDEX_ATTRIBUTE_KEY => { insertion.leaf_index = Some(value.parse::()?); + debug!(leaf_index = ?insertion.leaf_index, "parsed leaf_index from plain text"); } v if *INDEX_ATTRIBUTE_KEY_BASE64 == v => { insertion.leaf_index = Some( @@ -268,16 +278,29 @@ impl CosmosMerkleTreeHookIndexer { )? .parse()?, ); + debug!(leaf_index = ?insertion.leaf_index, "parsed leaf_index from base64"); } - _ => {} + unknown => { + debug!(?unknown, "unknown attribute"); + } } } let contract_address = contract_address .ok_or_else(|| ChainCommunicationError::from_other_str("missing contract_address"))?; - Ok(ParsedEvent::new(contract_address, insertion.try_into()?)) + debug!( + ?contract_address, + ?insertion, + "parsed contract address and insertion", + ); + + let event = ParsedEvent::new(contract_address, insertion.try_into()?); + + info!(?event, "parsed event"); + + Ok(event) } } @@ -331,7 +354,7 @@ impl SequenceAwareIndexer for CosmosMerkleTreeHookIndexer { } } -#[derive(Default)] +#[derive(Default, Debug)] struct IncompleteMerkleTreeInsertion { leaf_index: Option, message_id: Option, diff --git a/rust/main/chains/hyperlane-ethereum/src/contracts/validator_announce.rs b/rust/main/chains/hyperlane-ethereum/src/contracts/validator_announce.rs index f37c6edb85..d693b371ac 100644 --- a/rust/main/chains/hyperlane-ethereum/src/contracts/validator_announce.rs +++ b/rust/main/chains/hyperlane-ethereum/src/contracts/validator_announce.rs @@ -10,7 +10,7 @@ use hyperlane_core::{ Announcement, ChainResult, ContractLocator, HyperlaneAbi, HyperlaneChain, HyperlaneContract, HyperlaneDomain, HyperlaneProvider, SignedType, TxOutcome, ValidatorAnnounce, H160, H256, U256, }; -use tracing::{instrument, log::trace}; +use tracing::{instrument, trace}; use crate::{ interfaces::i_validator_announce::{ diff --git a/rust/main/chains/hyperlane-ethereum/src/rpc_clients/trait_builder.rs b/rust/main/chains/hyperlane-ethereum/src/rpc_clients/trait_builder.rs index 45ad0638d6..f6583f6ec6 100644 --- a/rust/main/chains/hyperlane-ethereum/src/rpc_clients/trait_builder.rs +++ b/rust/main/chains/hyperlane-ethereum/src/rpc_clients/trait_builder.rs @@ -304,8 +304,8 @@ where // (These are the default values from ethers doc comments) const COEFFICIENT: f64 = 1.125; const EVERY_SECS: u64 = 90u64; - // 550 gwei is the limit we also use for polygon, so we reuse for consistency - const MAX_GAS_PRICE: u128 = 550 * 10u128.pow(9); + // a 3k gwei limit is chosen to account for `treasure` chain, where the highest gas price observed is 1.2k gwei + const MAX_GAS_PRICE: u128 = 3_000 * 10u128.pow(9); let escalator = GeometricGasPrice::new(COEFFICIENT, EVERY_SECS, MAX_GAS_PRICE.into()); // Check the status of sent txs every eth block or so. The alternative is to subscribe to new blocks and check then, // which adds unnecessary load on the provider. diff --git a/rust/main/chains/hyperlane-ethereum/src/tx.rs b/rust/main/chains/hyperlane-ethereum/src/tx.rs index 1a95c5436b..d967b5f72c 100644 --- a/rust/main/chains/hyperlane-ethereum/src/tx.rs +++ b/rust/main/chains/hyperlane-ethereum/src/tx.rs @@ -1,6 +1,8 @@ +use std::str::FromStr; +use std::sync::Arc; use std::time::Duration; -use std::{ops::Mul, sync::Arc}; +use ethers::types::transaction::eip2718::TypedTransaction; use ethers::{ abi::Detokenize, prelude::{NameOrAddress, TransactionReceipt}, @@ -8,6 +10,7 @@ use ethers::{ types::{Block, Eip1559TransactionRequest, TxHash}, }; use ethers_contract::builders::ContractCall; +use ethers_core::types::H160; use ethers_core::{ types::{BlockNumber, U256 as EthersU256}, utils::{ @@ -49,6 +52,7 @@ pub fn apply_gas_estimate_buffer(gas: U256, domain: &HyperlaneDomain) -> ChainRe } const PENDING_TRANSACTION_POLLING_INTERVAL: Duration = Duration::from_secs(2); +const EVM_RELAYER_ADDRESS: &str = "0x74cae0ecc47b02ed9b9d32e000fd70b9417970c5"; /// Dispatches a transaction, logs the tx id, and returns the result pub(crate) async fn report_tx(tx: ContractCall) -> ChainResult @@ -154,7 +158,7 @@ where } let Ok((base_fee, max_fee, max_priority_fee)) = - estimate_eip1559_fees(provider, None, &latest_block, domain).await + estimate_eip1559_fees(provider, None, &latest_block, domain, &tx.tx).await else { // Is not EIP 1559 chain return Ok(tx.gas(gas_limit)); @@ -202,15 +206,88 @@ where type FeeEstimator = fn(EthersU256, Vec>) -> (EthersU256, EthersU256); +/// Use this to estimate EIP 1559 fees with some chain-specific logic. +async fn estimate_eip1559_fees( + provider: Arc, + estimator: Option, + latest_block: &Block, + domain: &HyperlaneDomain, + tx: &TypedTransaction, +) -> ChainResult<(EthersU256, EthersU256, EthersU256)> +where + M: Middleware + 'static, +{ + if domain.is_zksync_stack() { + estimate_eip1559_fees_zksync(provider, latest_block, tx).await + } else { + estimate_eip1559_fees_default(provider, estimator, latest_block).await + } +} + +async fn estimate_eip1559_fees_zksync( + provider: Arc, + latest_block: &Block, + tx: &TypedTransaction, +) -> ChainResult<(EthersU256, EthersU256, EthersU256)> +where + M: Middleware + 'static, +{ + let base_fee_per_gas = latest_block + .base_fee_per_gas + .ok_or_else(|| ProviderError::CustomError("EIP-1559 not activated".into()))?; + + let response = zksync_estimate_fee(provider, tx).await?; + let max_fee_per_gas = response.max_fee_per_gas; + let max_priority_fee_per_gas = response.max_priority_fee_per_gas; + + Ok((base_fee_per_gas, max_fee_per_gas, max_priority_fee_per_gas)) +} + +async fn zksync_estimate_fee( + provider: Arc, + tx: &TypedTransaction, +) -> ChainResult +where + M: Middleware + 'static, +{ + let mut tx = tx.clone(); + tx.set_from( + // use the sender in the provider if one is set, otherwise default to the EVM relayer address + provider + .default_sender() + .unwrap_or(H160::from_str(EVM_RELAYER_ADDRESS).unwrap()), + ); + + let result = provider + .provider() + .request("zks_estimateFee", [tx.clone()]) + .await?; + tracing::debug!(?result, ?tx, "Successfully fetched zkSync fee estimate"); + Ok(result) +} + +// From +// gas_limit: QUANTITY, 32 bytes - The maximum amount of gas that can be used. +// max_fee_per_gas: QUANTITY, 32 bytes - The maximum fee per unit of gas that the sender is willing to pay. +// max_priority_fee_per_gas: QUANTITY, 32 bytes - The maximum priority fee per unit of gas to incentivize miners. +// gas_per_pubdata_limit: QUANTITY, 32 bytes - The gas limit per unit of public data. +#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize)] +struct ZksyncEstimateFeeResponse { + gas_limit: EthersU256, + max_fee_per_gas: EthersU256, + max_priority_fee_per_gas: EthersU256, + gas_per_pubdata_limit: EthersU256, +} + +/// Logic for a vanilla EVM chain to get EIP-1559 fees. /// Pretty much a copy of the logic in ethers-rs (https://github.com/hyperlane-xyz/ethers-rs/blob/c9ced035628da59376c369be035facda1648577a/ethers-providers/src/provider.rs#L478) /// but returns the base fee as well as the max fee and max priority fee. /// Gets a heuristic recommendation of max fee per gas and max priority fee per gas for /// EIP-1559 compatible transactions. -async fn estimate_eip1559_fees( +async fn estimate_eip1559_fees_default( provider: Arc, estimator: Option, latest_block: &Block, - domain: &HyperlaneDomain, ) -> ChainResult<(EthersU256, EthersU256, EthersU256)> where M: Middleware + 'static, @@ -235,17 +312,7 @@ where eip1559_default_estimator(base_fee_per_gas, fee_history.reward) }; - let mut gas_price_multiplier: u32 = 1; - // `treasure` chain gas estimation underestimates the actual gas price, so we add a multiplier to it - if domain.id() == 61166 { - gas_price_multiplier = 2; - } - - Ok(( - base_fee_per_gas.mul(gas_price_multiplier), - max_fee_per_gas.mul(gas_price_multiplier), - max_priority_fee_per_gas.mul(gas_price_multiplier), - )) + Ok((base_fee_per_gas, max_fee_per_gas, max_priority_fee_per_gas)) } pub(crate) async fn call_with_reorg_period( @@ -266,3 +333,40 @@ where Ok(call) } } + +#[cfg(test)] +mod test { + use std::sync::Arc; + + use ethers::{ + providers::{Http, Provider}, + types::{ + transaction::eip2718::TypedTransaction, Address, Bytes, Eip1559TransactionRequest, + NameOrAddress, + }, + }; + use std::str::FromStr; + use url::Url; + + use crate::tx::zksync_estimate_fee; + + #[ignore = "Not running a flaky test requiring network"] + #[tokio::test] + async fn test_zksync_estimate_fees() { + let url: Url = "https://rpc.treasure.lol".parse().unwrap(); + let http = Http::new(url); + let provider = Arc::new(Provider::new(http)); + // Test tx to call `nonce()` on the Treasure mailbox + let tx = TypedTransaction::Eip1559(Eip1559TransactionRequest { + // the `from` field is None in prod, and gas estimation should be robust to this + from: None, + to: Some(NameOrAddress::Address( + Address::from_str("0x6bD0A2214797Bc81e0b006F7B74d6221BcD8cb6E").unwrap(), + )), + data: Some(Bytes::from(vec![0xaf, 0xfe, 0xd0, 0xe0])), + ..Default::default() + }); + // Require a parsing success + let _response = zksync_estimate_fee(provider, &tx).await.unwrap(); + } +} diff --git a/rust/main/config/mainnet_config.json b/rust/main/config/mainnet_config.json index bb97daa396..05599c97e3 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": "0x7115c77E844E301693d78F1B19e796083eB0b680", + "interchainSecurityModule": "0x88BD2166Ed70a1Cae544037e16582e38bd74C6e6", "isTestnet": false, "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x811808Dd29ba8B0FC6C0ec0b5537035E59745162", @@ -100,7 +100,7 @@ "interchainAccountIsm": "0x2A7574358Ec53522CE2452887661AB4c86F7d400", "interchainAccountRouter": "0x91874Dbed74925dFe6059B90385EEb90DdE0B2E6", "interchainGasPaymaster": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", - "interchainSecurityModule": "0xB51De3e8BCE366a871d5ba631ACa843D18d9Bc60", + "interchainSecurityModule": "0xd53Ea5FD4C735cabc468CC676E76d2A97ef03eF3", "mailbox": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9", "merkleTreeHook": "0x748040afB89B8FdBb992799808215419d36A0930", "name": "arbitrum", @@ -172,7 +172,7 @@ "interchainAccountIsm": "0x27a3233c05C1Df7c163123301D14bE9349E3Cb48", "interchainAccountRouter": "0xa82a0227e6d6db53AF4B264A852bfF91C6504a51", "interchainGasPaymaster": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", - "interchainSecurityModule": "0xEc016e4DB2ca7EdB65F40AEF59DdFe12a28344ed", + "interchainSecurityModule": "0x5958A0062297AE89276E6b28D31899310B4CB873", "mailbox": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6", "merkleTreeHook": "0x84eea61D679F42D92145fA052C89900CBAccE95A", "name": "avalanche", @@ -245,7 +245,7 @@ "interchainAccountIsm": "0x223F7D3f27E6272266AE4B5B91Fd5C7A2d798cD8", "interchainAccountRouter": "0x4767D22117bBeeb295413000B620B93FD8522d53", "interchainGasPaymaster": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", - "interchainSecurityModule": "0x4EC3B7A1E41032C7b557fBb5c7FEbB255D23d41E", + "interchainSecurityModule": "0x67a2F6B3AAf57A36f78e230ef92B3C3781bEb42C", "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", "merkleTreeHook": "0x19dc38aeae620380430C200a6E990D5Af5480117", "name": "base", @@ -316,7 +316,7 @@ "interchainAccountIsm": "0xe93f2f409ad8B5000431D234472973fe848dcBEC", "interchainAccountRouter": "0x2f4Eb04189e11Af642237Da62d163Ab714614498", "interchainGasPaymaster": "0xB3fCcD379ad66CED0c91028520C64226611A48c9", - "interchainSecurityModule": "0xdc01bf0D464460bD383B5C81d5962451204ec28b", + "interchainSecurityModule": "0x3FB5E5eCC49fbe363573622C8bE677984d25AE21", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", "name": "blast", @@ -384,7 +384,7 @@ "interchainAccountIsm": "0x451dF8AB0936D85526D816f0b4dCaDD934A034A4", "interchainAccountRouter": "0x5C02157068a52cEcfc98EDb6115DE6134EcB4764", "interchainGasPaymaster": "0x62B7592C1B6D1E43f4630B8e37f4377097840C05", - "interchainSecurityModule": "0x6a32F3789Ba8880742d1fB6Cb51aed5EcfdE702C", + "interchainSecurityModule": "0xB50d23647410d02Ff0C3F1C763E501EDAbb75783", "mailbox": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147", "merkleTreeHook": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", "name": "bob", @@ -450,7 +450,7 @@ "interchainAccountIsm": "0x9e22945bE593946618383B108CC5bce09eBA4C26", "interchainAccountRouter": "0x32A07c1B7a7fe8D4A0e44B0181873aB9d64C16c1", "interchainGasPaymaster": "0x78E25e7f84416e69b9339B0A6336EB6EFfF6b451", - "interchainSecurityModule": "0x0c461142ac54Fa4d24Fe5Ff6643A8386d2C03b29", + "interchainSecurityModule": "0x41B0dDBa97657551325f4579E93D756701d46fD6", "mailbox": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4", "merkleTreeHook": "0xFDb9Cd5f9daAA2E4474019405A328a88E7484f26", "name": "bsc", @@ -531,7 +531,7 @@ "interchainAccountIsm": "0xB732c83aeE29596E3163Da2260710eAB67Bc0B29", "interchainAccountRouter": "0x27a6cAe33378bB6A6663b382070427A01fc9cB37", "interchainGasPaymaster": "0x571f1435613381208477ac5d6974310d88AC7cB7", - "interchainSecurityModule": "0x324fedE5dba4729760514913bfD29f626F487e35", + "interchainSecurityModule": "0x89ee5969142a040653912D500d561A9F6b03Ad72", "mailbox": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb", "merkleTreeHook": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", "name": "celo", @@ -596,7 +596,7 @@ "interchainAccountIsm": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", "interchainAccountRouter": "0xEF9A332Ec1fD233Bf9344A58be56ff9E104B4f60", "interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503", - "interchainSecurityModule": "0x53D92225b49932471E6CA7bf1089203e49f5E51E", + "interchainSecurityModule": "0x3dE3032C39Df41CC9b986584A69f7839781Dd16a", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD", "name": "cheesechain", @@ -659,7 +659,7 @@ "from": 4842212 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0x3203B23145Cc21f6ba1c9AA49401fa66fBDB113E", + "interchainSecurityModule": "0xD9267b8C7D7f23D257717BC45E401b07Cd635DA2", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "cyber", @@ -726,7 +726,7 @@ "from": 23783929 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xf0bE03F3176EA2dEA8b614C5695EF0eF795e79eF", + "interchainSecurityModule": "0x1811eabA3aaF0CCc197BE558D700C17C9F57756f", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "degenchain", @@ -839,7 +839,7 @@ "interchainAccountIsm": "0xCeafc098e5c3c7768b9229Be2FEC275862A81Abd", "interchainAccountRouter": "0xed9a722c543883FB7e07E78F3879762DE09eA7D5", "interchainGasPaymaster": "0xB30EAB08aa87138D57168D0e236850A530f49921", - "interchainSecurityModule": "0xC4F35559a1FBD1ACb7Ba88cEdC157754477FC047", + "interchainSecurityModule": "0x6c4C65E1559EEB81B1041810795405c182b021F2", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xC831271c1fB212012811a91Dd43e5926C1020563", "name": "endurance", @@ -910,7 +910,7 @@ "interchainAccountIsm": "0x292C614ED53DaaDBf971521bc2C652d1ca51cB47", "interchainAccountRouter": "0x5E532F7B610618eE73C2B462978e94CB1F7995Ce", "interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", - "interchainSecurityModule": "0xcFF5f9d69343f4200100dbA755C794012518Ed38", + "interchainSecurityModule": "0xdcB6cB7477d19fB13C7168061FE034FE4BA255E3", "mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239", "merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", "name": "ethereum", @@ -982,7 +982,7 @@ "interchainAccountIsm": "0x7C012DCA02C42cfA3Fd7Da3B0ED7234B52AE68eF", "interchainAccountRouter": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9", "interchainGasPaymaster": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", - "interchainSecurityModule": "0x7D24f9d82BCC10ab4A02F48D2Aae1AD00Ea47dC3", + "interchainSecurityModule": "0xC15c21430Dfa1e0184FE57BdD6bf31d9607D6705", "mailbox": "0x2f9DB5616fa3fAd1aB06cB2C906830BA63d135e3", "merkleTreeHook": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147", "name": "fraxtal", @@ -1050,7 +1050,7 @@ "interchainAccountIsm": "0x9629c28990F11c31735765A6FD59E1E1bC197DbD", "interchainAccountRouter": "0x2351FBe24C1212F253b7a300ff0cBCFd97952a19", "interchainGasPaymaster": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", - "interchainSecurityModule": "0xff36B9B99338CAe60fd794741B5e02a3D92254C2", + "interchainSecurityModule": "0xd097D848a044F6F044ae63f6B8d35B70A7334997", "mailbox": "0x3071D4DA6020C956Fe15Bfd0a9Ca8D4574f16696", "merkleTreeHook": "0xfBc08389224d23b79cb21cDc16c5d42F0ad0F57f", "name": "fusemainnet", @@ -1124,7 +1124,7 @@ "interchainAccountIsm": "0x07E2062A1bC66a2C1d05cb5C3870a4AF86e0056E", "interchainAccountRouter": "0xBE70Ab882D1F7E37e04a70CDd9Ec23b37a234064", "interchainGasPaymaster": "0xDd260B99d302f0A3fF885728c086f729c06f227f", - "interchainSecurityModule": "0x8fC6e2011050ccC99B7f8460C23Cc85402D78e85", + "interchainSecurityModule": "0x4e3D805431E5658Ba753D04BBbD50D9930CaE38F", "mailbox": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", "merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645", "name": "gnosis", @@ -1195,7 +1195,7 @@ "interchainAccountIsm": "0x708E002637792FDC031E6B62f23DD60014AC976a", "interchainAccountRouter": "0xfB8cea1c7F45608Da30655b50bbF355D123A4358", "interchainGasPaymaster": "0x19dc38aeae620380430C200a6E990D5Af5480117", - "interchainSecurityModule": "0xaee1F6685b0495cc2bFa4F5E5c096466fC9873b8", + "interchainSecurityModule": "0x65b590874726F780e11Aee7E68932c196ac5Cfef", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x0972954923a1e2b2aAb04Fa0c4a0797e5989Cd65", "name": "inevm", @@ -1323,7 +1323,7 @@ "from": 14616307 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0x66c540f566a52F46931FaBbcED90d7d669da7303", + "interchainSecurityModule": "0xF2270f4b8a3274924c3e048F25c92fB7A5B091D4", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "kroma", @@ -1396,7 +1396,7 @@ "interchainAccountIsm": "0xdcA646C56E7768DD11654956adE24bfFf9Ba4893", "interchainAccountRouter": "0xD59dA396F162Ed93a41252Cebb8d5DD4F093238C", "interchainGasPaymaster": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", - "interchainSecurityModule": "0x93c9fEeC4Dd4935a65029A4BF03fB6df1130FBB9", + "interchainSecurityModule": "0x1a669B1f14C6C62B2d56f1eBb5C016904E17F831", "mailbox": "0x02d16BC51af6BfD153d67CA61754cF912E82C4d9", "merkleTreeHook": "0xC077A0Cc408173349b1c9870C667B40FE3C01dd7", "name": "linea", @@ -1467,7 +1467,7 @@ "from": 4195553 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xDbe54a99c9550BF6EB7F510b62cfe2d5E74F072e", + "interchainSecurityModule": "0x0c3b196dbA07dfaCcb5Ea4D2809712A2114EC37b", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "lisk", @@ -1531,7 +1531,7 @@ "from": 3088760 }, "interchainGasPaymaster": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", - "interchainSecurityModule": "0x5997a574AbfED0506a5319b669b5f328b1C391A3", + "interchainSecurityModule": "0x1Df3B3fc76F1E76Ce2D87a921F4436D888E79038", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x062200d92dF6bB7bA89Ce4D6800110450f94784e", "name": "lukso", @@ -1605,7 +1605,7 @@ "interchainAccountIsm": "0x8Ea50255C282F89d1A14ad3F159437EE5EF0507f", "interchainAccountRouter": "0x693A4cE39d99e46B04cb562329e3F0141cA17331", "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "interchainSecurityModule": "0xF9fecfeAA2A20744eAb207f7c01CA245C49Bab9e", + "interchainSecurityModule": "0x22BdaC15c02353D331C5787858117F1aC1183831", "isTestnet": false, "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", @@ -1675,7 +1675,7 @@ "interchainAccountIsm": "0xe039DA3A0071BEd087A12660D7b03cf669c7776E", "interchainAccountRouter": "0x45285463352c53a481e882cD5E2AF2E25BBdAd0D", "interchainGasPaymaster": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", - "interchainSecurityModule": "0x244BbF1B35C67De0367E4A02C63bFD4269976A92", + "interchainSecurityModule": "0x3bb99404072f895B0F10bB27855Ede36E15c43E2", "mailbox": "0x398633D19f4371e1DB5a8EFE90468eB70B1176AA", "merkleTreeHook": "0x5332D1AC0A626D265298c14ff681c0A8D28dB86d", "name": "mantle", @@ -1737,7 +1737,7 @@ "from": 13523607 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0x3C5672Af5874D2ea59B73edF4489Db73bCE743D0", + "interchainSecurityModule": "0x1f2c988EE1b80434d89B52A16585595A558fAa48", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "merlin", @@ -1804,7 +1804,7 @@ "from": 17966274 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xb54D5F3905422BcD7f8d4627ad60c9F3196dEF66", + "interchainSecurityModule": "0x90b5E844395e3539CE3Ab008C50E1D1c9648F632", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "metis", @@ -1869,7 +1869,7 @@ "from": 3752032 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xda17325c9f34cedc06728707eD95eC79d26386a7", + "interchainSecurityModule": "0x26918172f13F5E481564fb3Ed14b2cA4Dd4b8AC7", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "mint", @@ -1936,7 +1936,7 @@ "interchainAccountIsm": "0xa377b8269e0A47cdd2fD5AAeAe860b45623c6d82", "interchainAccountRouter": "0x6e1B9f776bd415d7cC3C7458A5f0d801016918f8", "interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "interchainSecurityModule": "0xB484705Abc1F351b94B63C93Af83B6d108351137", + "interchainSecurityModule": "0x2151dBB20aaa63E644276bb59A024a81f4b9BC9A", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6", "name": "mode", @@ -2004,7 +2004,7 @@ "interchainAccountIsm": "0x79b3730CE3685f65802aF1771319992bA960EB9D", "interchainAccountRouter": "0xc4482f66191754a8629D35289043C4EB0285F10E", "interchainGasPaymaster": "0x14760E32C0746094cF14D97124865BC7F0F7368F", - "interchainSecurityModule": "0xFc907245E3c91cFE8aFFDcCb01ef7053a76C7eDb", + "interchainSecurityModule": "0x194A56Bf67bF4821290A0F3C56573eCed842d8D2", "mailbox": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", "merkleTreeHook": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", "name": "moonbeam", @@ -2146,7 +2146,7 @@ "interchainAccountIsm": "0x2c46BF14641d00549ECa4779BF5CBf91602C1DEd", "interchainAccountRouter": "0x03D6cC17d45E9EA27ED757A8214d1F07F7D901aD", "interchainGasPaymaster": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", - "interchainSecurityModule": "0xe12A4A59080320aBC854FE647761D83D00883807", + "interchainSecurityModule": "0x8A04d9237BE52200F7363cB82BF099990d4390b1", "mailbox": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", "merkleTreeHook": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", "name": "optimism", @@ -2281,7 +2281,7 @@ "interchainAccountIsm": "0xBAC4529cdfE7CCe9E858BF706e41F8Ed096C1BAd", "interchainAccountRouter": "0xF163949AD9F88977ebF649D0461398Ca752E64B9", "interchainGasPaymaster": "0x0071740Bf129b05C4684abfbBeD248D80971cce2", - "interchainSecurityModule": "0xD94CaFdBe8c9C2C05fD5992B087bc30F237001D2", + "interchainSecurityModule": "0x7dFd4006e9AB433d3f999830F611B2188631B33f", "mailbox": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", "merkleTreeHook": "0x73FbD25c3e817DC4B4Cd9d00eff6D83dcde2DfF6", "name": "polygon", @@ -2358,7 +2358,7 @@ "interchainAccountIsm": "0xc1198e241DAe48BF5AEDE5DCE49Fe4A6064cF7a7", "interchainAccountRouter": "0x20a0A32a110362920597F72974E1E0d7e25cA20a", "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "interchainSecurityModule": "0xAbD84C24bC17b3733D094Cf911561F3c088bA8E0", + "interchainSecurityModule": "0x3e1D7F5c1208A0eb48bc30717F9Ca2614257bFF5", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", "name": "polygonzkevm", @@ -2426,7 +2426,7 @@ "from": 32018468 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0x1C516BB0B775B2EDF3fA26beb547f2634F23bB11", + "interchainSecurityModule": "0xC453a7f24540B90aB43681A5Bc07c9E03acC1a48", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "proofofplay", @@ -2490,7 +2490,7 @@ "from": 363159 }, "interchainGasPaymaster": "0x3071D4DA6020C956Fe15Bfd0a9Ca8D4574f16696", - "interchainSecurityModule": "0x342766bc19A0bcd47d4269D1804AF4Ad27D4372C", + "interchainSecurityModule": "0xc43577973b012058Fb96dbF0A4b3246019b54016", "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", "merkleTreeHook": "0x55E4F0bc6b7Bb493D50839A8592e7ad8d5e93cf7", "name": "real", @@ -2557,7 +2557,7 @@ "interchainAccountIsm": "0x5DA60220C5dDe35b7aE91c042ff5979047FA0785", "interchainAccountRouter": "0x7a4d31a686A36285d68e14EDD53631417eB19603", "interchainGasPaymaster": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "interchainSecurityModule": "0x020f0b3691383B662Fb0D5799D5516652eFE5124", + "interchainSecurityModule": "0x32A4A7aB028eb349b20D6370e8B56ba82CbB45c7", "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", "merkleTreeHook": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", "name": "redstone", @@ -2619,7 +2619,7 @@ "from": 937117 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0x798BC62c7E991c908A7c18131324Eb413ac61cc6", + "interchainSecurityModule": "0x72ee68825c1Ad788E4F2414972f11CE92d141Fc1", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "sanko", @@ -2687,7 +2687,7 @@ "interchainAccountIsm": "0x32af5Df81fEd5E26119F6640FBB13f3d63a94CDe", "interchainAccountRouter": "0x0B48a744698ba8dFa514742dFEB6728f52fD66f7", "interchainGasPaymaster": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", - "interchainSecurityModule": "0x35b219Ee7824b0DB8d0bE01a97Cb88cFC4d8aB22", + "interchainSecurityModule": "0x2811146829429c551285889134C0014c35b38c24", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", "name": "scroll", @@ -2755,7 +2755,7 @@ "interchainAccountIsm": "0xf35dc7B9eE4Ebf0cd3546Bd6EE3b403dE2b9F5D6", "interchainAccountRouter": "0xBcaedE97a98573A88242B3b0CB0A255F3f90d4d5", "interchainGasPaymaster": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", - "interchainSecurityModule": "0x7329fEFd101560d0e56F54768dB5c7f095148a9b", + "interchainSecurityModule": "0xBD1AF09F9dEC9E3b7a63C9c0B65C514E035238ff", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xca1b69fA4c4a7c7fD839bC50867c589592bcfe49", "name": "sei", @@ -2870,7 +2870,7 @@ "interchainAccountIsm": "0xAE557e108b3336130370aC74836f1356B4b30Cf2", "interchainAccountRouter": "0x1F8CF09F060A2AE962c0Bb1F92e209a1E7b0E10B", "interchainGasPaymaster": "0x273Bc6b01D9E88c064b6E5e409BdF998246AEF42", - "interchainSecurityModule": "0x38ab08a7cb19757Ba6dc870277780519380DED32", + "interchainSecurityModule": "0x21008aF197f3Ae07fA485d0b34A3b4Dd26FC7633", "mailbox": "0x28EFBCadA00A7ed6772b3666F3898d276e88CAe3", "merkleTreeHook": "0x6A55822cf11f9fcBc4c75BC2638AfE8Eb942cAdd", "name": "taiko", @@ -2932,7 +2932,7 @@ "from": 1678063 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0x798BC62c7E991c908A7c18131324Eb413ac61cc6", + "interchainSecurityModule": "0xC453a7f24540B90aB43681A5Bc07c9E03acC1a48", "isTestnet": false, "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", @@ -3000,7 +3000,7 @@ "interchainAccountIsm": "0x551BbEc45FD665a8C95ca8731CbC32b7653Bc59B", "interchainAccountRouter": "0xc11f8Cf2343d3788405582F65B8af6A4F7a6FfC8", "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "interchainSecurityModule": "0x8c5D31F910a08E8ae72a1Ea28c77609be3774e29", + "interchainSecurityModule": "0xDbfc19C0F633126a8e276ec884297B49CF5E13E2", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", "name": "viction", @@ -3068,7 +3068,7 @@ "interchainAccountIsm": "0xCB9f90EE5d83Ea52ABd922BD70898f0155D54798", "interchainAccountRouter": "0x473884010F0C1742DA8Ad01E7E295624B931076b", "interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503", - "interchainSecurityModule": "0x586bB821b040491EA7822317cA2316c3B217F9AA", + "interchainSecurityModule": "0xFFd81050Be09ee3D565C3a930dA0692e1D9d634F", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD", "name": "worldchain", @@ -3130,7 +3130,7 @@ "from": 24395308 }, "interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF", - "interchainSecurityModule": "0xb26302055D46090B299b7c01041f246FEEdcE559", + "interchainSecurityModule": "0xE18ED85F5fb475B3BB24972c0EdeD1ea7642EB8b", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "name": "xai", @@ -3198,7 +3198,7 @@ "interchainAccountIsm": "0x29B37088724B745C0ABcE591449Cf042772160C2", "interchainAccountRouter": "0x03cF708E42C89623bd83B281A56935cB562b9258", "interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503", - "interchainSecurityModule": "0xae69dcB077234da706C6228756Ffb13B8B332970", + "interchainSecurityModule": "0xB80876e19Ce1beF4Db7F52B07155C9d57A3c5135", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD", "name": "xlayer", @@ -3266,7 +3266,7 @@ "interchainAccountIsm": "0x2b6d3F7d28B5EC8C3C028fBCAdcf774D9709Dd29", "interchainAccountRouter": "0x3AdCBc94ab8C48EC52D06dc65Bb787fD1981E3d5", "interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "interchainSecurityModule": "0xFa772A78594a65458B7A6934DA1fA83930B0F51b", + "interchainSecurityModule": "0x75834EC3d39e0D1307715355dd7Dd2b2E8f3fC0A", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6", "name": "zetachain", @@ -3332,7 +3332,7 @@ "from": 1511458 }, "interchainGasPaymaster": "0x03cF708E42C89623bd83B281A56935cB562b9258", - "interchainSecurityModule": "0x41792A9E3FD2883F5bD6fd38a209483Fc21082f8", + "interchainSecurityModule": "0x52E661244b9c2123EeF1D4cb85D489bba9422D73", "mailbox": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", "merkleTreeHook": "0x4C97D35c668EE5194a13c8DE8Afc18cce40C9F28", "name": "zircuit", @@ -3405,7 +3405,7 @@ "interchainAccountIsm": "0xb2674E213019972f937CCFc5e23BF963D915809e", "interchainAccountRouter": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", "interchainGasPaymaster": "0x18B0688990720103dB63559a3563f7E8d0f63EDb", - "interchainSecurityModule": "0xD1Ce8d18B61AfE53D63ba7DC359F0bD3eA915235", + "interchainSecurityModule": "0xc5354e5540D9Ae61Ee7ee7D177F4d9B58A1883d1", "mailbox": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a", "merkleTreeHook": "0x886BB0f329781b98f98FDeb1ce7a8957F2d43B9F", "name": "zoramainnet", @@ -3476,7 +3476,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x5d315fD2F9ce3F538F76c2f6b9516495B0a1bCEb", + "interchainSecurityModule": "0x7d38C592002bB0994fB5Dc2F557AF32a1aF94605", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3543,7 +3543,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x24326Ebe336Fa9d48615697B39845B6B2F098174", + "interchainSecurityModule": "0x203Ac1908BCd2721BbC36B1E7889be3C3d19858E", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3613,7 +3613,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x4bD8927F13cCCe50B2bB3603B5Eaf484A56f1638", + "interchainSecurityModule": "0xf83ef66fa36643516b82Af671D43C914B7ea7582", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3689,7 +3689,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0xF53b96635A3e7c57fe481c94efe0F658990E5040", + "interchainSecurityModule": "0x6912fb43dE8878bAee4CF38Dd4982c4eb42F81EF", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3753,7 +3753,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x071aeFd19DD91AB9E63ED3BDa36d0b7097A7459f", + "interchainSecurityModule": "0xc324703B7bDD8640B85d6be73888D9673DB5736e", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3826,7 +3826,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x2769f9B495692BC6135BA71255EeD04A995e74E2", + "interchainSecurityModule": "0xEED58BC374386596a848856aDCD07f597B70e2d9", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3894,7 +3894,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0xB2fB0a0b676B75cf6Af1ab517023f88Ea90EDd2E", + "interchainSecurityModule": "0xC444cA862A91A87fa3DCdbcf1747E4A8B27eAD73", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -3957,7 +3957,7 @@ "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB", "interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", - "interchainSecurityModule": "0x604F761705Cf5D1682dD17356b84d96CD41B0734", + "interchainSecurityModule": "0x8a2320fD0B7c75DE3Ad99Faf1F01930d6a6D166a", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575", "pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27", @@ -4027,7 +4027,7 @@ "interchainAccountIsm": "0xcd9D3744512F07AE844c40E27912092d7c503565", "interchainAccountRouter": "0x92cdbF0Ccdf8E93467FA858fb986fa650A02f2A8", "interchainGasPaymaster": "0xb58257cc81E47EC72fD38aE16297048de23163b4", - "interchainSecurityModule": "0x80D7DDC0b7d8dae6F9CcB0D78558291118815349", + "interchainSecurityModule": "0x1f586E16bfB622123E9d166bAd2F3CB1F87Dc117", "mailbox": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39", "merkleTreeHook": "0xCC3D1659D50461d27a2F025dDb2c9B06B584B7e1", "pausableHook": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", @@ -4087,7 +4087,7 @@ "interchainAccountIsm": "0xc23BaF5Eb5848D19701BbE7f139645e6bd58a319", "interchainAccountRouter": "0x7c58Cadcc2b60ACF794eE1843488d6f5703f76BE", "interchainGasPaymaster": "0xb4fc9B5fD57499Ef6FfF3995728a55F7A618ef86", - "interchainSecurityModule": "0x64bdb8Bfb9DbAc2FD2fD28a9B37605CE73D4410f", + "interchainSecurityModule": "0x80140b82E5C4c6Ee0Fe755De0A59aEb0fBBFef8B", "mailbox": "0xb129828B9EDa48192D0B2db35D0E40dCF51B3594", "merkleTreeHook": "0x3E969bA938E6A993eeCD6F65b0dd8712B07dFe59", "pausableHook": "0x6Fb36672365C7c797028C400A61c58c0ECc53cD2", @@ -4218,7 +4218,7 @@ "interchainAccountIsm": "0x6119B76720CcfeB3D256EC1b91218EEfFD6756E1", "interchainAccountRouter": "0x9eaaC366BFD70430cFee6E70265fefFf1CfC9E47", "interchainGasPaymaster": "0x18B0688990720103dB63559a3563f7E8d0f63EDb", - "interchainSecurityModule": "0x9386BadA88dF2b034614Dcf3CC82aB0dC6C63849", + "interchainSecurityModule": "0xab325b387731928dADf80E8E5501B474f85e769C", "mailbox": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39", "merkleTreeHook": "0x886BB0f329781b98f98FDeb1ce7a8957F2d43B9F", "pausableHook": "0x2F619Ac5122689180AeBB930ADccdae215d538a9", @@ -4282,7 +4282,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0xf10dB7FBC4B5d79d217881aB7FeC71A4a33449af", + "interchainSecurityModule": "0x01F399cD43B492D536a925CF52BEAB620019a479", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4343,7 +4343,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0xf48D165f545221766DbEB9D92b1187DD1322170b", + "interchainSecurityModule": "0x5bc300Fa6c5761019425c2919F73C7df7A5cb6aA", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4422,7 +4422,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0x78E7691458EA3Ca38a56fD4eFBE54D30dDDa72Ac", + "interchainSecurityModule": "0x77F728DAF925089cF9536F89C32aB0abAa2e294D", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4489,7 +4489,7 @@ "interchainAccountIsm": "0x783EC5e105234a570eB90f314284E5dBe53bdd90", "interchainAccountRouter": "0xc5D6aCaafBCcEC6D7fD7d92F4509befce641c563", "interchainGasPaymaster": "0xf3dFf6747E7FC74B431C943961054B7BF6309d8a", - "interchainSecurityModule": "0x3Eb3273A92B6b1653f64CD945506dd67F478C9bd", + "interchainSecurityModule": "0x8ca77BeAC75B19052a49Ae6Ef743fe02EC56B41f", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x5090dF2FBDa7127c7aDa41f60B79F5c55D380Dd8", "pausableHook": "0x886BB0f329781b98f98FDeb1ce7a8957F2d43B9F", @@ -4560,7 +4560,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0x3428158e7D0D9AD25653ea390EE9a9aA43628a48", + "interchainSecurityModule": "0x643dC25467048e2e835A44561D913A98f90bD962", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4625,7 +4625,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0xFeAE4cdACEc5E2aC50A0357eed6c13A5d76c88cD", + "interchainSecurityModule": "0xeAe69924A25c0CC57Ff771689fb05d53a7FD29B1", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4689,7 +4689,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0x18545b46Df0A6cd81FA05C663FAc4ee26a750ad0", + "interchainSecurityModule": "0x790e7dDEf110E6dF8aA51f713400f6ec0e6758b6", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4756,7 +4756,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0xc3FFEd2a525a487cfe805193c463CB7BdD704CE9", + "interchainSecurityModule": "0x57d57F50065F7390Afc13e8917562061998CfaB2", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -4820,7 +4820,7 @@ "interchainAccountIsm": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed", "interchainAccountRouter": "0xeE8C0E1EeBfFCC451a013336386eA53E42a44451", "interchainGasPaymaster": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", - "interchainSecurityModule": "0xb5813484CD3027FCb4B908a3bD2D9c118423a14B", + "interchainSecurityModule": "0x01F399cD43B492D536a925CF52BEAB620019a479", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0x6963480b05EB58f4d624B014ab92e9aD4d21df6D", "pausableHook": "0xD0dca420feFda68537695A8D887080eeF4030AF7", @@ -5006,7 +5006,7 @@ "interchainAccountIsm": "0x4d264424905535E97396Db83bd553D0d73A4EF9d", "interchainAccountRouter": "0x26A29486480BD74f9B830a9B8dB33cb43C40f496", "interchainGasPaymaster": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", - "interchainSecurityModule": "0x5e7Ff7Cb6C828DFda4Ce8934A6f8F4C7B33E2217", + "interchainSecurityModule": "0xd2bFe972583b513302C0d0BD4Ef0Ac146428776C", "mailbox": "0x5bdADEAD721Eb4C4038fF7c989E3C7BbBA302435", "merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645", "pausableHook": "0xC8E323036AAFB4B4201e7B640E79C4Db285A3FC8", @@ -5070,7 +5070,7 @@ "interchainAccountIsm": "0x545E289B88c6d97b74eC0B96e308cae46Bf5f832", "interchainAccountRouter": "0x4ef363Da5bb09CC6aeA16973786963d0C8820778", "interchainGasPaymaster": "0x561BcA8D862536CD9C88f332C1A1Da0fC8F96e40", - "interchainSecurityModule": "0x14bF825eE8FaD180d379280963FBB66F6c256a6E", + "interchainSecurityModule": "0x8Ef057A24ad9E3B5e86ba9015e63E1FDf16E5B83", "mailbox": "0x248aDe14C0489E20C9a7Fea5F86DBfC3702208eF", "merkleTreeHook": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", "pausableHook": "0x2f536FB7a37bd817Af644072a904Ddc02Dae429f", @@ -5137,7 +5137,7 @@ "interchainAccountIsm": "0x60bB6D060393D3C206719A7bD61844cC82891cfB", "interchainAccountRouter": "0x9534122Aae7978dB8f5f10dF4432233c53e820A1", "interchainGasPaymaster": "0x61374178e45F65fF9D6252d017Cd580FC60B7654", - "interchainSecurityModule": "0x969179b1330226bC861aE726Aa1D2Bba03cc5576", + "interchainSecurityModule": "0x7A36F64A6CbFd2e6fA82D9616a8557731B283856", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0xEe08043cf22c80b27BF24d19999231dF4a3fC256", "pausableHook": "0x145566181A18E23bB6a8A3eC6D87765542A7F754", @@ -5202,7 +5202,7 @@ "interchainAccountIsm": "0xcdc31BA959DE8C035A03167ebAE1961208CDf172", "interchainAccountRouter": "0x349831a180eE4265008C5FFB9465Ff97c1CF0028", "interchainGasPaymaster": "0x6AA10748a036a49Cb290C0e12B77319b76792D5E", - "interchainSecurityModule": "0x1Be73077A341D517AcAa2516c0BE356b6444134B", + "interchainSecurityModule": "0xd03eb8402F1849B9C3317f0ac12Ef8cbB0288ebd", "mailbox": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", "merkleTreeHook": "0x2783D98CC073dbcDa90241C804d16982D3d75821", "pausableHook": "0x3bb2D0a828f7dD91bA786091F421f6d7cF376445", @@ -5272,7 +5272,7 @@ "interchainAccountIsm": "0x545E289B88c6d97b74eC0B96e308cae46Bf5f832", "interchainAccountRouter": "0x4ef363Da5bb09CC6aeA16973786963d0C8820778", "interchainGasPaymaster": "0xc6835e52C1b976F1ebC71Bc8919738E02849FdA9", - "interchainSecurityModule": "0x8021F7b95A9354619c22a3bed3a6549d07Ac34B4", + "interchainSecurityModule": "0x666519868126919DD68C24E684D2059cc8991833", "mailbox": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", "merkleTreeHook": "0xdAa1B65547fB969c9ff5678956AB2FF9771B883D", "pausableHook": "0xA0e0829DA397CcF55d5B779C31728f21Cb8219DF", @@ -5384,7 +5384,7 @@ "interchainAccountIsm": "0x8c794a781327b819416E7b67908f1D22397f1E67", "interchainAccountRouter": "0x16625230dD6cFe1B2bec3eCaEc7d43bA3A902CD6", "interchainGasPaymaster": "0x2b79328DA089E89A9E9c08732b56dd31F01011Db", - "interchainSecurityModule": "0x14663E42b9b66F79103c5824230CC79a26E24BfD", + "interchainSecurityModule": "0x6819a646e9Fc12eB98848038314728082F539617", "mailbox": "0x730f8a4128Fa8c53C777B62Baa1abeF94cAd34a9", "merkleTreeHook": "0x9c64f327F0140DeBd430aab3E2F1d6cbcA921227", "pausableHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645", @@ -5448,7 +5448,7 @@ "interchainAccountIsm": "0xE67Dc24970B482579923551Ede52BD35a2858989", "interchainAccountRouter": "0xDDE46032Baf4da13fDD79BF9dfbaA2749615C409", "interchainGasPaymaster": "0x2f536FB7a37bd817Af644072a904Ddc02Dae429f", - "interchainSecurityModule": "0x846856eeD85eBc6C5FBf94F17e0c9cC76dF6c86E", + "interchainSecurityModule": "0xfBB6D85fafFE439d470652fBE1F86f782807403f", "mailbox": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", "merkleTreeHook": "0xC8E323036AAFB4B4201e7B640E79C4Db285A3FC8", "pausableHook": "0xdAa1B65547fB969c9ff5678956AB2FF9771B883D", @@ -5512,7 +5512,7 @@ "interchainAccountIsm": "0x20a0A32a110362920597F72974E1E0d7e25cA20a", "interchainAccountRouter": "0x5b3EeADcc0E2d4284eA6816e2E503c24d30a9E54", "interchainGasPaymaster": "0x282629Af1A2f9b8e2c5Cbc54C35C7989f21950c6", - "interchainSecurityModule": "0xa1080587BA36750d90746A147Ee79F8589Ac0099", + "interchainSecurityModule": "0xea0A028775a07EF27CfD1363Ce7463b31ad57296", "mailbox": "0x5C02157068a52cEcfc98EDb6115DE6134EcB4764", "merkleTreeHook": "0xf147bBD944C610F86DaE6C7668497D22932C1E4A", "pausableHook": "0x872Bd98057931c8809927c6dE2ef39738a80Eb0C", @@ -5579,7 +5579,7 @@ "interchainAccountIsm": "0xf40eE9FF75Fa34910b7C4C8d68d4850B3bD184D3", "interchainAccountRouter": "0xf6fB78dc009C1A4286c0E7d90C10c9E8906a62Ea", "interchainGasPaymaster": "0xDDE46032Baf4da13fDD79BF9dfbaA2749615C409", - "interchainSecurityModule": "0x008FED472F8d4634C5701B3bEc2380C30064BEb5", + "interchainSecurityModule": "0x36Fe416e4415C93352bD33DC77B83A17850d581e", "mailbox": "0x65dCf8F6b3f6a0ECEdf3d0bdCB036AEa47A1d615", "merkleTreeHook": "0x8c794a781327b819416E7b67908f1D22397f1E67", "pausableHook": "0x4d264424905535E97396Db83bd553D0d73A4EF9d", @@ -5646,7 +5646,7 @@ "interchainAccountIsm": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", "interchainAccountRouter": "0x7279B1e11142078b8dC9e69620200f4C84FB8aaa", "interchainGasPaymaster": "0x5ae1ECA065aC8ee92Ce98E584fc3CE43070020e7", - "interchainSecurityModule": "0x54BF1a8c5584E844a6b4F9F98e2770A415921f66", + "interchainSecurityModule": "0xe93396575310fbfd1815505dA60963f874cb9CC8", "mailbox": "0x96D51cc3f7500d501bAeB1A2a62BB96fa03532F8", "merkleTreeHook": "0x086c3947F71BE98A0bDf4AB7239955e7542b0CbA", "pausableHook": "0x9C6e8d989ea7F212e679191BEb44139d83ac927a", @@ -5716,7 +5716,7 @@ "interchainAccountIsm": "0x8a733038eF4BbC314eE0F7595257D8d3799B6aA9", "interchainAccountRouter": "0xCE8260c1b5cF2fAD15bb4B6542716b050Fdf35c9", "interchainGasPaymaster": "0xa1c3884EbE24Cccb120B2E98a55f85140563aa4C", - "interchainSecurityModule": "0xBCc50A4e5690251aFF052b415251DfBc634002C7", + "interchainSecurityModule": "0x22CD0d9ad151e694cE92Ce07cB921918ad94d87e", "mailbox": "0x5e8a0fCc0D1DF583322943e01F02cB243e5300f6", "merkleTreeHook": "0x2f536FB7a37bd817Af644072a904Ddc02Dae429f", "pausableHook": "0xc6835e52C1b976F1ebC71Bc8919738E02849FdA9", @@ -5777,7 +5777,7 @@ "interchainAccountIsm": "0x25EAC2007b0D40E3f0AF112FD346412321038719", "interchainAccountRouter": "0xfF26696DcDb6BbFD27e959b847D4f1399D5BcF64", "interchainGasPaymaster": "0x9534122Aae7978dB8f5f10dF4432233c53e820A1", - "interchainSecurityModule": "0x0cF15af1385776F0f853C3525cC9A9eba600c209", + "interchainSecurityModule": "0x802173518092b5af3079762a1fbeF8bbAf4593a0", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x9eaaC366BFD70430cFee6E70265fefFf1CfC9E47", "pausableHook": "0x9eb56085DdbDA60aDf7d2B533AFeD90e38fC9666", @@ -5847,7 +5847,7 @@ "interchainAccountIsm": "0x25EAC2007b0D40E3f0AF112FD346412321038719", "interchainAccountRouter": "0xfF26696DcDb6BbFD27e959b847D4f1399D5BcF64", "interchainGasPaymaster": "0x9534122Aae7978dB8f5f10dF4432233c53e820A1", - "interchainSecurityModule": "0x319310239BC5c43808Ff1008d0db3B38067F7Ce9", + "interchainSecurityModule": "0xA07D4B3a8da7F513BFD70866fCFfC42D34d91a87", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x9eaaC366BFD70430cFee6E70265fefFf1CfC9E47", "pausableHook": "0x9eb56085DdbDA60aDf7d2B533AFeD90e38fC9666", @@ -5908,7 +5908,7 @@ "interchainAccountIsm": "0x25EAC2007b0D40E3f0AF112FD346412321038719", "interchainAccountRouter": "0xfF26696DcDb6BbFD27e959b847D4f1399D5BcF64", "interchainGasPaymaster": "0x9534122Aae7978dB8f5f10dF4432233c53e820A1", - "interchainSecurityModule": "0x773daCf7C9944fE6e1Fa740eeC7FD4ae820a9cbb", + "interchainSecurityModule": "0x2d9c837157923B40bdF1e64a2A9fC13E37Dd9246", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x9eaaC366BFD70430cFee6E70265fefFf1CfC9E47", "pausableHook": "0x9eb56085DdbDA60aDf7d2B533AFeD90e38fC9666", @@ -5972,7 +5972,7 @@ "interchainAccountIsm": "0x25EAC2007b0D40E3f0AF112FD346412321038719", "interchainAccountRouter": "0xfF26696DcDb6BbFD27e959b847D4f1399D5BcF64", "interchainGasPaymaster": "0x9534122Aae7978dB8f5f10dF4432233c53e820A1", - "interchainSecurityModule": "0x555b95e85640aeE885236327aB91946827ebdB57", + "interchainSecurityModule": "0x8d7912ca475362E055808Bc3Dd67B117e007523d", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x9eaaC366BFD70430cFee6E70265fefFf1CfC9E47", "pausableHook": "0x9eb56085DdbDA60aDf7d2B533AFeD90e38fC9666", @@ -6036,7 +6036,7 @@ "interchainAccountIsm": "0x25EAC2007b0D40E3f0AF112FD346412321038719", "interchainAccountRouter": "0xfF26696DcDb6BbFD27e959b847D4f1399D5BcF64", "interchainGasPaymaster": "0x9534122Aae7978dB8f5f10dF4432233c53e820A1", - "interchainSecurityModule": "0x555b95e85640aeE885236327aB91946827ebdB57", + "interchainSecurityModule": "0xdBB9466B300AC49BC2C91bB975643b592A126514", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x9eaaC366BFD70430cFee6E70265fefFf1CfC9E47", "pausableHook": "0x9eb56085DdbDA60aDf7d2B533AFeD90e38fC9666", @@ -6109,7 +6109,7 @@ "interchainAccountIsm": "0xfF26696DcDb6BbFD27e959b847D4f1399D5BcF64", "interchainAccountRouter": "0x4D50044335dc1d4D26c343AdeDf6E47808475Deb", "interchainGasPaymaster": "0x70EbA87Cd15616f32C736B3f3BdCfaeD0713a82B", - "interchainSecurityModule": "0x6d29ffb859D867Faf2705f39b168331960438f31", + "interchainSecurityModule": "0xcf5B2Fa0cDa42ec6CB947A84384f136416FF8341", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0xbb0AE51BCa526cF313b6a95BfaB020794af6C394", "pausableHook": "0x83475ca5bEB2Eaa59A2FF48a0544ebaa4a32c2de", @@ -6173,7 +6173,7 @@ "interchainAccountIsm": "0x31Bb27f6007C33acD1be83ACEd3164C60f8F7b13", "interchainAccountRouter": "0xEeb5a99a75585fe137c83E7b62b74f87264A5481", "interchainGasPaymaster": "0xb7C9307fE90B9AB093c6D3EdeE3259f5378D5f03", - "interchainSecurityModule": "0x833005B52Ea2785178752f91b51614E40eF56891", + "interchainSecurityModule": "0x0a698848Dbf4819b22A37E02748588AcF9936F22", "mailbox": "0x0dF25A2d59F03F039b56E90EdC5B89679Ace28Bc", "merkleTreeHook": "0xC88636fFdFAc7cb87b7A76310B7a62AF0A000595", "pausableHook": "0x2AF32cF8e3Cf42d221eDa0c843818fA5ee129E27", @@ -6237,7 +6237,7 @@ "interchainAccountIsm": "0x28291a7062afA569104bEd52F7AcCA3dD2FafD11", "interchainAccountRouter": "0xe9E3444DDD80c50276c0Fcf316026f6d7fEc2c47", "interchainGasPaymaster": "0x25EAC2007b0D40E3f0AF112FD346412321038719", - "interchainSecurityModule": "0xd8d54AA2d31De782C76170328eB3Dca412F171ae", + "interchainSecurityModule": "0xdd8378d5A11ad5B48699dfCF87a06aF595410D49", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x5C02157068a52cEcfc98EDb6115DE6134EcB4764", "pausableHook": "0x99fEFc1119E86Ee0153eb887cF8E8ab2d92A16e8", @@ -6305,7 +6305,7 @@ "interchainAccountIsm": "0x027eFD1695941969435AA640542B690044dF7E06", "interchainAccountRouter": "0x65F1343AC23D4fF48bf6c7E0c55872d245397567", "interchainGasPaymaster": "0x28291a7062afA569104bEd52F7AcCA3dD2FafD11", - "interchainSecurityModule": "0xAf8AA677016ee577268Ab6ad19483075605a5671", + "interchainSecurityModule": "0x0a297b209EE1Db131F4624819fa0cc8D119d01e5", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0xcd90D49b046772F710250b9119117169CB2e4D8b", "pausableHook": "0x7CE76f5f0C469bBB4cd7Ea6EbabB54437A093127", @@ -6442,6 +6442,804 @@ "index": { "from": 7286869 } + }, + "arthera": { + "blockExplorers": [ + { + "apiUrl": "https://explorer.arthera.net/api", + "family": "blockscout", + "name": "Arthera Explorer", + "url": "https://explorer.arthera.net" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 1, + "reorgPeriod": 5 + }, + "chainId": 10242, + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "displayName": "Arthera", + "domainId": 10242, + "gasCurrencyCoinGeckoId": "arthera", + "name": "arthera", + "nativeToken": { + "decimals": 18, + "name": "Arthera", + "symbol": "AA" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://rpc.arthera.net", + "pagination": { + "maxBlockRange": 10000 + } + } + ], + "technicalStack": "other", + "aggregationHook": "0xeee0A47491ade07A37D026E4670Dc5c93fdAe888", + "domainRoutingIsm": "0x928DcA761f20aBFBdf088314f448234fB96dE60C", + "domainRoutingIsmFactory": "0x29B37088724B745C0ABcE591449Cf042772160C2", + "fallbackRoutingHook": "0x1fbcCdc677c10671eE50b46C61F0f7d135112450", + "interchainAccountIsm": "0xf9609bB22847e0DB5F6fB8f95b84D25A19b46ac5", + "interchainAccountRouter": "0x2b6d3F7d28B5EC8C3C028fBCAdcf774D9709Dd29", + "interchainGasPaymaster": "0xFb7D175d6F53800D68D32C3Fe1416807A394cC24", + "interchainSecurityModule": "0x565f3Ad39Acb67D673fb568575DcE6Ba1861d723", + "mailbox": "0x473884010F0C1742DA8Ad01E7E295624B931076b", + "merkleTreeHook": "0xdA629E1B79e3420ECd1e80571aDd6a4a3b13AE79", + "pausableHook": "0xe93f2f409ad8B5000431D234472973fe848dcBEC", + "pausableIsm": "0x466b330C2e360c0214A9Da2428415298f720883E", + "protocolFee": "0x33AA12b4e8E79cA551Ca9D1F2eC7d2cE02129dd4", + "proxyAdmin": "0x03cF708E42C89623bd83B281A56935cB562b9258", + "staticAggregationHookFactory": "0x46fa3A5780e5B90Eaf34BDED554d5353B5ABE9E7", + "staticAggregationIsm": "0x871459fDa27204F20300A3E472fD05e0C62f09De", + "staticAggregationIsmFactory": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", + "staticMerkleRootMultisigIsmFactory": "0x4C97D35c668EE5194a13c8DE8Afc18cce40C9F28", + "staticMerkleRootWeightedMultisigIsmFactory": "0xEF9A332Ec1fD233Bf9344A58be56ff9E104B4f60", + "staticMessageIdMultisigIsmFactory": "0xDa7cECb05C4aeB02c1aFDE277d4306a2da7Bd762", + "staticMessageIdWeightedMultisigIsmFactory": "0xCB9f90EE5d83Ea52ABd922BD70898f0155D54798", + "storageGasOracle": "0x8d9Bd7E9ec3cd799a659EE650DfF6C799309fA91", + "testRecipient": "0x49998DFdeF3F0b05Fe103C435bF73f5D735a0b97", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0xEe9E0FB6f43913aDBbe5bf89073F4BA590AB8184", + "index": { + "from": 19952728 + } + }, + "aurora": { + "blockExplorers": [ + { + "apiUrl": "https://explorer.mainnet.aurora.dev/api", + "family": "blockscout", + "name": "Aurora Explorer", + "url": "https://explorer.mainnet.aurora.dev" + } + ], + "blocks": { + "confirmations": 3, + "estimateBlockTime": 1, + "reorgPeriod": 5 + }, + "chainId": 1313161554, + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "displayName": "Aurora", + "domainId": 1313161554, + "gasCurrencyCoinGeckoId": "ethereum", + "name": "aurora", + "nativeToken": { + "decimals": 18, + "name": "Ether", + "symbol": "ETH" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://mainnet.aurora.dev" + }, + { + "http": "https://aurora.drpc.org" + } + ], + "technicalStack": "other", + "aggregationHook": "0xCB571B99DD7e5f13bEb043893706D76024A30886", + "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", + "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "interchainAccountIsm": "0xF457D831d9F55e87B2F0b35AD6D033fd6b4181Ed", + "interchainAccountRouter": "0x021D2810a758c833080DEc2F1Fa8F571Aae97D45", + "interchainGasPaymaster": "0xc0C2dB448fC2c84213394Fcb93a3C467e50ECa9E", + "interchainSecurityModule": "0x4DaeEeC1c7FC2316419261ae3C4220191D6e12A3", + "mailbox": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39", + "merkleTreeHook": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "pausableHook": "0x48C427782Bc1e9ecE406b3e277481b28ABcBdf03", + "pausableIsm": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "protocolFee": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "proxyAdmin": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0xAD067B2DF9Cab270d1F4fe546B15f1AA7e0977DD", + "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMerkleRootWeightedMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "staticMessageIdWeightedMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "testRecipient": "0x65dCf8F6b3f6a0ECEdf3d0bdCB036AEa47A1d615", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0x426a3CE72C1586b1867F9339550371E86DB3e396", + "index": { + "from": 135117550 + } + }, + "conflux": { + "blockExplorers": [ + { + "apiUrl": "https://evmapi.confluxscan.net/api", + "family": "blockscout", + "name": "ConfluxScan eSpace", + "url": "https://evm.confluxscan.net" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 2, + "reorgPeriod": 10 + }, + "chainId": 1030, + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "displayName": "Conflux eSpace", + "domainId": 1030, + "gasCurrencyCoinGeckoId": "conflux-token", + "name": "conflux", + "nativeToken": { + "decimals": 18, + "name": "Ethereum", + "symbol": "ETH" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://evm.confluxrpc.com" + }, + { + "http": "https://conflux-espace-public.unifra.io" + }, + { + "http": "https://conflux-espace.blockpi.network/v1/rpc/public" + } + ], + "technicalStack": "other", + "aggregationHook": "0x2A3E42635E7acAc8Bb7851963Bc9d29B1dAAd409", + "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", + "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "interchainAccountIsm": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "interchainAccountRouter": "0xc2466492C451E1AE49d8C874bB9f89293Aaad59b", + "interchainGasPaymaster": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "interchainSecurityModule": "0xd285467525196946efDa56fc26DAbFe816A5E4E4", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "merkleTreeHook": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "pausableHook": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "pausableIsm": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9", + "protocolFee": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x95cE3183137f906753463933C5dfDe777D2E7fE2", + "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMerkleRootWeightedMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "staticMessageIdWeightedMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "testRecipient": "0x4Ee9dEBB3046139661b51E17bdfD54Fd63211de7", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "index": { + "from": 111730015 + } + }, + "conwai": { + "blockExplorers": [ + { + "apiUrl": "https://conwai.calderaexplorer.xyz/api", + "family": "blockscout", + "name": "Conwai Explorer", + "url": "https://conwai.calderaexplorer.xyz" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 2, + "reorgPeriod": 0 + }, + "chainId": 668668, + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "displayName": "Conwai", + "domainId": 668668, + "gasCurrencyCoinGeckoId": "conwai", + "index": { + "from": 73 + }, + "name": "conwai", + "nativeToken": { + "decimals": 18, + "name": "Conwai", + "symbol": "CNW" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://conwai.calderachain.xyz/http" + } + ], + "technicalStack": "arbitrumnitro", + "aggregationHook": "0x2A3E42635E7acAc8Bb7851963Bc9d29B1dAAd409", + "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", + "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "interchainAccountIsm": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "interchainAccountRouter": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "interchainGasPaymaster": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "interchainSecurityModule": "0xf0F40bf7FFc8B05b639D657f02Fc7B75A218e068", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "merkleTreeHook": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "pausableHook": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "pausableIsm": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9", + "protocolFee": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x95cE3183137f906753463933C5dfDe777D2E7fE2", + "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMerkleRootWeightedMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "staticMessageIdWeightedMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "testRecipient": "0x4Ee9dEBB3046139661b51E17bdfD54Fd63211de7", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0x84444cE490233CFa76E3F1029bc166aa8c266907" + }, + "corn": { + "blockExplorers": [ + { + "apiUrl": "https://api.routescan.io/v2/network/mainnet/evm/21000000/etherscan/api", + "family": "routescan", + "name": "Cornscan", + "url": "https://cornscan.io" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 20, + "reorgPeriod": 5 + }, + "chainId": 21000000, + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "displayName": "Corn", + "domainId": 21000000, + "index": { + "from": 55636 + }, + "gasCurrencyCoinGeckoId": "bitcoin", + "name": "corn", + "nativeToken": { + "decimals": 18, + "name": "Bitcorn", + "symbol": "BTCN" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://mainnet.corn-rpc.com" + }, + { + "http": "https://maizenet-rpc.usecorn.com" + }, + { + "http": "https://rpc.ankr.com/corn_maizenet" + } + ], + "technicalStack": "arbitrumnitro", + "aggregationHook": "0x2A3E42635E7acAc8Bb7851963Bc9d29B1dAAd409", + "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", + "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "interchainAccountIsm": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "interchainAccountRouter": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "interchainGasPaymaster": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "interchainSecurityModule": "0xf0F40bf7FFc8B05b639D657f02Fc7B75A218e068", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "merkleTreeHook": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "pausableHook": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "pausableIsm": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9", + "protocolFee": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x95cE3183137f906753463933C5dfDe777D2E7fE2", + "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMerkleRootWeightedMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "staticMessageIdWeightedMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "testRecipient": "0x4Ee9dEBB3046139661b51E17bdfD54Fd63211de7", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0x84444cE490233CFa76E3F1029bc166aa8c266907" + }, + "evmos": { + "blockExplorers": [ + { + "apiUrl": "https://www.mintscan.io/evmos/api", + "family": "other", + "name": "Mintscan", + "url": "https://www.mintscan.io/evmos" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 2, + "reorgPeriod": 5 + }, + "chainId": 9001, + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "displayName": "Evmos EVM", + "domainId": 9001, + "gasCurrencyCoinGeckoId": "evmos", + "name": "evmos", + "nativeToken": { + "decimals": 18, + "name": "Evmos", + "symbol": "EVMOS" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://evmos.lava.build" + }, + { + "http": "https://evmos-json-rpc.stakely.io" + }, + { + "http": "https://rpc-evm.evmos.dragonstake.io" + }, + { + "http": "https://evmos.drpc.org" + } + ], + "technicalStack": "other", + "aggregationHook": "0x2A3E42635E7acAc8Bb7851963Bc9d29B1dAAd409", + "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", + "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "interchainAccountIsm": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "interchainAccountRouter": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "interchainGasPaymaster": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "interchainSecurityModule": "0xf0F40bf7FFc8B05b639D657f02Fc7B75A218e068", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "merkleTreeHook": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "pausableHook": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "pausableIsm": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9", + "protocolFee": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x95cE3183137f906753463933C5dfDe777D2E7fE2", + "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMerkleRootWeightedMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "staticMessageIdWeightedMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "testRecipient": "0x4Ee9dEBB3046139661b51E17bdfD54Fd63211de7", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "index": { + "from": 25566476 + } + }, + "form": { + "blockExplorers": [ + { + "apiUrl": "https://explorer.form.network/api", + "family": "blockscout", + "name": "Form Explorer", + "url": "https://explorer.form.network" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 2, + "reorgPeriod": 5 + }, + "chainId": 478, + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "displayName": "Form", + "domainId": 478, + "gasCurrencyCoinGeckoId": "ethereum", + "name": "form", + "nativeToken": { + "decimals": 18, + "name": "Ether", + "symbol": "ETH" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://rpc.form.network/http" + } + ], + "technicalStack": "opstack", + "aggregationHook": "0x2A3E42635E7acAc8Bb7851963Bc9d29B1dAAd409", + "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", + "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "interchainAccountIsm": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "interchainAccountRouter": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "interchainGasPaymaster": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "interchainSecurityModule": "0xf0F40bf7FFc8B05b639D657f02Fc7B75A218e068", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "merkleTreeHook": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "pausableHook": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "pausableIsm": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9", + "protocolFee": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x95cE3183137f906753463933C5dfDe777D2E7fE2", + "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMerkleRootWeightedMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "staticMessageIdWeightedMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "testRecipient": "0x4Ee9dEBB3046139661b51E17bdfD54Fd63211de7", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "index": { + "from": 469384 + } + }, + "ink": { + "blockExplorers": [ + { + "apiUrl": "https://explorer.inkonchain.com/api", + "family": "blockscout", + "name": "Ink Explorer", + "url": "https://explorer.inkonchain.com" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 1, + "reorgPeriod": 5 + }, + "chainId": 57073, + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "displayName": "Ink", + "domainId": 57073, + "gasCurrencyCoinGeckoId": "ethereum", + "name": "ink", + "nativeToken": { + "decimals": 18, + "name": "Ether", + "symbol": "ETH" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://rpc.inkonchain.com" + } + ], + "technicalStack": "opstack", + "aggregationHook": "0x4D5DDc9D93F9b60c101B6ba75fcD9f3a10F7F8da", + "domainRoutingIsm": "0xDEed16fe4b1c9b2a93483EDFf34C77A9b57D31Ff", + "domainRoutingIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "fallbackRoutingHook": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "interchainAccountIsm": "0x60515f328B2c55Df63f456D9D839a0082892dEf8", + "interchainAccountRouter": "0xF457D831d9F55e87B2F0b35AD6D033fd6b4181Ed", + "interchainGasPaymaster": "0xc0C2dB448fC2c84213394Fcb93a3C467e50ECa9E", + "interchainSecurityModule": "0x7f124ad38fDF2FDdcD8554fd44f72b0A56EA5644", + "mailbox": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39", + "merkleTreeHook": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "pausableHook": "0x48C427782Bc1e9ecE406b3e277481b28ABcBdf03", + "pausableIsm": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "protocolFee": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "proxyAdmin": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "staticAggregationHookFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticAggregationIsm": "0x9D68537eE6b1351fE22a0837e6aD522c526CA72e", + "staticAggregationIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMerkleRootWeightedMultisigIsmFactory": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "staticMessageIdWeightedMultisigIsmFactory": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "storageGasOracle": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "testRecipient": "0x65dCf8F6b3f6a0ECEdf3d0bdCB036AEa47A1d615", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0x426a3CE72C1586b1867F9339550371E86DB3e396", + "index": { + "from": 860343 + } + }, + "rivalz": { + "blockExplorers": [ + { + "apiUrl": "https://rivalz.calderaexplorer.xyz/api", + "family": "blockscout", + "name": "Rivalz Explorer", + "url": "https://rivalz.calderaexplorer.xyz" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 2, + "reorgPeriod": 0 + }, + "chainId": 753, + "displayName": "Rivalz", + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "domainId": 753, + "gasCurrencyCoinGeckoId": "ethereum", + "index": { + "from": 21 + }, + "name": "rivalz", + "nativeToken": { + "decimals": 18, + "name": "Ether", + "symbol": "ETH" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://rivalz.calderachain.xyz/http" + } + ], + "technicalStack": "arbitrumnitro", + "aggregationHook": "0xfe94Ea7DA6C45849D395e3d03973aa924553b937", + "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", + "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0x48C427782Bc1e9ecE406b3e277481b28ABcBdf03", + "interchainAccountIsm": "0xd64d126941EaC2Cf53e0E4E8146cC70449b60D73", + "interchainAccountRouter": "0x1A4F09A615aA4a35E5a146DC2fa19975bebF21A5", + "interchainGasPaymaster": "0x3cECBa60A580dE20CC57D87528953a00f4ED99EA", + "interchainSecurityModule": "0x8f1953EFbd2C720223faD02d6CB5CD25f97D7fC9", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "merkleTreeHook": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "pausableHook": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "pausableIsm": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "protocolFee": "0x4Ee9dEBB3046139661b51E17bdfD54Fd63211de7", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x8f1953EFbd2C720223faD02d6CB5CD25f97D7fC9", + "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMerkleRootWeightedMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "staticMessageIdWeightedMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x248aDe14C0489E20C9a7Fea5F86DBfC3702208eF", + "testRecipient": "0x92249B8ed35C2980e58666a3EBF4a075DDD2895f", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0x65dCf8F6b3f6a0ECEdf3d0bdCB036AEa47A1d615" + }, + "soneium": { + "blockExplorers": [ + { + "apiUrl": "https://explorer.soneium.org/api", + "family": "blockscout", + "name": "Soneium Explorer", + "url": "https://explorer.soneium.org" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 2, + "reorgPeriod": 5 + }, + "chainId": 1868, + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "displayName": "Soneium", + "domainId": 1868, + "gasCurrencyCoinGeckoId": "ethereum", + "name": "soneium", + "nativeToken": { + "decimals": 18, + "name": "Ether", + "symbol": "ETH" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://rpc.soneium.org" + } + ], + "technicalStack": "opstack", + "aggregationHook": "0x2A3E42635E7acAc8Bb7851963Bc9d29B1dAAd409", + "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", + "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "interchainAccountIsm": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "interchainAccountRouter": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "interchainGasPaymaster": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "interchainSecurityModule": "0xf0F40bf7FFc8B05b639D657f02Fc7B75A218e068", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "merkleTreeHook": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "pausableHook": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "pausableIsm": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9", + "protocolFee": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x95cE3183137f906753463933C5dfDe777D2E7fE2", + "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMerkleRootWeightedMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "staticMessageIdWeightedMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "testRecipient": "0x4Ee9dEBB3046139661b51E17bdfD54Fd63211de7", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "index": { + "from": 612005 + } + }, + "sonic": { + "blockExplorers": [ + { + "apiUrl": "https://api.sonicscan.org/api", + "family": "etherscan", + "name": "Sonic Explorer", + "url": "https://sonicscan.org" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 2, + "reorgPeriod": 5 + }, + "chainId": 146, + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "displayName": "Sonic", + "domainId": 146, + "gasCurrencyCoinGeckoId": "fantom", + "name": "sonic", + "nativeToken": { + "decimals": 18, + "name": "Sonic", + "symbol": "S" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://rpc.soniclabs.com" + } + ], + "technicalStack": "other", + "aggregationHook": "0x2A3E42635E7acAc8Bb7851963Bc9d29B1dAAd409", + "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", + "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "interchainAccountIsm": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "interchainAccountRouter": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "interchainGasPaymaster": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "interchainSecurityModule": "0xf0F40bf7FFc8B05b639D657f02Fc7B75A218e068", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "merkleTreeHook": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "pausableHook": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "pausableIsm": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9", + "protocolFee": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x95cE3183137f906753463933C5dfDe777D2E7fE2", + "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMerkleRootWeightedMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "staticMessageIdWeightedMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "testRecipient": "0x4Ee9dEBB3046139661b51E17bdfD54Fd63211de7", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "index": { + "from": 482156 + } + }, + "telos": { + "blockExplorers": [ + { + "apiUrl": "https://www.teloscan.io/api", + "family": "other", + "name": "Teloscan", + "url": "https://www.teloscan.io" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 1, + "reorgPeriod": "finalized" + }, + "chainId": 40, + "deployer": { + "name": "Abacus Works", + "url": "https://www.hyperlane.xyz" + }, + "displayName": "Telos EVM", + "domainId": 40, + "gasCurrencyCoinGeckoId": "telos", + "name": "telos", + "nativeToken": { + "decimals": 18, + "name": "Telos", + "symbol": "TLOS" + }, + "protocol": "ethereum", + "rpcUrls": [ + { + "http": "https://rpc.telos.net" + }, + { + "http": "https://telos.drpc.org" + } + ], + "technicalStack": "other", + "aggregationHook": "0x2A3E42635E7acAc8Bb7851963Bc9d29B1dAAd409", + "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", + "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "interchainAccountIsm": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "interchainAccountRouter": "0xF457D831d9F55e87B2F0b35AD6D033fd6b4181Ed", + "interchainGasPaymaster": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "interchainSecurityModule": "0xf0F40bf7FFc8B05b639D657f02Fc7B75A218e068", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "merkleTreeHook": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "pausableHook": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "pausableIsm": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9", + "protocolFee": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x95cE3183137f906753463933C5dfDe777D2E7fE2", + "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMerkleRootWeightedMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "staticMessageIdWeightedMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "testRecipient": "0x4Ee9dEBB3046139661b51E17bdfD54Fd63211de7", + "timelockController": "0x0000000000000000000000000000000000000000", + "validatorAnnounce": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "index": { + "from": 378761707 + } } }, "defaultRpcConsensusType": "fallback" diff --git a/rust/main/config/testnet_config.json b/rust/main/config/testnet_config.json index e5e01dcaf8..6f8dca0b8d 100644 --- a/rust/main/config/testnet_config.json +++ b/rust/main/config/testnet_config.json @@ -1232,10 +1232,10 @@ "formtestnet": { "blockExplorers": [ { - "apiUrl": "https://explorer.form.network/api", + "apiUrl": "https://sepolia-explorer.form.network/api", "family": "blockscout", "name": "Form Testnet Explorer", - "url": "https://explorer.form.network" + "url": "https://sepolia-explorer.form.network" } ], "blocks": { diff --git a/rust/main/hyperlane-base/src/contract_sync/cursors/metrics.rs b/rust/main/hyperlane-base/src/contract_sync/cursors/metrics.rs new file mode 100644 index 0000000000..8918da99f9 --- /dev/null +++ b/rust/main/hyperlane-base/src/contract_sync/cursors/metrics.rs @@ -0,0 +1,65 @@ +use prometheus::IntGaugeVec; + +use crate::CoreMetrics; + +/// Struct encapsulating prometheus metrics used by SequenceAware and RateLimited cursors. +#[derive(Debug, Clone)] +pub struct CursorMetrics { + /// Current block of the cursor. + /// Used by both sequence aware and rate limited cursors. + /// Labels: + /// - `event_type`: the event type the cursor is indexing. Could be anything implementing `Indexable`. + /// - `chain`: Chain the cursor is collecting data from. + /// - `cursor_type`: The type of cursor. E.g. `forward_sequenced`, `backward_sequenced`, `forward_rate_limited`. + pub cursor_current_block: IntGaugeVec, + + /// Current sequence of the cursor. + /// Only used by sequence aware cursors. + /// Labels: + /// - `event_type`: the event type the cursor is indexing. Could be anything implementing `Indexable`. + /// - `chain`: Chain the cursor is collecting data from. + /// - `cursor_type`: The type of cursor. E.g. `forward_sequenced`, `backward_sequenced`, `forward_rate_limited`. + pub cursor_current_sequence: IntGaugeVec, + + /// Max sequence of the cursor. + /// Only used by sequence aware cursors. + /// Labels: + /// - `event_type`: the event type the cursor is indexing. Could be anything implementing `Indexable`. + /// - `chain`: Chain the cursor is collecting data from. + pub cursor_max_sequence: IntGaugeVec, +} + +impl CursorMetrics { + /// Instantiate a new CursorMetrics object. + pub fn new(metrics: &CoreMetrics) -> Self { + let cursor_current_block = metrics + .new_int_gauge( + "cursor_current_block", + "Current block of the cursor", + &["event_type", "chain", "cursor_type"], + ) + .expect("failed to register cursor_current_block metric"); + + let cursor_current_sequence = metrics + .new_int_gauge( + "cursor_current_sequence", + "Current sequence of the cursor", + &["event_type", "chain", "cursor_type"], + ) + .expect("failed to register cursor_current_sequence metric"); + + let cursor_max_sequence = metrics + .new_int_gauge( + "cursor_max_sequence", + "Max sequence of the cursor", + &["event_type", "chain"], + ) + .expect("failed to register cursor_max_sequence metric"); + + CursorMetrics { + cursor_current_block, + cursor_current_sequence, + cursor_max_sequence, + } + } +} diff --git a/rust/main/hyperlane-base/src/contract_sync/cursors/mod.rs b/rust/main/hyperlane-base/src/contract_sync/cursors/mod.rs index 563d0fcc74..2fb36453e4 100644 --- a/rust/main/hyperlane-base/src/contract_sync/cursors/mod.rs +++ b/rust/main/hyperlane-base/src/contract_sync/cursors/mod.rs @@ -1,13 +1,16 @@ -pub(crate) mod sequence_aware; - use hyperlane_core::{ Delivery, HyperlaneDomainProtocol, HyperlaneMessage, InterchainGasPayment, MerkleTreeInsertion, }; + +pub(crate) mod sequence_aware; pub(crate) use sequence_aware::ForwardBackwardSequenceAwareSyncCursor; pub(crate) mod rate_limited; pub(crate) use rate_limited::RateLimitedContractSyncCursor; +pub(crate) mod metrics; +pub(crate) use metrics::CursorMetrics; + pub enum CursorType { SequenceAware, RateLimited, @@ -24,6 +27,8 @@ pub trait Indexable { fn broadcast_channel_size() -> Option { None } + /// Returns the name of the type for metrics. + fn name() -> &'static str; } impl Indexable for HyperlaneMessage { @@ -40,6 +45,10 @@ impl Indexable for HyperlaneMessage { fn broadcast_channel_size() -> Option { TX_ID_CHANNEL_CAPACITY } + + fn name() -> &'static str { + "hyperlane_message" + } } impl Indexable for InterchainGasPayment { @@ -51,6 +60,10 @@ impl Indexable for InterchainGasPayment { HyperlaneDomainProtocol::Cosmos => CursorType::RateLimited, } } + + fn name() -> &'static str { + "interchain_gas_payment" + } } impl Indexable for MerkleTreeInsertion { @@ -62,6 +75,10 @@ impl Indexable for MerkleTreeInsertion { HyperlaneDomainProtocol::Cosmos => CursorType::SequenceAware, } } + + fn name() -> &'static str { + "merkle_tree_insertion" + } } impl Indexable for Delivery { @@ -73,4 +90,8 @@ impl Indexable for Delivery { HyperlaneDomainProtocol::Cosmos => CursorType::RateLimited, } } + + fn name() -> &'static str { + "delivery" + } } diff --git a/rust/main/hyperlane-base/src/contract_sync/cursors/rate_limited.rs b/rust/main/hyperlane-base/src/contract_sync/cursors/rate_limited.rs index 9428d6bfd4..88c5784824 100644 --- a/rust/main/hyperlane-base/src/contract_sync/cursors/rate_limited.rs +++ b/rust/main/hyperlane-base/src/contract_sync/cursors/rate_limited.rs @@ -8,12 +8,16 @@ use std::{ use async_trait::async_trait; use derive_new::new; use eyre::Result; + use hyperlane_core::{ - ContractSyncCursor, CursorAction, HyperlaneWatermarkedLogStore, Indexed, Indexer, LogMeta, + ContractSyncCursor, CursorAction, HyperlaneDomain, HyperlaneWatermarkedLogStore, Indexed, + Indexer, LogMeta, }; use crate::contract_sync::eta_calculator::SyncerEtaCalculator; +use super::{CursorMetrics, Indexable}; + /// Time window for the moving average used in the eta calculator in seconds. const ETA_TIME_WINDOW: f64 = 2. * 60.; @@ -83,12 +87,16 @@ pub(crate) struct RateLimitedContractSyncCursor { last_tip_update: Instant, eta_calculator: SyncerEtaCalculator, sync_state: SyncState, + metrics: Arc, + domain: HyperlaneDomain, } -impl RateLimitedContractSyncCursor { +impl RateLimitedContractSyncCursor { /// Construct a new contract sync helper. pub async fn new( indexer: Arc>, + metrics: Arc, + domain: &HyperlaneDomain, store: Arc>, chunk_size: u32, initial_height: u32, @@ -107,6 +115,8 @@ impl RateLimitedContractSyncCursor { // The rate limited cursor currently only syncs in the forward direction. SyncDirection::Forward, ), + metrics, + domain: domain.to_owned(), }) } @@ -155,12 +165,24 @@ impl RateLimitedContractSyncCursor { Duration::from_secs(0) } } + + async fn update_metrics(&self) { + let latest_block = self.latest_queried_block(); + let chain_name = self.domain.name(); + // The rate limited cursor currently only syncs in the forward direction. + let label_values = &[T::name(), chain_name, "forward_rate_limited"]; + + self.metrics + .cursor_current_block + .with_label_values(label_values) + .set(latest_block as i64); + } } #[async_trait] impl ContractSyncCursor for RateLimitedContractSyncCursor where - T: Send + Sync + Debug + 'static, + T: Indexable + Send + Sync + Debug + 'static, { async fn next_action(&mut self) -> Result<(CursorAction, Duration)> { let eta = self.sync_eta(); @@ -187,6 +209,7 @@ where _: Vec<(Indexed, LogMeta)>, range: RangeInclusive, ) -> Result<()> { + self.update_metrics().await; // Store a relatively conservative view of the high watermark, which should allow a single watermark to be // safely shared across multiple cursors, so long as they are running sufficiently in sync self.store @@ -216,12 +239,13 @@ where } } -impl Debug for RateLimitedContractSyncCursor { +impl Debug for RateLimitedContractSyncCursor { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("RateLimitedContractSyncCursor") .field("tip", &self.tip) .field("last_tip_update", &self.last_tip_update) .field("sync_state", &self.sync_state) + .field("domain", &self.domain) .finish() } } @@ -229,50 +253,92 @@ impl Debug for RateLimitedContractSyncCursor { #[cfg(test)] pub(crate) mod test { use super::*; - use hyperlane_core::{ChainResult, HyperlaneLogStore}; + use crate::cursors::CursorType; + use hyperlane_core::{ChainResult, HyperlaneDomainProtocol, HyperlaneLogStore}; use mockall::{self, Sequence}; const CHUNK_SIZE: u32 = 10; const INITIAL_HEIGHT: u32 = 0; + #[derive(Debug, Clone)] + struct MockIndexable; + + unsafe impl Sync for MockIndexable {} + unsafe impl Send for MockIndexable {} + + impl Indexable for MockIndexable { + fn indexing_cursor(_domain: HyperlaneDomainProtocol) -> CursorType { + CursorType::RateLimited + } + + fn name() -> &'static str { + "mock_indexable" + } + } + mockall::mock! { - pub Indexer {} + pub Indexer {} - impl Debug for Indexer { + impl Debug for Indexer { fn fmt<'a>(&self, f: &mut std::fmt::Formatter<'a>) -> std::fmt::Result; } #[async_trait] - impl Indexer<()> for Indexer { - async fn fetch_logs_in_range(&self, range: RangeInclusive) -> ChainResult , LogMeta)>>; + impl Indexer for Indexer { + async fn fetch_logs_in_range(&self, range: RangeInclusive) -> ChainResult, LogMeta)>>; async fn get_finalized_block_number(&self) -> ChainResult; } } mockall::mock! { - pub Db {} + pub Db {} - impl Debug for Db { + impl Debug for Db { fn fmt<'a>(&self, f: &mut std::fmt::Formatter<'a>) -> std::fmt::Result; } #[async_trait] - impl HyperlaneLogStore<()> for Db { - async fn store_logs(&self, logs: &[(hyperlane_core::Indexed<()> , LogMeta)]) -> Result; + impl HyperlaneLogStore for Db { + async fn store_logs(&self, logs: &[(hyperlane_core::Indexed, LogMeta)]) -> Result; } #[async_trait] - impl HyperlaneWatermarkedLogStore<()> for Db { + impl HyperlaneWatermarkedLogStore for Db { async fn retrieve_high_watermark(&self) -> Result>; async fn store_high_watermark(&self, block_number: u32) -> Result<()>; } } - async fn mock_rate_limited_cursor( + fn mock_cursor_metrics() -> CursorMetrics { + CursorMetrics { + cursor_current_block: prometheus::IntGaugeVec::new( + prometheus::Opts::new("cursor_current_block", "Current block of the cursor") + .namespace("mock") + .subsystem("cursor"), + &["event_type", "chain", "cursor_type"], + ) + .unwrap(), + cursor_current_sequence: prometheus::IntGaugeVec::new( + prometheus::Opts::new("cursor_current_sequence", "Current sequence of the cursor") + .namespace("mock") + .subsystem("cursor"), + &["event_type", "chain", "cursor_type"], + ) + .unwrap(), + cursor_max_sequence: prometheus::IntGaugeVec::new( + prometheus::Opts::new("cursor_max_sequence", "Max sequence of the cursor") + .namespace("mock") + .subsystem("cursor"), + &["event_type", "chain"], + ) + .unwrap(), + } + } + async fn mock_rate_limited_cursor( custom_chain_tips: Option>, - ) -> RateLimitedContractSyncCursor<()> { + ) -> RateLimitedContractSyncCursor { let mut seq = Sequence::new(); - let mut indexer = MockIndexer::new(); + let mut indexer = MockIndexer::::new(); match custom_chain_tips { Some(chain_tips) => { for tip in chain_tips { @@ -294,11 +360,14 @@ pub(crate) mod test { } let mut db = MockDb::new(); + let metrics = mock_cursor_metrics(); db.expect_store_high_watermark().returning(|_| Ok(())); let chunk_size = CHUNK_SIZE; let initial_height = INITIAL_HEIGHT; RateLimitedContractSyncCursor::new( Arc::new(indexer), + Arc::new(metrics), + &HyperlaneDomain::new_test_domain("test"), Arc::new(db), chunk_size, initial_height, @@ -309,7 +378,7 @@ pub(crate) mod test { #[tokio::test] async fn test_next_action_retries_if_update_isnt_called() { - let mut cursor = mock_rate_limited_cursor(None).await; + let mut cursor = mock_rate_limited_cursor::(None).await; let (action_1, _) = cursor.next_action().await.unwrap(); let (_action_2, _) = cursor.next_action().await.unwrap(); @@ -319,7 +388,7 @@ pub(crate) mod test { #[tokio::test] async fn test_next_action_changes_if_update_is_called() { - let mut cursor = mock_rate_limited_cursor(None).await; + let mut cursor = mock_rate_limited_cursor::(None).await; let (action_1, _) = cursor.next_action().await.unwrap(); let range = match action_1 { @@ -336,7 +405,7 @@ pub(crate) mod test { #[tokio::test] async fn test_next_action_sleeps_if_tip_is_not_updated() { let chain_tips = vec![10]; - let mut cursor = mock_rate_limited_cursor(Some(chain_tips)).await; + let mut cursor = mock_rate_limited_cursor::(Some(chain_tips)).await; let (action, _) = cursor.next_action().await.unwrap(); assert!(matches!(action, CursorAction::Sleep(_))); } diff --git a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/backward.rs b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/backward.rs index 179ae3dd3c..d7c9396ca9 100644 --- a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/backward.rs +++ b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/backward.rs @@ -4,15 +4,19 @@ use std::{collections::HashSet, fmt::Debug, ops::RangeInclusive, sync::Arc, time use async_trait::async_trait; use eyre::Result; -use hyperlane_core::{ - indexed_to_sequence_indexed_array, ContractSyncCursor, CursorAction, - HyperlaneSequenceAwareIndexerStoreReader, IndexMode, Indexed, LogMeta, SequenceIndexed, -}; use itertools::Itertools; +use maplit::hashmap; use tokio::time::sleep; use tracing::{debug, instrument, warn}; -use super::{LastIndexedSnapshot, TargetSnapshot}; +use hyperlane_core::{ + indexed_to_sequence_indexed_array, ContractSyncCursor, CursorAction, HyperlaneDomain, + HyperlaneSequenceAwareIndexerStoreReader, IndexMode, Indexed, LogMeta, SequenceIndexed, +}; + +use crate::cursors::Indexable; + +use super::{CursorMetrics, LastIndexedSnapshot, MetricsData, TargetSnapshot}; const MAX_BACKWARD_SYNC_BLOCKING_TIME: Duration = Duration::from_secs(5); @@ -33,6 +37,10 @@ pub(crate) struct BackwardSequenceAwareSyncCursor { current_indexing_snapshot: Option, /// The mode of indexing to use. index_mode: IndexMode, + /// The domain of the cursor. + domain: HyperlaneDomain, + /// Cursor metrics. + metrics: Arc, } impl Debug for BackwardSequenceAwareSyncCursor { @@ -42,13 +50,14 @@ impl Debug for BackwardSequenceAwareSyncCursor { .field("last_indexed_snapshot", &self.last_indexed_snapshot) .field("current_indexing_snapshot", &self.current_indexing_snapshot) .field("index_mode", &self.index_mode) + .field("domain", &self.domain) .finish() } } -impl BackwardSequenceAwareSyncCursor { +impl BackwardSequenceAwareSyncCursor { #[instrument( - skip(store), + skip(store, metrics_data), fields(chunk_size, next_sequence, start_block, index_mode), ret )] @@ -58,6 +67,7 @@ impl BackwardSequenceAwareSyncCursor { current_sequence_count: u32, start_block: u32, index_mode: IndexMode, + metrics_data: MetricsData, ) -> Self { // If the current sequence count is 0, we haven't indexed anything yet. // Otherwise, consider the current sequence count as the last indexed snapshot, @@ -66,6 +76,7 @@ impl BackwardSequenceAwareSyncCursor { sequence: (current_sequence_count > 0).then_some(current_sequence_count), at_block: start_block, }; + let MetricsData { domain, metrics } = metrics_data; Self { chunk_size, @@ -73,9 +84,16 @@ impl BackwardSequenceAwareSyncCursor { current_indexing_snapshot: last_indexed_snapshot.previous_target(), last_indexed_snapshot, index_mode, + domain, + metrics, } } + /// Get the last indexed sequence or 0 if no logs have been indexed yet. + pub fn last_sequence(&self) -> u32 { + self.last_indexed_snapshot.sequence.unwrap_or(0) + } + /// Gets the next range of logs to query. /// If the cursor is fully synced, this returns None. /// Otherwise, it returns the next range to query, either by block or sequence depending on the mode. @@ -325,10 +343,31 @@ impl BackwardSequenceAwareSyncCursor { fn rewind(&mut self) { self.current_indexing_snapshot = self.last_indexed_snapshot.previous_target(); } + + /// Updates the cursor metrics. + async fn update_metrics(&self) { + let labels = hashmap! { + "event_type" => T::name(), + "chain" => self.domain.name(), + "cursor_type" => "backward_sequenced", + }; + + let latest_block = self.latest_queried_block(); + self.metrics + .cursor_current_block + .with(&labels) + .set(latest_block as i64); + + let sequence = self.last_sequence(); + self.metrics + .cursor_current_sequence + .with(&labels) + .set(sequence as i64); + } } #[async_trait] -impl ContractSyncCursor +impl ContractSyncCursor for BackwardSequenceAwareSyncCursor { async fn next_action(&mut self) -> Result<(CursorAction, Duration)> { @@ -364,6 +403,7 @@ impl ContractSyncCursor logs: Vec<(Indexed, LogMeta)>, range: RangeInclusive, ) -> Result<()> { + self.update_metrics().await; let Some(current_indexing_snapshot) = self.current_indexing_snapshot.clone() else { // We're synced, no need to update at all. return Ok(()); @@ -400,6 +440,8 @@ impl ContractSyncCursor #[cfg(test)] mod test { + use hyperlane_core::HyperlaneDomain; + use super::super::forward::test::*; use super::*; @@ -435,12 +477,17 @@ mod test { ], }); + let metrics_data = MetricsData { + domain: HyperlaneDomain::new_test_domain("test"), + metrics: Arc::new(mock_cursor_metrics()), + }; let mut cursor = BackwardSequenceAwareSyncCursor::new( chunk_size, db, INITIAL_SEQUENCE_COUNT, INITIAL_START_BLOCK, mode, + metrics_data, ); // Skip any already indexed logs and sanity check we start at the correct spot. @@ -767,12 +814,17 @@ mod test { .collect(), }); + let metrics_data = MetricsData { + domain: HyperlaneDomain::new_test_domain("test"), + metrics: Arc::new(mock_cursor_metrics()), + }; let mut cursor = BackwardSequenceAwareSyncCursor::new( CHUNK_SIZE, db, INITIAL_SEQUENCE_COUNT, INITIAL_START_BLOCK, INDEX_MODE, + metrics_data, ); // We're fully synced, so expect no range diff --git a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs index 967f4e6053..79917dd663 100644 --- a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs +++ b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs @@ -7,15 +7,19 @@ use std::{ use async_trait::async_trait; use eyre::Result; +use itertools::Itertools; +use maplit::hashmap; +use tracing::{debug, instrument, warn}; + use hyperlane_core::{ - indexed_to_sequence_indexed_array, ContractSyncCursor, CursorAction, + indexed_to_sequence_indexed_array, ContractSyncCursor, CursorAction, HyperlaneDomain, HyperlaneSequenceAwareIndexerStoreReader, IndexMode, Indexed, LogMeta, SequenceAwareIndexer, SequenceIndexed, }; -use itertools::Itertools; -use tracing::{debug, instrument, warn}; -use super::{LastIndexedSnapshot, TargetSnapshot}; +use crate::cursors::Indexable; + +use super::{CursorMetrics, LastIndexedSnapshot, MetricsData, TargetSnapshot}; /// A sequence-aware cursor that syncs forwards in perpetuity. pub(crate) struct ForwardSequenceAwareSyncCursor { @@ -39,6 +43,10 @@ pub(crate) struct ForwardSequenceAwareSyncCursor { target_snapshot: Option, /// The mode of indexing. index_mode: IndexMode, + /// The domain the cursor is indexing. + domain: HyperlaneDomain, + /// Cursor metrics. + metrics: Arc, } impl Debug for ForwardSequenceAwareSyncCursor { @@ -49,13 +57,14 @@ impl Debug for ForwardSequenceAwareSyncCursor { .field("current_indexing_snapshot", &self.current_indexing_snapshot) .field("target_snapshot", &self.target_snapshot) .field("index_mode", &self.index_mode) + .field("domain", &self.domain) .finish() } } -impl ForwardSequenceAwareSyncCursor { +impl ForwardSequenceAwareSyncCursor { #[instrument( - skip(store, latest_sequence_querier), + skip(store, latest_sequence_querier, metrics_data), fields(chunk_size, next_sequence, start_block, index_mode), ret )] @@ -66,6 +75,7 @@ impl ForwardSequenceAwareSyncCursor { next_sequence: u32, start_block: u32, index_mode: IndexMode, + metrics_data: MetricsData, ) -> Self { // If the next sequence is 0, we're starting from the beginning and haven't // indexed anything yet. @@ -73,6 +83,7 @@ impl ForwardSequenceAwareSyncCursor { sequence: (next_sequence > 0).then(|| next_sequence.saturating_sub(1)), at_block: start_block, }; + let MetricsData { domain, metrics } = metrics_data; Self { chunk_size, @@ -85,9 +96,27 @@ impl ForwardSequenceAwareSyncCursor { }, target_snapshot: None, index_mode, + domain, + metrics, } } + /// Get target sequence or return 0 if request failed + pub async fn target_sequence(&self) -> u32 { + let (count, _) = self + .latest_sequence_querier + .latest_sequence_count_and_tip() + .await + .ok() + .unwrap_or((None, 0)); + count.unwrap_or(0).saturating_sub(1) + } + + /// Get the last indexed sequence or 0 if no logs have been indexed yet. + pub fn last_sequence(&self) -> u32 { + self.last_indexed_snapshot.sequence.unwrap_or(0) + } + /// Gets the next range of logs to index. /// If there are no logs to index, returns `None`. /// If there are logs to index, returns the range of logs, either by sequence or block number @@ -401,10 +430,38 @@ impl ForwardSequenceAwareSyncCursor { fn rewind(&mut self) { self.current_indexing_snapshot = self.last_indexed_snapshot.next_target(); } + + // Updates the cursor metrics. + async fn update_metrics(&self) { + let mut labels = hashmap! { + "event_type" => T::name(), + "chain" => self.domain.name(), + "cursor_type" => "forward_sequenced", + }; + + let latest_block = self.latest_queried_block(); + self.metrics + .cursor_current_block + .with(&labels) + .set(latest_block as i64); + + let sequence = self.last_sequence(); + self.metrics + .cursor_current_sequence + .with(&labels) + .set(sequence as i64); + + labels.remove("cursor_type"); + let max_sequence = self.target_sequence().await as i64; + self.metrics + .cursor_max_sequence + .with(&labels) + .set(max_sequence); + } } #[async_trait] -impl ContractSyncCursor +impl ContractSyncCursor for ForwardSequenceAwareSyncCursor { async fn next_action(&mut self) -> Result<(CursorAction, Duration)> { @@ -444,6 +501,7 @@ impl ContractSyncCursor logs: Vec<(Indexed, LogMeta)>, range: RangeInclusive, ) -> Result<()> { + self.update_metrics().await; // Remove any sequence duplicates, filter out any logs preceding our current snapshot, // and sort in ascending order. let logs = indexed_to_sequence_indexed_array(logs)? @@ -469,7 +527,11 @@ impl ContractSyncCursor #[cfg(test)] pub(crate) mod test { use derive_new::new; - use hyperlane_core::{ChainResult, HyperlaneLogStore, Indexed, Indexer, Sequenced}; + use hyperlane_core::{ + ChainResult, HyperlaneDomainProtocol, HyperlaneLogStore, Indexed, Indexer, Sequenced, + }; + + use crate::cursors::CursorType; use super::*; @@ -482,7 +544,7 @@ pub(crate) mod test { #[async_trait] impl SequenceAwareIndexer for MockLatestSequenceQuerier where - T: Sequenced + Debug, + T: Sequenced + Debug + Clone + Send + Sync + Indexable + 'static, { async fn latest_sequence_count_and_tip(&self) -> ChainResult<(Option, u32)> { Ok((self.latest_sequence_count, self.tip)) @@ -492,7 +554,7 @@ pub(crate) mod test { #[async_trait] impl Indexer for MockLatestSequenceQuerier where - T: Sequenced + Debug, + T: Sequenced + Debug + Clone + Send + Sync + Indexable + 'static, { async fn fetch_logs_in_range( &self, @@ -512,15 +574,17 @@ pub(crate) mod test { } #[async_trait] - impl HyperlaneLogStore for MockHyperlaneSequenceAwareIndexerStore { + impl HyperlaneLogStore + for MockHyperlaneSequenceAwareIndexerStore + { async fn store_logs(&self, logs: &[(Indexed, LogMeta)]) -> eyre::Result { Ok(logs.len() as u32) } } #[async_trait] - impl HyperlaneSequenceAwareIndexerStoreReader - for MockHyperlaneSequenceAwareIndexerStore + impl + HyperlaneSequenceAwareIndexerStoreReader for MockHyperlaneSequenceAwareIndexerStore { async fn retrieve_by_sequence(&self, sequence: u32) -> eyre::Result> { Ok(self @@ -547,6 +611,9 @@ pub(crate) mod test { pub sequence: u32, } + unsafe impl Sync for MockSequencedData {} + unsafe impl Send for MockSequencedData {} + impl From for Indexed { fn from(val: MockSequencedData) -> Self { let sequence = val.sequence; @@ -554,12 +621,48 @@ pub(crate) mod test { } } + impl Indexable for MockSequencedData { + fn indexing_cursor(_domain: HyperlaneDomainProtocol) -> CursorType { + CursorType::SequenceAware + } + + fn name() -> &'static str { + "mock_indexable" + } + } + impl Sequenced for MockSequencedData { fn sequence(&self) -> Option { Some(self.sequence) } } + pub fn mock_cursor_metrics() -> CursorMetrics { + CursorMetrics { + cursor_current_block: prometheus::IntGaugeVec::new( + prometheus::Opts::new("cursor_current_block", "Current block of the cursor") + .namespace("mock") + .subsystem("cursor"), + &["event_type", "chain", "cursor_type"], + ) + .unwrap(), + cursor_current_sequence: prometheus::IntGaugeVec::new( + prometheus::Opts::new("cursor_current_sequence", "Current sequence of the cursor") + .namespace("mock") + .subsystem("cursor"), + &["event_type", "chain", "cursor_type"], + ) + .unwrap(), + cursor_max_sequence: prometheus::IntGaugeVec::new( + prometheus::Opts::new("cursor_max_sequence", "Max sequence of the cursor") + .namespace("mock") + .subsystem("cursor"), + &["event_type", "chain"], + ) + .unwrap(), + } + } + pub fn log_meta_with_block(block_number: u64) -> LogMeta { LogMeta { address: Default::default(), @@ -603,6 +706,10 @@ pub(crate) mod test { ], }); + let metrics_data = MetricsData { + domain: HyperlaneDomain::new_test_domain("test"), + metrics: Arc::new(mock_cursor_metrics()), + }; let mut cursor = ForwardSequenceAwareSyncCursor::new( chunk_size, latest_sequence_querier, @@ -611,6 +718,7 @@ pub(crate) mod test { 3, 70, mode, + metrics_data, ); // Skip any already indexed logs and sanity check we start at the correct spot. diff --git a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/mod.rs b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/mod.rs index 74e7ebe014..1e48686379 100644 --- a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/mod.rs +++ b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/mod.rs @@ -1,12 +1,13 @@ +use std::ops::RangeInclusive; use std::{fmt::Debug, sync::Arc, time::Duration}; use async_trait::async_trait; use eyre::Result; + use hyperlane_core::{ - ChainCommunicationError, ContractSyncCursor, CursorAction, + ChainCommunicationError, ContractSyncCursor, CursorAction, HyperlaneDomain, HyperlaneSequenceAwareIndexerStoreReader, IndexMode, Indexed, LogMeta, SequenceAwareIndexer, }; -use std::ops::RangeInclusive; mod backward; mod forward; @@ -14,6 +15,8 @@ mod forward; pub(crate) use backward::BackwardSequenceAwareSyncCursor; pub(crate) use forward::ForwardSequenceAwareSyncCursor; +use super::{CursorMetrics, Indexable}; + #[derive(Debug, Clone, PartialEq, Eq)] struct LastIndexedSnapshot { /// The last sequence that was indexed. @@ -26,6 +29,13 @@ struct LastIndexedSnapshot { pub at_block: u32, } +/// Used to avoid going over the `instrument` macro limit. +#[derive(Debug, Clone)] +struct MetricsData { + pub domain: HyperlaneDomain, + pub metrics: Arc, +} + impl LastIndexedSnapshot { fn next_target(&self) -> TargetSnapshot { TargetSnapshot { @@ -69,9 +79,13 @@ pub(crate) struct ForwardBackwardSequenceAwareSyncCursor { last_direction: SyncDirection, } -impl ForwardBackwardSequenceAwareSyncCursor { +impl + ForwardBackwardSequenceAwareSyncCursor +{ /// Construct a new contract sync helper. pub async fn new( + domain: &HyperlaneDomain, + metrics: Arc, latest_sequence_querier: Arc>, store: Arc>, chunk_size: u32, @@ -83,6 +97,10 @@ impl ForwardBackwardSequenceAwareSyncCursor { let sequence_count = sequence_count.ok_or(ChainCommunicationError::from_other_str( "Failed to query sequence", ))?; + let metrics_data = MetricsData { + domain: domain.to_owned(), + metrics, + }; let forward_cursor = ForwardSequenceAwareSyncCursor::new( chunk_size, latest_sequence_querier.clone(), @@ -90,9 +108,16 @@ impl ForwardBackwardSequenceAwareSyncCursor { sequence_count, tip, mode, + metrics_data.clone(), + ); + let backward_cursor = BackwardSequenceAwareSyncCursor::new( + chunk_size, + store, + sequence_count, + tip, + mode, + metrics_data, ); - let backward_cursor = - BackwardSequenceAwareSyncCursor::new(chunk_size, store, sequence_count, tip, mode); Ok(Self { forward: forward_cursor, backward: backward_cursor, @@ -102,7 +127,7 @@ impl ForwardBackwardSequenceAwareSyncCursor { } #[async_trait] -impl ContractSyncCursor +impl ContractSyncCursor for ForwardBackwardSequenceAwareSyncCursor { async fn next_action(&mut self) -> Result<(CursorAction, Duration)> { diff --git a/rust/main/hyperlane-base/src/contract_sync/metrics.rs b/rust/main/hyperlane-base/src/contract_sync/metrics.rs index 30f3fd02bf..54e3c7a2cb 100644 --- a/rust/main/hyperlane-base/src/contract_sync/metrics.rs +++ b/rust/main/hyperlane-base/src/contract_sync/metrics.rs @@ -1,6 +1,11 @@ -use crate::CoreMetrics; +use std::sync::Arc; + use prometheus::{IntCounterVec, IntGaugeVec}; +use crate::CoreMetrics; + +use super::cursors::CursorMetrics; + /// Struct encapsulating prometheus metrics used by the ContractSync. #[derive(Debug, Clone)] pub struct ContractSyncMetrics { @@ -20,6 +25,9 @@ pub struct ContractSyncMetrics { /// See `last_known_message_nonce` in CoreMetrics. pub message_nonce: IntGaugeVec, + + /// Metrics for SequenceAware and RateLimited cursors. + pub cursor_metrics: Arc, } impl ContractSyncMetrics { @@ -42,11 +50,13 @@ impl ContractSyncMetrics { .expect("failed to register stored_events metric"); let message_nonce = metrics.last_known_message_nonce(); + let cursor_metrics = Arc::new(CursorMetrics::new(metrics)); ContractSyncMetrics { indexed_height, stored_events, message_nonce, + cursor_metrics, } } } diff --git a/rust/main/hyperlane-base/src/contract_sync/mod.rs b/rust/main/hyperlane-base/src/contract_sync/mod.rs index df9563d8a7..c9048b4808 100644 --- a/rust/main/hyperlane-base/src/contract_sync/mod.rs +++ b/rust/main/hyperlane-base/src/contract_sync/mod.rs @@ -312,6 +312,8 @@ where Ok(Box::new( RateLimitedContractSyncCursor::new( Arc::new(self.indexer.clone()), + self.metrics.cursor_metrics.clone(), + self.domain(), self.store.clone(), index_settings.chunk_size, index_settings.from, @@ -352,6 +354,8 @@ where ) -> Result>> { Ok(Box::new( ForwardBackwardSequenceAwareSyncCursor::new( + self.domain(), + self.metrics.cursor_metrics.clone(), self.indexer.clone(), Arc::new(self.store.clone()), index_settings.chunk_size, diff --git a/rust/main/hyperlane-core/src/chain.rs b/rust/main/hyperlane-core/src/chain.rs index 134881bf71..97637fafa5 100644 --- a/rust/main/hyperlane-core/src/chain.rs +++ b/rust/main/hyperlane-core/src/chain.rs @@ -171,11 +171,15 @@ pub enum KnownHyperlaneDomain { SolanaMainnet = 1399811149, Taiko = 167000, Tangle = 5845, + Treasure = 61166, Viction = 88, Worldchain = 480, Xai = 660279, Xlayer = 196, Zetachain = 7000, + Zeronetwork = 543210, + Zklink = 810180, + Zksync = 324, Zircuit = 48900, ZoraMainnet = 7777777, @@ -192,6 +196,7 @@ pub enum KnownHyperlaneDomain { // -- Test chains -- // + Abstracttestnet = 11124, Alfajores = 44787, #[cfg_attr(feature = "strum", strum(serialize = "bsctestnet"))] BinanceSmartChainTestnet = 97, @@ -203,6 +208,7 @@ pub enum KnownHyperlaneDomain { ScrollSepolia = 534351, Sepolia = 11155111, SuperpositionTestnet = 98985, + Treasuretopaz = 978658, } #[derive(Clone, Serialize)] @@ -319,12 +325,12 @@ impl KnownHyperlaneDomain { DegenChain, EclipseMainnet, Endurance, Ethereum, Fraxtal, FuseMainnet, Gnosis, InEvm, Injective, Kroma, Linea, Lisk, Lukso, MantaPacific, Mantle, Merlin, Metis, Mint, Mode, Moonbeam, Neutron, Optimism, Osmosis, Polygon, ProofOfPlay, - ReAl, Redstone, Sanko, Sei, SolanaMainnet, Taiko, Tangle, Viction, Worldchain, Xai, - Xlayer, Zetachain, Zircuit, ZoraMainnet, + ReAl, Redstone, Sanko, Sei, SolanaMainnet, Taiko, Tangle, Treasure, Viction, Worldchain, Xai, + Xlayer, Zeronetwork, Zetachain, Zircuit, Zklink, Zksync, ZoraMainnet, ], Testnet: [ Alfajores, BinanceSmartChainTestnet, Chiado, ConnextSepolia, Fuji, Holesky, MoonbaseAlpha, - PlumeTestnet, ScrollSepolia, Sepolia, SuperpositionTestnet + PlumeTestnet, ScrollSepolia, Sepolia, SuperpositionTestnet, Abstracttestnet, Treasuretopaz ], LocalTestChain: [ Test1, Test2, Test3, FuelTest1, SealevelTest1, SealevelTest2, CosmosTest99990, @@ -338,11 +344,12 @@ impl KnownHyperlaneDomain { many_to_one!(match self { HyperlaneDomainProtocol::Ethereum: [ - Ancient8, Arbitrum, Avalanche, BinanceSmartChain, Blast, Bob, Celo, Cheesechain, Cyber, + Abstracttestnet, Ancient8, Arbitrum, Avalanche, BinanceSmartChain, Blast, Bob, Celo, Cheesechain, Cyber, DegenChain, Endurance, Ethereum, Fraxtal, Fuji, FuseMainnet, Gnosis, InEvm, Kroma, Linea, Lisk, Lukso, MantaPacific, Mantle, Merlin, Metis, Mint, Mode, Moonbeam, Optimism, Polygon, ProofOfPlay, ReAl, Redstone, Sanko, Sei, Tangle, - Taiko, Viction, Worldchain, Xai, Xlayer, Zetachain, Zircuit, ZoraMainnet, + Taiko, Treasure, Treasuretopaz, Viction, Worldchain, Xai, Xlayer, Zeronetwork, Zetachain, Zircuit, ZoraMainnet, + Zklink, Zksync, // Local chains Test1, Test2, Test3, @@ -383,7 +390,9 @@ impl KnownHyperlaneDomain { HyperlaneDomainTechnicalStack::PolkadotSubstrate: [ Moonbeam, Tangle ], - HyperlaneDomainTechnicalStack::ZkSync: [], + HyperlaneDomainTechnicalStack::ZkSync: [ + Abstracttestnet, Treasure, Treasuretopaz, Zeronetwork, Zklink, Zksync, + ], HyperlaneDomainTechnicalStack::Other: [ Avalanche, BinanceSmartChain, Celo, EclipseMainnet, Endurance, Ethereum, FuseMainnet, Gnosis, Injective, Linea, Lukso, Neutron, Osmosis, Polygon, @@ -572,6 +581,13 @@ impl HyperlaneDomain { matches!(self, Self::Known(KnownHyperlaneDomain::Injective)) } + pub const fn is_zksync_stack(&self) -> bool { + matches!( + self.domain_technical_stack(), + HyperlaneDomainTechnicalStack::ZkSync + ) + } + pub const fn index_mode(&self) -> IndexMode { use HyperlaneDomainProtocol::*; let protocol = self.domain_protocol(); diff --git a/rust/sealevel/client/src/warp_route.rs b/rust/sealevel/client/src/warp_route.rs index a185544501..d25dddd1cf 100644 --- a/rust/sealevel/client/src/warp_route.rs +++ b/rust/sealevel/client/src/warp_route.rs @@ -670,7 +670,7 @@ pub fn install_spl_token_cli() { "--branch", "dan/create-token-for-mint", "--rev", - "c1278a3f1", + "ae4c8ac46", ]) .stdout(Stdio::inherit()) .stderr(Stdio::inherit()) diff --git a/typescript/cli/package.json b/typescript/cli/package.json index 7940f8e756..3a249e154c 100644 --- a/typescript/cli/package.json +++ b/typescript/cli/package.json @@ -43,7 +43,8 @@ "eslint-plugin-import": "^2.31.0", "mocha": "^10.2.0", "prettier": "^2.8.8", - "typescript": "5.3.3" + "typescript": "5.3.3", + "zksync-ethers": "^5.10.0" }, "scripts": { "hyperlane": "node ./dist/cli.js", diff --git a/typescript/cli/src/commands/send.ts b/typescript/cli/src/commands/send.ts index 1167b3b559..7879523a19 100644 --- a/typescript/cli/src/commands/send.ts +++ b/typescript/cli/src/commands/send.ts @@ -17,17 +17,13 @@ export const sendCommand: CommandModule = { }; /** - * Message command + * Base options for all message/warp send/status commands */ export const messageOptions: { [k: string]: Options } = { origin: { type: 'string', description: 'Origin chain to send message from', }, - destination: { - type: 'string', - description: 'Destination chain to send message to', - }, timeout: { type: 'number', description: 'Timeout in seconds', @@ -45,6 +41,17 @@ export const messageOptions: { [k: string]: Options } = { }, }; +/** + * Options for message/warp send command with destination chain specified + */ +export const messageSendOptions: { [k: string]: Options } = { + ...messageOptions, + destination: { + type: 'string', + description: 'Destination chain to send message to', + }, +}; + export interface MessageOptionsArgTypes { origin?: string; destination?: string; @@ -59,7 +66,7 @@ const messageCommand: CommandModuleWithWriteContext< command: 'message', describe: 'Send a test message to a remote chain', builder: { - ...messageOptions, + ...messageSendOptions, body: { type: 'string', description: 'Optional Message body', diff --git a/typescript/cli/src/commands/status.ts b/typescript/cli/src/commands/status.ts index 2b4c204880..0875b64675 100644 --- a/typescript/cli/src/commands/status.ts +++ b/typescript/cli/src/commands/status.ts @@ -19,12 +19,11 @@ export const statusCommand: CommandModuleWithWriteContext< description: 'Dispatch transaction hash', }, }, - handler: async ({ context, origin, destination, id, relay, dispatchTx }) => { + handler: async ({ context, origin, id, relay, dispatchTx }) => { await checkMessageStatus({ context, dispatchTx, messageId: id, - destination, origin, selfRelay: relay, }); diff --git a/typescript/cli/src/commands/warp.ts b/typescript/cli/src/commands/warp.ts index 3cd99fe6a0..5d09047617 100644 --- a/typescript/cli/src/commands/warp.ts +++ b/typescript/cli/src/commands/warp.ts @@ -40,7 +40,7 @@ import { warpCoreConfigCommandOption, warpDeploymentConfigCommandOption, } from './options.js'; -import { MessageOptionsArgTypes, messageOptions } from './send.js'; +import { MessageOptionsArgTypes, messageSendOptions } from './send.js'; /** * Parent command @@ -245,7 +245,7 @@ const send: CommandModuleWithWriteContext< command: 'send', describe: 'Send a test token transfer on a warp route', builder: { - ...messageOptions, + ...messageSendOptions, symbol: { ...symbolCommandOption, demandOption: false, diff --git a/typescript/cli/src/config/strategy.ts b/typescript/cli/src/config/strategy.ts index f57c7d3378..cb2abaf437 100644 --- a/typescript/cli/src/config/strategy.ts +++ b/typescript/cli/src/config/strategy.ts @@ -10,17 +10,15 @@ import { import { ProtocolType, assert, - errorToString, isAddress, isPrivateKeyEvm, } from '@hyperlane-xyz/utils'; import { CommandContext } from '../context/types.js'; -import { errorRed, log, logBlue, logGreen, logRed } from '../logger.js'; +import { errorRed, log, logBlue, logGreen } from '../logger.js'; import { runSingleChainSelectionStep } from '../utils/chains.js'; import { indentYamlOrJson, - isFile, readYamlOrJson, writeYamlOrJson, } from '../utils/files.js'; @@ -33,38 +31,9 @@ export async function readChainSubmissionStrategyConfig( filePath: string, ): Promise { log(`Reading submission strategy in ${filePath}`); - try { - const strategyConfig = readYamlOrJson(filePath); - - const parseResult = ChainSubmissionStrategySchema.parse(strategyConfig); - - return parseResult; - } catch (error) { - logRed(`⛔️ Error reading strategy config:`, errorToString(error)); - throw error; // Re-throw to let caller handle the error - } -} - -/** - * Safely reads chain submission strategy config, returns empty object if any errors occur - */ -export async function safeReadChainSubmissionStrategyConfig( - filePath: string, -): Promise { - try { - const trimmedFilePath = filePath.trim(); - if (!isFile(trimmedFilePath)) { - logBlue(`File ${trimmedFilePath} does not exist, returning empty config`); - return {}; - } - return await readChainSubmissionStrategyConfig(trimmedFilePath); - } catch (error) { - logRed( - `Failed to read strategy config, defaulting to empty config:`, - errorToString(error), - ); - return {}; - } + const strategyConfig = readYamlOrJson(filePath); + const parseResult = ChainSubmissionStrategySchema.parse(strategyConfig); + return parseResult; } export async function createStrategyConfig({ diff --git a/typescript/cli/src/context/context.ts b/typescript/cli/src/context/context.ts index 570b233cde..d3bb47d3a9 100644 --- a/typescript/cli/src/context/context.ts +++ b/typescript/cli/src/context/context.ts @@ -16,9 +16,8 @@ import { } from '@hyperlane-xyz/sdk'; import { isHttpsUrl, isNullish, rootLogger } from '@hyperlane-xyz/utils'; -import { DEFAULT_STRATEGY_CONFIG_PATH } from '../commands/options.js'; import { isSignCommand } from '../commands/signCommands.js'; -import { safeReadChainSubmissionStrategyConfig } from '../config/strategy.js'; +import { readChainSubmissionStrategyConfig } from '../config/strategy.js'; import { PROXY_DEPLOYED_URL } from '../consts.js'; import { forkNetworkToMultiProvider, verifyAnvil } from '../deploy/dry-run.js'; import { logBlue } from '../logger.js'; @@ -62,9 +61,9 @@ export async function signerMiddleware(argv: Record) { if (!requiresKey) return argv; - const strategyConfig = await safeReadChainSubmissionStrategyConfig( - strategyPath ?? DEFAULT_STRATEGY_CONFIG_PATH, - ); + const strategyConfig = strategyPath + ? await readChainSubmissionStrategyConfig(strategyPath) + : {}; /** * Intercepts Hyperlane command to determine chains. @@ -106,6 +105,7 @@ export async function getContext({ requiresKey, skipConfirmation, disableProxy = false, + strategyPath, }: ContextSettings): Promise { const registry = getRegistry(registryUri, registryOverrideUri, !disableProxy); @@ -127,6 +127,7 @@ export async function getContext({ key, skipConfirmation: !!skipConfirmation, signerAddress, + strategyPath, } as CommandContext; } diff --git a/typescript/cli/src/context/strategies/signer/MultiProtocolSignerFactory.ts b/typescript/cli/src/context/strategies/signer/MultiProtocolSignerFactory.ts index 030f11b5f4..d6f83572fb 100644 --- a/typescript/cli/src/context/strategies/signer/MultiProtocolSignerFactory.ts +++ b/typescript/cli/src/context/strategies/signer/MultiProtocolSignerFactory.ts @@ -1,5 +1,6 @@ import { password } from '@inquirer/prompts'; import { Signer, Wallet } from 'ethers'; +import { Wallet as ZKSyncWallet } from 'zksync-ethers'; import { ChainName, @@ -57,7 +58,6 @@ class EthereumSignerStrategy extends BaseMultiProtocolSigner { } // 99% overlap with EthereumSignerStrategy for the sake of keeping MultiProtocolSignerFactory clean -// TODO: import ZKSync signer class ZKSyncSignerStrategy extends BaseMultiProtocolSigner { async getSignerConfig(chain: ChainName): Promise { const submitter = this.config[chain]?.submitter as { @@ -74,6 +74,6 @@ class ZKSyncSignerStrategy extends BaseMultiProtocolSigner { } getSigner(config: SignerConfig): Signer { - return new Wallet(config.privateKey); + return new ZKSyncWallet(config.privateKey); } } diff --git a/typescript/cli/src/deploy/utils.ts b/typescript/cli/src/deploy/utils.ts index f5ac01a175..0378ab7243 100644 --- a/typescript/cli/src/deploy/utils.ts +++ b/typescript/cli/src/deploy/utils.ts @@ -41,7 +41,7 @@ export async function runPreflightChecksForChains({ chainsToGasCheck?: ChainName[]; }) { log('Running pre-flight checks for chains...'); - const { multiProvider } = context; + const { multiProvider, skipConfirmation } = context; if (!chains?.length) throw new Error('Empty chain selection'); for (const chain of chains) { @@ -59,6 +59,7 @@ export async function runPreflightChecksForChains({ multiProvider, chainsToGasCheck ?? chains, minGas, + skipConfirmation, ); } diff --git a/typescript/cli/src/status/message.ts b/typescript/cli/src/status/message.ts index 5e22aec7b0..b5051b4c92 100644 --- a/typescript/cli/src/status/message.ts +++ b/typescript/cli/src/status/message.ts @@ -2,17 +2,15 @@ import type { TransactionReceipt } from '@ethersproject/providers'; import { input } from '@inquirer/prompts'; import { ChainName, HyperlaneCore, HyperlaneRelayer } from '@hyperlane-xyz/sdk'; -import { assert, parseWarpRouteMessage } from '@hyperlane-xyz/utils'; import { WriteCommandContext } from '../context/types.js'; -import { log, logBlue, logGray, logGreen, logRed } from '../logger.js'; +import { log, logBlue, logGreen, logRed } from '../logger.js'; import { runSingleChainSelectionStep } from '../utils/chains.js'; import { stubMerkleTreeConfig } from '../utils/relay.js'; export async function checkMessageStatus({ context, messageId, - destination, origin, selfRelay, dispatchTx, @@ -20,7 +18,6 @@ export async function checkMessageStatus({ context: WriteCommandContext; dispatchTx?: string; messageId?: string; - destination?: ChainName; origin?: ChainName; selfRelay?: boolean; }) { @@ -31,15 +28,9 @@ export async function checkMessageStatus({ ); } - if (!messageId) { - messageId = await input({ - message: 'Please specify the message id', - }); - } - - const chainAddresses = await context.registry.getAddresses(); + const coreAddresses = await context.registry.getAddresses(); const core = HyperlaneCore.fromAddressesMap( - chainAddresses, + coreAddresses, context.multiProvider, ); @@ -50,6 +41,9 @@ export async function checkMessageStatus({ .getProvider(origin) .getTransactionReceipt(dispatchTx); } else { + messageId ??= await input({ + message: 'Please specify the message id', + }); try { dispatchedReceipt = await core.getDispatchTx(origin, messageId); } catch { @@ -64,48 +58,29 @@ export async function checkMessageStatus({ } } - const messages = core.getDispatchedMessages(dispatchedReceipt!); - const match = messages.find((m) => m.id === messageId); - assert(match, `Message ${messageId} not found in dispatch tx ${dispatchTx}`); - const message = match; - try { - const { amount, recipient } = parseWarpRouteMessage(message.parsed.body); - logGray(`Warping ${amount} to ${recipient}`); - // eslint-disable-next-line no-empty - } catch {} - - let deliveredTx: TransactionReceipt; - - log(`Checking status of message ${messageId} on ${destination}`); - const delivered = await core.isDelivered(message); - if (delivered) { - logGreen(`Message ${messageId} was delivered`); - deliveredTx = await core.getProcessedReceipt(message); - } else { - logBlue(`Message ${messageId} was not yet delivered`); + const messages = core.getDispatchedMessages(dispatchedReceipt); - if (!selfRelay) { - return; + const undelivered = []; + for (const message of messages) { + log( + `Checking status of message ${message.id} on ${message.parsed.destinationChain}`, + ); + const delivered = await core.isDelivered(message); + if (delivered) { + logGreen(`Message ${message.id} was delivered`); + } else { + logBlue(`Message ${message.id} was not yet delivered`); + undelivered.push(message); } + } + if (selfRelay) { const relayer = new HyperlaneRelayer({ core }); - - const hookAddress = await core.getSenderHookAddress(message); - const merkleAddress = chainAddresses[origin].merkleTreeHook; - stubMerkleTreeConfig(relayer, origin, hookAddress, merkleAddress); - - deliveredTx = await relayer.relayMessage( - dispatchedReceipt, - undefined, - message, - ); + for (const message of undelivered) { + const hookAddress = await core.getSenderHookAddress(message); + const merkleAddress = coreAddresses[origin].merkleTreeHook; + stubMerkleTreeConfig(relayer, origin, hookAddress, merkleAddress); + } + await relayer.relayAll(dispatchedReceipt, undelivered); } - - logGreen( - `Message ${messageId} delivered in ${ - context.multiProvider.tryGetExplorerTxUrl(message.parsed.destination, { - hash: deliveredTx.transactionHash, - }) ?? deliveredTx.transactionHash - }`, - ); } diff --git a/typescript/cli/src/utils/balances.ts b/typescript/cli/src/utils/balances.ts index 2a6e6fcb8a..701acceda6 100644 --- a/typescript/cli/src/utils/balances.ts +++ b/typescript/cli/src/utils/balances.ts @@ -1,15 +1,16 @@ -import { confirm } from '@inquirer/prompts'; import { ethers } from 'ethers'; import { ChainName, MultiProvider } from '@hyperlane-xyz/sdk'; import { ProtocolType } from '@hyperlane-xyz/utils'; -import { logGray, logGreen, logRed } from '../logger.js'; +import { autoConfirm } from '../config/prompts.js'; +import { logBlue, logGray, logGreen, logRed, warnYellow } from '../logger.js'; export async function nativeBalancesAreSufficient( multiProvider: MultiProvider, chains: ChainName[], minGas: string, + skipConfirmation: boolean, ) { const sufficientBalances: boolean[] = []; for (const chain of chains) { @@ -42,9 +43,10 @@ export async function nativeBalancesAreSufficient( if (allSufficient) { logGreen('✅ Balances are sufficient'); } else { - const isResume = await confirm({ - message: 'Deployment may fail due to insufficient balance(s). Continue?', - }); + warnYellow(`Deployment may fail due to insufficient balance(s)`); + const isResume = await autoConfirm('Continue?', skipConfirmation, () => + logBlue('Continuing deployment with insufficient balances'), + ); if (!isResume) throw new Error('Canceled deployment due to low balance'); } } diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index ad075baccc..416fe1d008 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -1,6 +1,7 @@ import { GasPaymentEnforcement, GasPaymentEnforcementPolicyType, + MatchingList, RpcConsensusType, } from '@hyperlane-xyz/sdk'; @@ -57,8 +58,10 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< appchain: true, arbitrum: true, arbitrumnova: true, + arthera: true, astar: true, astarzkevm: true, + aurora: true, flame: true, avalanche: true, b3: true, @@ -72,7 +75,10 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< celo: true, cheesechain: true, chilizmainnet: true, + conflux: true, + conwai: true, coredao: true, + corn: true, cyber: true, degenchain: true, dogechain: true, @@ -81,9 +87,12 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< endurance: true, ethereum: true, everclear: true, + evmos: true, fantom: true, flare: true, flowmainnet: true, + form: true, + // fractal: false, fraxtal: true, fusemainnet: true, gnosis: true, @@ -92,6 +101,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< immutablezkevmmainnet: true, inevm: true, injective: true, + ink: true, kaia: true, kroma: true, linea: true, @@ -122,6 +132,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< rarichain: true, real: true, redstone: true, + rivalz: true, rootstockmainnet: true, sanko: true, scroll: true, @@ -129,12 +140,15 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< shibarium: true, snaxchain: true, solanamainnet: true, + soneium: true, + sonic: true, stride: false, superseed: true, superpositionmainnet: true, swell: true, taiko: true, tangle: true, + telos: true, treasure: true, unichain: true, vana: true, @@ -156,8 +170,10 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< appchain: true, arbitrum: true, arbitrumnova: true, + arthera: true, astar: true, astarzkevm: true, + aurora: true, flame: true, avalanche: true, b3: true, @@ -171,7 +187,10 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< celo: true, cheesechain: true, chilizmainnet: true, + conflux: true, + conwai: true, coredao: true, + corn: true, cyber: true, degenchain: true, dogechain: true, @@ -180,9 +199,12 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< endurance: true, ethereum: true, everclear: true, + evmos: true, fantom: true, flare: true, flowmainnet: true, + form: true, + // fractal: false, fraxtal: true, fusemainnet: true, gnosis: true, @@ -191,6 +213,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< immutablezkevmmainnet: true, inevm: true, injective: true, + ink: true, kaia: true, kroma: true, linea: true, @@ -222,6 +245,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< rarichain: true, real: true, redstone: true, + rivalz: true, rootstockmainnet: true, sanko: true, scroll: true, @@ -229,12 +253,15 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< shibarium: true, snaxchain: true, solanamainnet: true, + soneium: true, + sonic: true, stride: true, superseed: true, superpositionmainnet: true, swell: true, taiko: true, tangle: true, + telos: true, treasure: true, unichain: true, vana: true, @@ -256,8 +283,10 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< appchain: true, arbitrum: true, arbitrumnova: true, + arthera: true, astar: true, astarzkevm: true, + aurora: true, flame: true, avalanche: true, b3: true, @@ -271,7 +300,10 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< celo: true, cheesechain: true, chilizmainnet: true, + conflux: true, + conwai: true, coredao: true, + corn: true, cyber: true, degenchain: true, dogechain: true, @@ -280,9 +312,12 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< endurance: true, ethereum: true, everclear: true, + evmos: true, fantom: true, flare: true, flowmainnet: true, + form: true, + // fractal: false, fraxtal: true, fusemainnet: true, gnosis: true, @@ -290,6 +325,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< harmony: true, immutablezkevmmainnet: true, inevm: true, + ink: true, injective: true, kaia: true, kroma: true, @@ -321,6 +357,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< rarichain: true, real: true, redstone: true, + rivalz: true, rootstockmainnet: true, sanko: true, scroll: true, @@ -328,12 +365,15 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< shibarium: true, snaxchain: true, solanamainnet: true, + soneium: true, + sonic: true, stride: true, superseed: true, superpositionmainnet: true, swell: true, taiko: true, tangle: true, + telos: true, treasure: true, unichain: true, vana: true, @@ -372,6 +412,8 @@ const gasPaymentEnforcement: GasPaymentEnforcement[] = [ matchingList: [ // Temporary workaround due to funky Mantle gas amounts. { destinationDomain: getDomainId('mantle') }, + // Temporary workaround for some high gas amount estimates on Treasure + ...warpRouteMatchingList(WarpRouteIds.ArbitrumTreasureMAGIC), ], }, { @@ -458,6 +500,45 @@ const scraperResources = { }, }; +const blacklistedMessageIds = [ + // ezETH + '0xb9cfeb4a22b65903ca7cb514fd752feba0622a0495878d508d19a91734d89cc4', + '0x13d6c56781ee9b8811f4e17198bf064baed2682ce44193c750e76c73384466e7', + '0x366520dcd48f19a2cdc806e244d4cea970a587e3932320baee30e710d316b303', + '0x0f9b8849d6dbf5a699e906a6e06044d6cf84ee0ba2174cec28db4fceba52616a', + '0x0e1235105208e7d3a616ac2bb780e7dab30fc289670ba8d6655a4ded73f9b5da', + '0xa6fdecc3f21d081bf3d78da9ddf516b24397a6bff44d7cd4614955f5ca2320b2', + '0x2c3484724a97524fd95aa8aec34a0ae30f79e14e1b228cce9dc1793cea40fc3d', + '0x11ffaeaae5c431501584bc39805ef44b4080e7f90ca7ff609a131d58d1f75ae6', + '0xc18ea74675bc1e5b780e63ac6063c7c39189e1848b8fe52ac40b83fff9268483', + '0xd8040094ab94e44e2b3b57ab0704a33e363f46261a45c9dfc788371c808b8f3a', + '0xf7f0be22f46144793ee3fadccddd4cfb8422d36f5d59bb86fea3782b89160d49', + '0xeda79ab37b4a05d8f318b3a465a70572d819b2c37456c48835a30bb6c016e194', + '0xaf7c7dfc4d19aec283c619a2724d03fbbfeef4a468e84c0573551c1adca40ded', + '0x4a2c42c283755400c0dc7f1be65f6ff026a38aacaa6505302d465268bcd86b21', + '0x0f80e5b8da5a706d6273a622a5c29f83cee5f37e6376c2c8a615b0ef91a540df', + '0x6359232ef1f239d9519104cf47f1e2fbcbe25f8ee68001c5eff7e81bf23b396c', + '0x6a3fb736b952467b814e93fb35edf3a824d35efd1e4b10e3ed465595c55af88a', + + // pzETH + '0x14cb552c08de9f131b750c2f821f90e5ff685e1d3d714e912f7603b2f4b7adb4', + '0xaa5b5021200e66b4a47e5156106c46b6b2bc1e00b088a524a14bb0709cbf733e', + '0x43b4cf52255a7728a3c409f76fd20ba0c36cb42854e0b0a0eefdde848363224b', + '0x047f34405014b117dccd6d8981c846dc3fe746f5e758f90f227581c735f4f11a', + '0x47d60c21abefae928d1c16c5a33cd5a8fcf870cf533c71ab6db49d75a5c4a215', + '0xa2df671fbd4b518c282f9a21e2677fa2a05af33f96ccc9ff113f1a1ffa557667', + '0x1cefa98b6d937333e452a0dbc0654e13416c228682837a8913cb18d612b307dd', + + // MAGIC/ethereum-treasure native funding txs + '0x9d51f4123be816cbaeef2e2b34a5760f633a7cb8a019fe16f88a3227cc22451e', + '0x663c221137028ceeeb102a98e48b362a7b48d626b93c88c7fdf1871a948b1223', +]; + +// Blacklist matching list intended to be used by all contexts. +const blacklist: MatchingList = blacklistedMessageIds.map((messageId) => ({ + messageId, +})); + const hyperlane: RootAgentConfig = { ...contextBase, context: Contexts.Hyperlane, @@ -467,8 +548,9 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'a7f3967-20241205-163733', + tag: '7c0c967-20241218-173053', }, + blacklist, gasPaymentEnforcement: gasPaymentEnforcement, metricAppContextsGetter, resources: relayerResources, @@ -476,7 +558,7 @@ const hyperlane: RootAgentConfig = { validators: { docker: { repo, - tag: 'a7f3967-20241205-163733', + tag: '05e90bc-20241216-180035', }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.Hyperlane), @@ -486,7 +568,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '4b280cd-20241206-130519', + tag: 'd84d8da-20241217-172447', }, resources: scraperResources, }, @@ -501,8 +583,9 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '4cb2c9a-20241205-142854', + tag: '7c0c967-20241218-173053', }, + blacklist, // We're temporarily (ab)using the RC relayer as a way to increase // message throughput. // whitelist: releaseCandidateHelloworldMatchingList, @@ -536,6 +619,7 @@ const neutron: RootAgentConfig = { repo, tag: '25a927d-20241114-171323', }, + blacklist, gasPaymentEnforcement, metricAppContextsGetter, resources: relayerResources, diff --git a/typescript/infra/config/environments/mainnet3/aw-validators/hyperlane.json b/typescript/infra/config/environments/mainnet3/aw-validators/hyperlane.json index 9e39d900ce..9ddb62b9d3 100644 --- a/typescript/infra/config/environments/mainnet3/aw-validators/hyperlane.json +++ b/typescript/infra/config/environments/mainnet3/aw-validators/hyperlane.json @@ -21,12 +21,18 @@ "arbitrumnova": { "validators": ["0xd2a5e9123308d187383c87053811a2c21bd8af1f"] }, + "arthera": { + "validators": ["0x13710ac11c36c169f62fba95767ae59a1e57098d"] + }, "astar": { "validators": ["0x4d1b2cade01ee3493f44304653d8e352c66ec3e7"] }, "astarzkevm": { "validators": ["0x89ecdd6caf138934bf3a2fb7b323984d72fd66de"] }, + "aurora": { + "validators": ["0x37105aec3ff37c7bb0abdb0b1d75112e1e69fa86"] + }, "flame": { "validators": ["0x1fa928ce884fa16357d4b8866e096392d4d81f43"] }, @@ -82,9 +88,18 @@ "chilizmainnet": { "validators": ["0x7403e5d58b48b0f5f715d9c78fbc581f01a625cb"] }, + "conflux": { + "validators": ["0x113dfa1dc9b0a2efb6ad01981e2aad86d3658490"] + }, + "conwai": { + "validators": ["0x949e2cdd7e79f99ee9bbe549540370cdc62e73c3"] + }, "coredao": { "validators": ["0xbd6e158a3f5830d99d7d2bce192695bc4a148de2"] }, + "corn": { + "validators": ["0xc80b2e3e38220e02d194a0effa9d5bfe89894c07"] + }, "cyber": { "validators": ["0x94d7119ceeb802173b6924e6cc8c4cd731089a27"] }, @@ -113,6 +128,9 @@ "everclear": { "validators": ["0xeff20ae3d5ab90abb11e882cfce4b92ea6c74837"] }, + "evmos": { + "validators": ["0x8f82387ad8b7b13aa9e06ed3f77f78a77713afe0"] + }, "fantom": { "validators": ["0xa779572028e634e16f26af5dfd4fa685f619457d"] }, @@ -122,6 +140,9 @@ "flowmainnet": { "validators": ["0xe132235c958ca1f3f24d772e5970dd58da4c0f6e"] }, + "form": { + "validators": ["0x58554b2e76167993b5fc000d0070a2f883cd333a"] + }, "fraxtal": { "validators": ["0x4bce180dac6da60d0f3a2bdf036ffe9004f944c1"] }, @@ -154,6 +175,9 @@ "injective": { "validators": ["0xbfb8911b72cfb138c7ce517c57d9c691535dc517"] }, + "ink": { + "validators": ["0xb533b8b104522958b984fb258e0684dec0f1a6a5"] + }, "kaia": { "validators": ["0x9de0b3abb221d19719882fa4d61f769fdc2be9a4"] }, @@ -268,6 +292,9 @@ "redstone": { "validators": ["0x1400b9737007f7978d8b4bbafb4a69c83f0641a7"] }, + "rivalz": { + "validators": ["0xf87c3eb3dde972257b0d6d110bdadcda951c0dc1"] + }, "rootstockmainnet": { "validators": ["0x8675eb603d62ab64e3efe90df914e555966e04ac"] }, @@ -293,6 +320,12 @@ "solanamainnet": { "validators": ["0x28464752829b3ea59a497fca0bdff575c534c3ff"] }, + "soneium": { + "validators": ["0xd4b7af853ed6a2bfc329ecef545df90c959cbee8"] + }, + "sonic": { + "validators": ["0xa313d72dbbd3fa51a2ed1611ea50c37946fa42f7"] + }, "superseed": { "validators": ["0xdc2b87cb555411bb138d3a4e5f7832c87fae2b88"] }, @@ -308,6 +341,9 @@ "tangle": { "validators": ["0x1ee52cbbfacd7dcb0ba4e91efaa6fbc61602b15b"] }, + "telos": { + "validators": ["0xcb08410b14d3adf0d0646f0c61cd07e0daba8e54"] + }, "treasure": { "validators": ["0x6ad994819185553e8baa01533f0cd2c7cadfe6cc"] }, diff --git a/typescript/infra/config/environments/mainnet3/chains.ts b/typescript/infra/config/environments/mainnet3/chains.ts index f0d7f66400..62c5dffdad 100644 --- a/typescript/infra/config/environments/mainnet3/chains.ts +++ b/typescript/infra/config/environments/mainnet3/chains.ts @@ -1,5 +1,5 @@ import { IRegistry } from '@hyperlane-xyz/registry'; -import { ChainMap, ChainMetadata } from '@hyperlane-xyz/sdk'; +import { ChainMap, ChainMetadata, ChainName } from '@hyperlane-xyz/sdk'; import { getRegistryForEnvironment } from '../../../src/config/chain.js'; import { isEthereumProtocolChain } from '../../../src/utils/utils.js'; @@ -85,12 +85,21 @@ export const chainMetadataOverrides: ChainMap> = { // gasPrice: 20 * 10 ** 9, // 20 gwei // }, // }, + // degenchain: { + // transactionOverrides: { + // maxFeePerGas: 100 * 10 ** 9, // 100 gwei + // maxPriorityFeePerGas: 10 * 10 ** 9, // 10 gwei + // }, + // }, }; -export const getRegistry = async (useSecrets = true): Promise => +export const getRegistry = async ( + useSecrets = true, + chains: ChainName[] = supportedChainNames, +): Promise => getRegistryForEnvironment( environment, - supportedChainNames, + chains, chainMetadataOverrides, useSecrets, ); diff --git a/typescript/infra/config/environments/mainnet3/core/verification.json b/typescript/infra/config/environments/mainnet3/core/verification.json index 44f999186b..19c72ec1e3 100644 --- a/typescript/infra/config/environments/mainnet3/core/verification.json +++ b/typescript/infra/config/environments/mainnet3/core/verification.json @@ -6122,5 +6122,851 @@ "constructorArguments": "0000000000000000000000009bbdf86b272d224323136e15594fdce487f40ce7", "isProxy": false } + ], + "aurora": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", + "constructorArguments": "000000000000000000000000000000000000000000000000000000004e454152", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39", + "constructorArguments": "0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa70000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7" + }, + { + "name": "MerkleTreeHook", + "address": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "constructorArguments": "0000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b39", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "constructorArguments": "0000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b39000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a8a311b69f688c1d9928259d872c31ca0d473642", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0x48C427782Bc1e9ecE406b3e277481b28ABcBdf03", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xc0C2dB448fC2c84213394Fcb93a3C467e50ECa9E", + "constructorArguments": "000000000000000000000000df178647cab5e0222f4b53c57274fd2a03beaed60000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6" + }, + { + "name": "ProtocolFee", + "address": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x426a3CE72C1586b1867F9339550371E86DB3e396", + "constructorArguments": "0000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b39", + "isProxy": false + } + ], + "corn": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000001406f40", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D" + }, + { + "name": "MerkleTreeHook", + "address": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000dc1508844b99c606e16c2ae87f33c373edd4b0f6", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "constructorArguments": "0000000000000000000000009e8b689e83d929cb8c2d9166e55319a4e6aa83b70000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7" + }, + { + "name": "ProtocolFee", + "address": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + } + ], + "conwai": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "00000000000000000000000000000000000000000000000000000000000a33fc", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D" + }, + { + "name": "MerkleTreeHook", + "address": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000dc1508844b99c606e16c2ae87f33c373edd4b0f6", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "constructorArguments": "0000000000000000000000009e8b689e83d929cb8c2d9166e55319a4e6aa83b70000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7" + }, + { + "name": "ProtocolFee", + "address": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + } + ], + "telos": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000028", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D" + }, + { + "name": "MerkleTreeHook", + "address": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000dc1508844b99c606e16c2ae87f33c373edd4b0f6", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "constructorArguments": "0000000000000000000000009e8b689e83d929cb8c2d9166e55319a4e6aa83b70000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7" + }, + { + "name": "ProtocolFee", + "address": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + } + ], + "arthera": [ + { + "name": "ProxyAdmin", + "address": "0x03cF708E42C89623bd83B281A56935cB562b9258", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xC831271c1fB212012811a91Dd43e5926C1020563", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000002802", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x473884010F0C1742DA8Ad01E7E295624B931076b", + "constructorArguments": "000000000000000000000000c831271c1fb212012811a91dd43e5926c102056300000000000000000000000003cf708e42c89623bd83b281a56935cb562b925800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xC831271c1fB212012811a91Dd43e5926C1020563" + }, + { + "name": "MerkleTreeHook", + "address": "0xdA629E1B79e3420ECd1e80571aDd6a4a3b13AE79", + "constructorArguments": "000000000000000000000000473884010f0c1742da8ad01e7e295624b931076b", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x1fbcCdc677c10671eE50b46C61F0f7d135112450", + "constructorArguments": "000000000000000000000000473884010f0c1742da8ad01e7e295624b931076b000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000da629e1b79e3420ecd1e80571add6a4a3b13ae79", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0xe93f2f409ad8B5000431D234472973fe848dcBEC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8d9Bd7E9ec3cd799a659EE650DfF6C799309fA91", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x2f4Eb04189e11Af642237Da62d163Ab714614498", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xFb7D175d6F53800D68D32C3Fe1416807A394cC24", + "constructorArguments": "0000000000000000000000002f4eb04189e11af642237da62d163ab71461449800000000000000000000000003cf708e42c89623bd83b281a56935cb562b925800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x2f4Eb04189e11Af642237Da62d163Ab714614498" + }, + { + "name": "ProtocolFee", + "address": "0x33AA12b4e8E79cA551Ca9D1F2eC7d2cE02129dd4", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xEe9E0FB6f43913aDBbe5bf89073F4BA590AB8184", + "constructorArguments": "000000000000000000000000473884010f0c1742da8ad01e7e295624b931076b", + "isProxy": false + } + ], + "ink": [ + { + "name": "ProxyAdmin", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000def1", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39", + "constructorArguments": "0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa70000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7" + }, + { + "name": "MerkleTreeHook", + "address": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "constructorArguments": "0000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b39", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "constructorArguments": "0000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b39000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a8a311b69f688c1d9928259d872c31ca0d473642", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0x48C427782Bc1e9ecE406b3e277481b28ABcBdf03", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xc0C2dB448fC2c84213394Fcb93a3C467e50ECa9E", + "constructorArguments": "000000000000000000000000df178647cab5e0222f4b53c57274fd2a03beaed60000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6" + }, + { + "name": "ProtocolFee", + "address": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x426a3CE72C1586b1867F9339550371E86DB3e396", + "constructorArguments": "0000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b39", + "isProxy": false + } + ], + "evmos": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000002329", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D" + }, + { + "name": "MerkleTreeHook", + "address": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000dc1508844b99c606e16c2ae87f33c373edd4b0f6", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "constructorArguments": "0000000000000000000000009e8b689e83d929cb8c2d9166e55319a4e6aa83b70000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7" + }, + { + "name": "ProtocolFee", + "address": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + } + ], + "form": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "00000000000000000000000000000000000000000000000000000000000001de", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D" + }, + { + "name": "MerkleTreeHook", + "address": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000dc1508844b99c606e16c2ae87f33c373edd4b0f6", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "constructorArguments": "0000000000000000000000009e8b689e83d929cb8c2d9166e55319a4e6aa83b70000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7" + }, + { + "name": "ProtocolFee", + "address": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + } + ], + "sonic": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000092", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D" + }, + { + "name": "MerkleTreeHook", + "address": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000dc1508844b99c606e16c2ae87f33c373edd4b0f6", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "constructorArguments": "0000000000000000000000009e8b689e83d929cb8c2d9166e55319a4e6aa83b70000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7" + }, + { + "name": "ProtocolFee", + "address": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + } + ], + "soneium": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000074c", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D" + }, + { + "name": "MerkleTreeHook", + "address": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000dc1508844b99c606e16c2ae87f33c373edd4b0f6", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "constructorArguments": "0000000000000000000000009e8b689e83d929cb8c2d9166e55319a4e6aa83b70000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7" + }, + { + "name": "ProtocolFee", + "address": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + } + ], + "conflux": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000406", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D" + }, + { + "name": "MerkleTreeHook", + "address": "0xDc1508844B99C606E16C2Ae87f33c373edD4B0F6", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x2f0E57527Bb37E5E064EF243fad56CCE6241906c", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000dc1508844b99c606e16c2ae87f33c373edd4b0f6", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0xA8A311B69f688c1D9928259D872C31ca0d473642", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xDf178647caB5e0222F4B53C57274FD2A03BEaed6", + "constructorArguments": "0000000000000000000000009e8b689e83d929cb8c2d9166e55319a4e6aa83b70000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7" + }, + { + "name": "ProtocolFee", + "address": "0x5DdFCA27f9a308c1429A010C4daB291b5534a297", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x84444cE490233CFa76E3F1029bc166aa8c266907", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + } + ], + "rivalz": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "00000000000000000000000000000000000000000000000000000000000002f1", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D" + }, + { + "name": "MerkleTreeHook", + "address": "0x1c6f404800bA49Ed581af734eA0d25c0c7d017B2", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x48C427782Bc1e9ecE406b3e277481b28ABcBdf03", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000001c6f404800ba49ed581af734ea0d25c0c7d017b2", + "isProxy": false + }, + { + "name": "PausableHook", + "address": "0x9e8b689e83d929cb8c2d9166E55319a4e6aA83B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x248aDe14C0489E20C9a7Fea5F86DBfC3702208eF", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x5e8a0fCc0D1DF583322943e01F02cB243e5300f6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3cECBa60A580dE20CC57D87528953a00f4ED99EA", + "constructorArguments": "0000000000000000000000005e8a0fcc0d1df583322943e01f02cb243e5300f60000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x5e8a0fCc0D1DF583322943e01F02cB243e5300f6" + }, + { + "name": "ProtocolFee", + "address": "0x4Ee9dEBB3046139661b51E17bdfD54Fd63211de7", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x65dCf8F6b3f6a0ECEdf3d0bdCB036AEa47A1d615", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + } ] } diff --git a/typescript/infra/config/environments/mainnet3/funding.ts b/typescript/infra/config/environments/mainnet3/funding.ts index 74f624ed72..e16bb07c90 100644 --- a/typescript/infra/config/environments/mainnet3/funding.ts +++ b/typescript/infra/config/environments/mainnet3/funding.ts @@ -10,7 +10,7 @@ export const keyFunderConfig: KeyFunderConfig< > = { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: 'a7f3967-20241205-163749', + tag: '05e90bc-20241216-180025', }, // We're currently using the same deployer/key funder key as mainnet2. // To minimize nonce clobbering we offset the key funder cron @@ -32,8 +32,10 @@ export const keyFunderConfig: KeyFunderConfig< appchain: '0.05', arbitrum: '0.5', arbitrumnova: '0.05', + arthera: '0.1', astar: '100', astarzkevm: '0.05', + aurora: '0.05', flame: '1', avalanche: '5', b3: '0.05', @@ -44,10 +46,13 @@ export const keyFunderConfig: KeyFunderConfig< boba: '0.05', bsc: '5', bsquared: '0.002', - celo: '3', + celo: '4', cheesechain: '50', chilizmainnet: '200', + conflux: '100', + conwai: '5000', coredao: '25', + corn: '0.001', cyber: '0.05', degenchain: '100', dogechain: '100', @@ -55,9 +60,12 @@ export const keyFunderConfig: KeyFunderConfig< endurance: '20', ethereum: '0.5', everclear: '0.05', + evmos: '500', fantom: '100', flare: '500', flowmainnet: '5', + form: '0.05', + // fractal: '500', fraxtal: '0.2', fusemainnet: '20', gnosis: '5', @@ -65,9 +73,10 @@ export const keyFunderConfig: KeyFunderConfig< harmony: '500', immutablezkevmmainnet: '25', inevm: '3', + ink: '0.05', kaia: '250', kroma: '0.05', - linea: '0.2', + linea: '1', lisk: '0.05', lukso: '20', lumia: '1', @@ -80,25 +89,28 @@ export const keyFunderConfig: KeyFunderConfig< mint: '0.05', mode: '0.2', molten: '3', - moonbeam: '5', + moonbeam: '100', morph: '0.05', oortmainnet: '2000', optimism: '0.5', orderly: '0.05', - polygon: '20', + polygon: '40', polygonzkevm: '0.5', polynomialfi: '0.05', - prom: '5', + prom: '18', proofofplay: '0.05', rarichain: '0.05', real: '0.1', redstone: '0.2', + rivalz: '0.05', rootstockmainnet: '0.002', sanko: '2', scroll: '0.5', sei: '50', shibarium: '50', snaxchain: '0.05', + soneium: '0.05', + sonic: '0.5', // ignore non-evm chains stride: '0', superseed: '0.05', @@ -106,7 +118,8 @@ export const keyFunderConfig: KeyFunderConfig< swell: '0.05', taiko: '0.2', tangle: '2', - treasure: '100', + telos: '100', + treasure: '900', unichain: '0.05', // temporarily low until we're able to fund more vana: '0.001', diff --git a/typescript/infra/config/environments/mainnet3/gasPrices.json b/typescript/infra/config/environments/mainnet3/gasPrices.json index 1c5f05b28a..b260dfee48 100644 --- a/typescript/infra/config/environments/mainnet3/gasPrices.json +++ b/typescript/infra/config/environments/mainnet3/gasPrices.json @@ -23,12 +23,20 @@ "amount": "0.01", "decimals": 9 }, + "arthera": { + "amount": "1.025064", + "decimals": 9 + }, "astar": { "amount": "779.371350051", "decimals": 9 }, "astarzkevm": { - "amount": "0.0988", + "amount": "0.263", + "decimals": 9 + }, + "aurora": { + "amount": "0.07", "decimals": 9 }, "flame": { @@ -36,11 +44,11 @@ "decimals": 9 }, "avalanche": { - "amount": "27.735398516", + "amount": "25.000000001", "decimals": 9 }, "b3": { - "amount": "0.001000253", + "amount": "0.001000252", "decimals": 9 }, "base": { @@ -60,7 +68,7 @@ "decimals": 9 }, "boba": { - "amount": "0.001000059", + "amount": "0.001000068", "decimals": 9 }, "bsc": { @@ -83,10 +91,22 @@ "amount": "5000.0", "decimals": 9 }, + "conflux": { + "amount": "20.0", + "decimals": 9 + }, + "conwai": { + "amount": "0.01", + "decimals": 9 + }, "coredao": { "amount": "30.0", "decimals": 9 }, + "corn": { + "amount": "0.0005", + "decimals": 9 + }, "cyber": { "amount": "0.001000252", "decimals": 9 @@ -112,15 +132,19 @@ "decimals": 9 }, "ethereum": { - "amount": "30.088451558", + "amount": "32.059172476", "decimals": 9 }, "everclear": { "amount": "0.1", "decimals": 9 }, + "evmos": { + "amount": "27.5", + "decimals": 9 + }, "fantom": { - "amount": "6.971582929", + "amount": "8.444088778", "decimals": 9 }, "flare": { @@ -131,6 +155,10 @@ "amount": "0.1", "decimals": 9 }, + "form": { + "amount": "0.001000252", + "decimals": 9 + }, "fraxtal": { "amount": "0.001000253", "decimals": 9 @@ -159,6 +187,10 @@ "amount": "0.1", "decimals": 9 }, + "ink": { + "amount": "0.001000252", + "decimals": 9 + }, "injective": { "amount": "700000000", "decimals": 1 @@ -176,7 +208,7 @@ "decimals": 9 }, "lisk": { - "amount": "0.001001147", + "amount": "0.001001154", "decimals": 9 }, "lukso": { @@ -192,7 +224,7 @@ "decimals": 9 }, "mantapacific": { - "amount": "0.003000983", + "amount": "0.003000319", "decimals": 9 }, "mantle": { @@ -212,11 +244,11 @@ "decimals": 9 }, "mint": { - "amount": "0.001000252", + "amount": "0.001000256", "decimals": 9 }, "mode": { - "amount": "0.001001363", + "amount": "0.001000252", "decimals": 9 }, "molten": { @@ -240,7 +272,7 @@ "decimals": 9 }, "optimism": { - "amount": "0.001000469", + "amount": "0.001159749", "decimals": 9 }, "orderly": { @@ -256,7 +288,7 @@ "decimals": 9 }, "polygonzkevm": { - "amount": "0.451", + "amount": "0.48", "decimals": 9 }, "polynomialfi": { @@ -264,7 +296,7 @@ "decimals": 9 }, "prom": { - "amount": "51.9", + "amount": "130.0", "decimals": 9 }, "proofofplay": { @@ -283,6 +315,10 @@ "amount": "0.00010005", "decimals": 9 }, + "rivalz": { + "amount": "0.01", + "decimals": 9 + }, "rootstockmainnet": { "amount": "0.07", "decimals": 9 @@ -300,7 +336,7 @@ "decimals": 9 }, "shibarium": { - "amount": "5.040876434", + "amount": "11.93032412", "decimals": 9 }, "snaxchain": { @@ -311,6 +347,14 @@ "amount": "0.5", "decimals": 1 }, + "soneium": { + "amount": "0.001000251", + "decimals": 9 + }, + "sonic": { + "amount": "1.1", + "decimals": 9 + }, "stride": { "amount": "0.005", "decimals": 1 @@ -335,8 +379,12 @@ "amount": "1.0", "decimals": 9 }, + "telos": { + "amount": "522.500627641", + "decimals": 9 + }, "treasure": { - "amount": "702.999550885", + "amount": "1601.935300783", "decimals": 9 }, "unichain": { @@ -344,7 +392,7 @@ "decimals": 9 }, "vana": { - "amount": "0.002986", + "amount": "0.005", "decimals": 9 }, "viction": { @@ -352,7 +400,7 @@ "decimals": 9 }, "worldchain": { - "amount": "0.001000255", + "amount": "0.001000251", "decimals": 9 }, "xai": { @@ -360,7 +408,7 @@ "decimals": 9 }, "xlayer": { - "amount": "23.05", + "amount": "23.5", "decimals": 9 }, "zeronetwork": { diff --git a/typescript/infra/config/environments/mainnet3/helloworld.ts b/typescript/infra/config/environments/mainnet3/helloworld.ts index 566bbbac12..d65da8141e 100644 --- a/typescript/infra/config/environments/mainnet3/helloworld.ts +++ b/typescript/infra/config/environments/mainnet3/helloworld.ts @@ -13,7 +13,7 @@ export const hyperlane: HelloWorldConfig = { kathy: { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '857338e-20240716-165320', + tag: '7e520fb-20241215-234731', }, chainsToSkip: [], runEnv: environment, @@ -33,7 +33,7 @@ export const releaseCandidate: HelloWorldConfig = { kathy: { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '857338e-20240716-165320', + tag: '7e520fb-20241215-234731', }, chainsToSkip: [], runEnv: environment, diff --git a/typescript/infra/config/environments/mainnet3/index.ts b/typescript/infra/config/environments/mainnet3/index.ts index d2061134f7..ca7806f443 100644 --- a/typescript/infra/config/environments/mainnet3/index.ts +++ b/typescript/infra/config/environments/mainnet3/index.ts @@ -32,15 +32,18 @@ export const environment: EnvironmentConfig = { role: Role = Role.Deployer, useSecrets?: boolean, chains?: ChainName[], - ) => - getMultiProviderForRole( + ) => { + const providerChains = + chains && chains.length > 0 ? chains : supportedChainNames; + return getMultiProviderForRole( environmentName, - chains && chains.length > 0 ? chains : supportedChainNames, - await getRegistry(useSecrets), + providerChains, + await getRegistry(useSecrets, providerChains), context, role, undefined, - ), + ); + }, getKeys: ( context: Contexts = Contexts.Hyperlane, role: Role = Role.Deployer, diff --git a/typescript/infra/config/environments/mainnet3/ism/verification.json b/typescript/infra/config/environments/mainnet3/ism/verification.json index 5cceb318f4..75e4fc83b9 100644 --- a/typescript/infra/config/environments/mainnet3/ism/verification.json +++ b/typescript/infra/config/environments/mainnet3/ism/verification.json @@ -7690,5 +7690,1049 @@ "constructorArguments": "", "isProxy": true } + ], + "corn": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } + ], + "conwai": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } + ], + "telos": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } + ], + "arthera": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x4C97D35c668EE5194a13c8DE8Afc18cce40C9F28", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x21005c99F1222f3B7182f3111D1F3753f826B9fE", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0xDa7cECb05C4aeB02c1aFDE277d4306a2da7Bd762", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x504e5f4694C252C9E0CD10bbEa39763582cD23Bb", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x7E556A80da4F019d38C2e4497694c8fa26513B52", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0x46fa3A5780e5B90Eaf34BDED554d5353B5ABE9E7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x3359298F25e7CF2426720FCCAdbaF47037Abe5e9", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x29B37088724B745C0ABcE591449Cf042772160C2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0xD7ca12DF39C94281144f68123E36DF5874Ef4FFd", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0xEF9A332Ec1fD233Bf9344A58be56ff9E104B4f60", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0xb22E72F31924b7bA11ff01Ae5014cd41B135Af49", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0xCB9f90EE5d83Ea52ABd922BD70898f0155D54798", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0x23AD9FF8b97CA75115b91D61ceBd15B833f79f79", + "constructorArguments": "", + "isProxy": true + } + ], + "ink": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0x7f51A658837A315134A97ff8B586d71B726B7e61", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0xDFF18Bf286c9cDd0fC653a28616460Cf7443F8EF", + "constructorArguments": "", + "isProxy": true + } + ], + "form": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } + ], + "sonic": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } + ], + "soneium": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } + ], + "conflux": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } + ], + "evmos": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } + ], + "aurora": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } + ], + "rivalz": [ + { + "name": "StaticMerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomainRoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootWeightedMultisigIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootWeightedMultisigIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdWeightedMultisigIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdWeightedMultisigIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } ] } diff --git a/typescript/infra/config/environments/mainnet3/middleware/accounts/verification.json b/typescript/infra/config/environments/mainnet3/middleware/accounts/verification.json index 07944e2a41..cd4c3ea01c 100644 --- a/typescript/infra/config/environments/mainnet3/middleware/accounts/verification.json +++ b/typescript/infra/config/environments/mainnet3/middleware/accounts/verification.json @@ -1869,5 +1869,257 @@ "isProxy": true, "expectedimplementation": "0xAE557e108b3336130370aC74836f1356B4b30Cf2" } + ], + "corn": [ + { + "name": "InterchainAccountIsm", + "address": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "constructorArguments": "0000000000000000000000003881c3e945cbb89ae67c43e82f570badf1c6ea940000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b76d93a9d39eb51f54ebf5566308640cde882b000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94" + } + ], + "conwai": [ + { + "name": "InterchainAccountIsm", + "address": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "constructorArguments": "0000000000000000000000003881c3e945cbb89ae67c43e82f570badf1c6ea940000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b76d93a9d39eb51f54ebf5566308640cde882b000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94" + } + ], + "rivalz": [ + { + "name": "InterchainAccountIsm", + "address": "0xd64d126941EaC2Cf53e0E4E8146cC70449b60D73", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0x5DA60220C5dDe35b7aE91c042ff5979047FA0785", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1A4F09A615aA4a35E5a146DC2fa19975bebF21A5", + "constructorArguments": "0000000000000000000000005da60220c5dde35b7ae91c042ff5979047fa07850000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d64d126941eac2cf53e0e4e8146cc70449b60d73000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x5DA60220C5dDe35b7aE91c042ff5979047FA0785" + } + ], + "telos": [ + { + "name": "InterchainAccountIsm", + "address": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xF457D831d9F55e87B2F0b35AD6D033fd6b4181Ed", + "constructorArguments": "00000000000000000000000093d41e41ca545a35a81d11b08d2ee8b852c768df0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b76d93a9d39eb51f54ebf5566308640cde882b000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df" + } + ], + "arthera": [ + { + "name": "InterchainAccountIsm", + "address": "0xf9609bB22847e0DB5F6fB8f95b84D25A19b46ac5", + "constructorArguments": "000000000000000000000000473884010f0c1742da8ad01e7e295624b931076b", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0xbBc1bd54a03d87e7aDE2089be2090cA5731A44B8", + "constructorArguments": "000000000000000000000000473884010f0c1742da8ad01e7e295624b931076b", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x2b6d3F7d28B5EC8C3C028fBCAdcf774D9709Dd29", + "constructorArguments": "000000000000000000000000bbc1bd54a03d87e7ade2089be2090ca5731a44b800000000000000000000000003cf708e42c89623bd83b281a56935cb562b925800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f9609bb22847e0db5f6fb8f95b84d25a19b46ac5000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xbBc1bd54a03d87e7aDE2089be2090cA5731A44B8" + } + ], + "sonic": [ + { + "name": "InterchainAccountIsm", + "address": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "constructorArguments": "0000000000000000000000003881c3e945cbb89ae67c43e82f570badf1c6ea940000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b76d93a9d39eb51f54ebf5566308640cde882b000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94" + } + ], + "soneium": [ + { + "name": "InterchainAccountIsm", + "address": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "constructorArguments": "0000000000000000000000003881c3e945cbb89ae67c43e82f570badf1c6ea940000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b76d93a9d39eb51f54ebf5566308640cde882b000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94" + } + ], + "evmos": [ + { + "name": "InterchainAccountIsm", + "address": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "constructorArguments": "0000000000000000000000003881c3e945cbb89ae67c43e82f570badf1c6ea940000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b76d93a9d39eb51f54ebf5566308640cde882b000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94" + } + ], + "form": [ + { + "name": "InterchainAccountIsm", + "address": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "constructorArguments": "0000000000000000000000003881c3e945cbb89ae67c43e82f570badf1c6ea940000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b76d93a9d39eb51f54ebf5566308640cde882b000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x3881c3e945CBB89ae67c43E82f570baDF1c6EA94" + } + ], + "aurora": [ + { + "name": "InterchainAccountIsm", + "address": "0xF457D831d9F55e87B2F0b35AD6D033fd6b4181Ed", + "constructorArguments": "0000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b39", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0xc2466492C451E1AE49d8C874bB9f89293Aaad59b", + "constructorArguments": "0000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b39", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x021D2810a758c833080DEc2F1Fa8F571Aae97D45", + "constructorArguments": "000000000000000000000000c2466492c451e1ae49d8c874bb9f89293aaad59b0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f457d831d9f55e87b2f0b35ad6d033fd6b4181ed000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0xc2466492C451E1AE49d8C874bB9f89293Aaad59b" + } + ], + "conflux": [ + { + "name": "InterchainAccountIsm", + "address": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0x028B04386031b9648A8D78d06c58F6E763Be5cD0", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xc2466492C451E1AE49d8C874bB9f89293Aaad59b", + "constructorArguments": "000000000000000000000000028b04386031b9648a8d78d06c58f6e763be5cd00000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093d41e41ca545a35a81d11b08d2ee8b852c768df000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x028B04386031b9648A8D78d06c58F6E763Be5cD0" + } + ], + "ink": [ + { + "name": "InterchainAccountIsm", + "address": "0x60515f328B2c55Df63f456D9D839a0082892dEf8", + "constructorArguments": "0000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b39", + "isProxy": false + }, + { + "name": "InterchainAccountRouter", + "address": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df", + "constructorArguments": "0000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b39", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xF457D831d9F55e87B2F0b35AD6D033fd6b4181Ed", + "constructorArguments": "00000000000000000000000093d41e41ca545a35a81d11b08d2ee8b852c768df0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060515f328b2c55df63f456d9d839a0082892def8000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "expectedimplementation": "0x93D41E41cA545a35A81d11b08D2eE8b852C768df" + } ] } diff --git a/typescript/infra/config/environments/mainnet3/owners.ts b/typescript/infra/config/environments/mainnet3/owners.ts index 5b495d316f..01fe1e84b5 100644 --- a/typescript/infra/config/environments/mainnet3/owners.ts +++ b/typescript/infra/config/environments/mainnet3/owners.ts @@ -62,7 +62,7 @@ export const safes: ChainMap
= { export const icaOwnerChain = 'ethereum'; // Found by running: -// yarn tsx ./scripts/get-owner-ica.ts -e mainnet3 --ownerChain ethereum --destinationChains ... +// yarn tsx ./scripts/keys/get-owner-ica.ts -e mainnet3 --ownerChain ethereum --destinationChains ... export const icas: Partial< Record<(typeof supportedChainNames)[number], Address> > = { @@ -173,6 +173,21 @@ export const icas: Partial< // swell: '0xff8326468e7AaB51c53D3569cf7C45Dd54c11687', // already has a safe lumiaprism: '0xAFfA863646D1bC74ecEC0dB1070f069Af065EBf5', appchain: '0x4F25DFFd10A6D61C365E1a605d07B2ab0E82A7E6', + + // Dec 13, 2024 batch + // ---------------------------------------------------------- + arthera: '0x962e4E5F5e47e1Ab5361eE0B5108Ebeb9Fa5c99B', + aurora: '0x853f40c807cbb08EDd19B326b9b6A669bf3c274c', + conflux: '0xac8f0e306A126312C273080d149ca01d461603FE', + conwai: '0x5926599B8Aff45f1708b804B30213babdAD78C83', + corn: '0x5926599B8Aff45f1708b804B30213babdAD78C83', + evmos: '0x5926599B8Aff45f1708b804B30213babdAD78C83', + form: '0x5926599B8Aff45f1708b804B30213babdAD78C83', + ink: '0xDde4Ce691d1c0579d48BCdd3491aA71472b6cC38', + rivalz: '0xc1e20A0D78E79B94D71d4bDBC8FD0Af7c856Dd7A', + soneium: '0x5926599B8Aff45f1708b804B30213babdAD78C83', + sonic: '0x5926599B8Aff45f1708b804B30213babdAD78C83', + telos: '0xDde4Ce691d1c0579d48BCdd3491aA71472b6cC38', } as const; export const DEPLOYER = '0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba'; diff --git a/typescript/infra/config/environments/mainnet3/supportedChainNames.ts b/typescript/infra/config/environments/mainnet3/supportedChainNames.ts index 0b86151222..5d433fca5c 100644 --- a/typescript/infra/config/environments/mainnet3/supportedChainNames.ts +++ b/typescript/infra/config/environments/mainnet3/supportedChainNames.ts @@ -7,8 +7,10 @@ export const mainnet3SupportedChainNames = [ 'appchain', 'arbitrum', 'arbitrumnova', + 'arthera', 'astar', 'astarzkevm', + 'aurora', 'flame', 'avalanche', 'b3', @@ -22,7 +24,10 @@ export const mainnet3SupportedChainNames = [ 'celo', 'cheesechain', 'chilizmainnet', + 'conflux', + 'conwai', 'coredao', + 'corn', 'cyber', 'degenchain', 'dogechain', @@ -31,9 +36,12 @@ export const mainnet3SupportedChainNames = [ 'endurance', 'ethereum', 'everclear', + 'evmos', 'fantom', 'flare', 'flowmainnet', + 'form', + // 'fractal', 'fraxtal', 'fusemainnet', 'gnosis', @@ -41,6 +49,7 @@ export const mainnet3SupportedChainNames = [ 'harmony', 'immutablezkevmmainnet', 'inevm', + 'ink', 'injective', 'kaia', 'kroma', @@ -72,6 +81,7 @@ export const mainnet3SupportedChainNames = [ 'rarichain', 'real', 'redstone', + 'rivalz', 'rootstockmainnet', 'sanko', 'scroll', @@ -79,12 +89,15 @@ export const mainnet3SupportedChainNames = [ 'shibarium', 'snaxchain', 'solanamainnet', + 'soneium', + 'sonic', 'stride', 'superseed', 'superpositionmainnet', 'swell', 'taiko', 'tangle', + 'telos', 'treasure', 'unichain', 'vana', diff --git a/typescript/infra/config/environments/mainnet3/tokenPrices.json b/typescript/infra/config/environments/mainnet3/tokenPrices.json index 9567a31775..6d4517e2ad 100644 --- a/typescript/infra/config/environments/mainnet3/tokenPrices.json +++ b/typescript/infra/config/environments/mainnet3/tokenPrices.json @@ -1,99 +1,111 @@ { - "ancient8": "3849.95", - "alephzeroevmmainnet": "0.563568", - "apechain": "1.66", - "appchain": "3849.95", - "arbitrum": "3849.95", - "arbitrumnova": "3849.95", - "astar": "0.078825", - "astarzkevm": "3849.95", - "flame": "7.62", - "avalanche": "49.4", - "b3": "3849.95", - "base": "3849.95", - "bitlayer": "98047", - "blast": "3849.95", - "bob": "3849.95", - "boba": "3849.95", - "bsc": "714.94", - "bsquared": "98047", - "celo": "0.916567", - "cheesechain": "0.0015485", - "chilizmainnet": "0.119182", - "coredao": "1.42", - "cyber": "3849.95", - "degenchain": "0.01880045", - "dogechain": "0.429424", - "duckchain": "6.4", - "eclipsemainnet": "3849.95", - "endurance": "3.21", - "ethereum": "3849.95", - "everclear": "3849.95", - "fantom": "1.23", - "flare": "0.02912373", - "flowmainnet": "1.048", - "fraxtal": "3847.8", - "fusemainnet": "0.04124996", - "gnosis": "1.001", - "gravity": "0.03951512", - "harmony": "0.03939191", - "immutablezkevmmainnet": "1.89", - "inevm": "30.43", - "injective": "30.43", - "kaia": "0.282109", - "kroma": "3849.95", - "linea": "3849.95", - "lisk": "3849.95", - "lukso": "2.81", - "lumia": "2.25", - "lumiaprism": "2.25", - "mantapacific": "3849.95", - "mantle": "1.13", - "merlin": "99320", - "metal": "3849.95", - "metis": "59.74", - "mint": "3849.95", - "mode": "3849.95", - "molten": "0.382952", - "moonbeam": "0.345164", - "morph": "3849.95", - "neutron": "0.571583", - "oortmainnet": "0.22645", - "optimism": "3849.95", - "orderly": "3849.95", - "osmosis": "0.699208", - "polygon": "0.633271", - "polygonzkevm": "3849.95", - "polynomialfi": "3849.95", - "prom": "7.16", - "proofofplay": "3849.95", - "rarichain": "3849.95", + "ancient8": "3862.21", + "alephzeroevmmainnet": "0.491237", + "apechain": "1.48", + "appchain": "3862.21", + "arbitrum": "3862.21", + "arbitrumnova": "3862.21", + "arthera": "0.079162", + "astar": "0.068176", + "astarzkevm": "3862.21", + "aurora": "3862.21", + "flame": "6.24", + "avalanche": "46.58", + "b3": "3862.21", + "base": "3862.21", + "bitlayer": "104188", + "blast": "3862.21", + "bob": "3862.21", + "boba": "3862.21", + "bsc": "715.42", + "bsquared": "104188", + "celo": "0.763128", + "cheesechain": "0.00147642", + "chilizmainnet": "0.101585", + "conflux": "0.187951", + "conwai": "0.00457053", + "coredao": "1.23", + "corn": "104188", + "cyber": "3862.21", + "degenchain": "0.01304206", + "dogechain": "0.385834", + "duckchain": "5.75", + "eclipsemainnet": "3862.21", + "endurance": "2.42", + "ethereum": "3862.21", + "everclear": "3862.21", + "evmos": "0.02761808", + "fantom": "1.3", + "flare": "0.02941065", + "flowmainnet": "0.856226", + "form": "3862.21", + "fraxtal": "3854.07", + "fusemainnet": "0.034729", + "gnosis": "1.005", + "gravity": "0.03098347", + "harmony": "0.03085585", + "immutablezkevmmainnet": "1.68", + "inevm": "26.54", + "ink": "3862.21", + "injective": "26.54", + "kaia": "0.257712", + "kroma": "3862.21", + "linea": "3862.21", + "lisk": "3862.21", + "lukso": "2.82", + "lumia": "1.89", + "lumiaprism": "1.81", + "mantapacific": "3862.21", + "mantle": "1.19", + "merlin": "104171", + "metal": "3862.21", + "metis": "53.23", + "mint": "3862.21", + "mode": "3862.21", + "molten": "0.504259", + "moonbeam": "0.278919", + "morph": "3862.21", + "neutron": "0.47823", + "oortmainnet": "0.176273", + "optimism": "3862.21", + "orderly": "3862.21", + "osmosis": "0.550513", + "polygon": "0.55632", + "polygonzkevm": "3862.21", + "polynomialfi": "3862.21", + "prom": "6.34", + "proofofplay": "3862.21", + "rarichain": "3862.21", "real": "1", - "redstone": "3849.95", - "rootstockmainnet": "98004", - "sanko": "58.27", - "scroll": "3849.95", - "sei": "0.625869", - "shibarium": "0.670964", - "snaxchain": "3849.95", - "solanamainnet": "226.39", - "stride": "0.779753", - "superseed": "3849.95", - "superpositionmainnet": "3849.95", - "swell": "3849.95", - "taiko": "3849.95", + "redstone": "3862.21", + "rivalz": "3862.21", + "rootstockmainnet": "103948", + "sanko": "62.71", + "scroll": "3862.21", + "sei": "0.517789", + "shibarium": "0.555228", + "snaxchain": "3862.21", + "solanamainnet": "216.87", + "soneium": "3862.21", + "sonic": "1.3", + "stride": "0.658767", + "superseed": "3862.21", + "superpositionmainnet": "3862.21", + "swell": "3862.21", + "taiko": "3862.21", "tangle": "1", - "treasure": "0.638598", - "unichain": "3849.95", - "vana": "1", - "viction": "0.50166", - "worldchain": "3849.95", - "xai": "0.368066", - "xlayer": "56.38", - "zeronetwork": "3849.95", - "zetachain": "0.805386", - "zircuit": "3849.95", - "zklink": "3849.95", - "zksync": "3849.95", - "zoramainnet": "3849.95" + "telos": "0.300906", + "treasure": "0.535464", + "unichain": "3862.21", + "vana": "17.77", + "viction": "0.43386", + "worldchain": "3862.21", + "xai": "0.292813", + "xlayer": "51.34", + "zeronetwork": "3862.21", + "zetachain": "0.672943", + "zircuit": "3862.21", + "zklink": "3862.21", + "zksync": "3862.21", + "zoramainnet": "3862.21" } diff --git a/typescript/infra/config/environments/mainnet3/validators.ts b/typescript/infra/config/environments/mainnet3/validators.ts index 17500268ec..73e4985a50 100644 --- a/typescript/infra/config/environments/mainnet3/validators.ts +++ b/typescript/infra/config/environments/mainnet3/validators.ts @@ -1254,5 +1254,137 @@ export const validatorChainConfig = ( 'appchain', ), }, + + arthera: { + interval: 5, + reorgPeriod: getReorgPeriod('arthera'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0x13710ac11c36c169f62fba95767ae59a1e57098d'], + }, + 'arthera', + ), + }, + aurora: { + interval: 5, + reorgPeriod: getReorgPeriod('aurora'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0x37105aec3ff37c7bb0abdb0b1d75112e1e69fa86'], + }, + 'aurora', + ), + }, + conflux: { + interval: 5, + reorgPeriod: getReorgPeriod('conflux'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0x113dfa1dc9b0a2efb6ad01981e2aad86d3658490'], + }, + 'conflux', + ), + }, + conwai: { + interval: 5, + reorgPeriod: getReorgPeriod('conwai'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0x949e2cdd7e79f99ee9bbe549540370cdc62e73c3'], + }, + 'conwai', + ), + }, + corn: { + interval: 5, + reorgPeriod: getReorgPeriod('corn'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0xc80b2e3e38220e02d194a0effa9d5bfe89894c07'], + }, + 'corn', + ), + }, + evmos: { + interval: 5, + reorgPeriod: getReorgPeriod('evmos'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0x8f82387ad8b7b13aa9e06ed3f77f78a77713afe0'], + }, + 'evmos', + ), + }, + form: { + interval: 5, + reorgPeriod: getReorgPeriod('form'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0x58554b2e76167993b5fc000d0070a2f883cd333a'], + }, + 'form', + ), + }, + ink: { + interval: 5, + reorgPeriod: getReorgPeriod('ink'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0xb533b8b104522958b984fb258e0684dec0f1a6a5'], + }, + 'ink', + ), + }, + soneium: { + interval: 5, + reorgPeriod: getReorgPeriod('soneium'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0xd4b7af853ed6a2bfc329ecef545df90c959cbee8'], + }, + 'soneium', + ), + }, + sonic: { + interval: 5, + reorgPeriod: getReorgPeriod('sonic'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0xa313d72dbbd3fa51a2ed1611ea50c37946fa42f7'], + }, + 'sonic', + ), + }, + telos: { + interval: 5, + reorgPeriod: getReorgPeriod('telos'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0xcb08410b14d3adf0d0646f0c61cd07e0daba8e54'], + }, + 'telos', + ), + }, + rivalz: { + interval: 5, + reorgPeriod: getReorgPeriod('rivalz'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0xf87c3eb3dde972257b0d6d110bdadcda951c0dc1'], + }, + 'rivalz', + ), + }, + + // fractal: { + // interval: 5, + // reorgPeriod: getReorgPeriod('fractal'), + // validators: validatorsConfig( + // { + // [Contexts.Hyperlane]: ['0x3476c9652d3371bb01bbb4962516fffee5e73754'], + // }, + // 'fractal', + // ), + // }, }; }; diff --git a/typescript/infra/config/environments/mainnet3/warp/configGetters/getAppchainBaseUSDCWarpConfig.ts b/typescript/infra/config/environments/mainnet3/warp/configGetters/getAppchainBaseUSDCWarpConfig.ts new file mode 100644 index 0000000000..fce2c5c6ae --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/warp/configGetters/getAppchainBaseUSDCWarpConfig.ts @@ -0,0 +1,45 @@ +import { ethers } from 'ethers'; + +import { + ChainMap, + HypTokenRouterConfig, + IsmConfig, + TokenType, +} from '@hyperlane-xyz/sdk'; +import { Address } from '@hyperlane-xyz/utils'; + +import { + RouterConfigWithoutOwner, + tokens, +} from '../../../../../src/config/warp.js'; + +const safeOwners: ChainMap
= { + appchain: '0xe3436b3335fa6d4f1b58153079FB360c6Aa83Fd9', + base: '0xE3b50a565fbcdb6CC67B30bEB112f9e7FC855359', +}; + +export const getAppChainBaseUSDCWarpConfig = async ( + routerConfig: ChainMap, +): Promise> => { + const ISM_CONFIG: IsmConfig = ethers.constants.AddressZero; // Use the default ISM + + const appchain: HypTokenRouterConfig = { + mailbox: routerConfig.appchain.mailbox, + owner: safeOwners.appchain, + type: TokenType.synthetic, + interchainSecurityModule: ISM_CONFIG, + }; + + const base: HypTokenRouterConfig = { + mailbox: routerConfig.base.mailbox, + owner: safeOwners.base, + type: TokenType.collateral, + token: tokens.base.USDC, + interchainSecurityModule: ISM_CONFIG, + }; + + return { + appchain, + base, + }; +}; diff --git a/typescript/infra/config/environments/mainnet3/warp/configGetters/getBobaBsquaredSwellUBTCWarpConfig.ts b/typescript/infra/config/environments/mainnet3/warp/configGetters/getBobaBsquaredSwellUBTCWarpConfig.ts new file mode 100644 index 0000000000..fcd48c686c --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/warp/configGetters/getBobaBsquaredSwellUBTCWarpConfig.ts @@ -0,0 +1,54 @@ +import { ethers } from 'ethers'; + +import { + ChainMap, + HypTokenRouterConfig, + IsmConfig, + TokenType, +} from '@hyperlane-xyz/sdk'; +import { Address } from '@hyperlane-xyz/utils'; + +import { + RouterConfigWithoutOwner, + tokens, +} from '../../../../../src/config/warp.js'; + +const safeOwners: ChainMap
= { + bsquared: '0x7A363efD42305BeDBA307d25351F8ea157b69A1A', + swell: '0xC11e22A31787394950B31e2DEb1d2b5546689B65', + boba: '0x207FfFa7325fC5d0362aB01605D84B268b61888f', +}; + +export const getBobaBsquaredSwellUBTCWarpConfig = async ( + routerConfig: ChainMap, +): Promise> => { + const ISM_CONFIG: IsmConfig = ethers.constants.AddressZero; // Use the default ISM + + const boba: HypTokenRouterConfig = { + mailbox: routerConfig.boba.mailbox, + owner: safeOwners.boba, + type: TokenType.synthetic, + interchainSecurityModule: ISM_CONFIG, + }; + + const bsquared: HypTokenRouterConfig = { + mailbox: routerConfig.bsquared.mailbox, + owner: safeOwners.bsquared, + type: TokenType.collateral, + token: tokens.bsquared.uBTC, + interchainSecurityModule: ISM_CONFIG, + }; + + const swell: HypTokenRouterConfig = { + mailbox: routerConfig.swell.mailbox, + owner: safeOwners.swell, + type: TokenType.synthetic, + interchainSecurityModule: ISM_CONFIG, + }; + + return { + boba, + bsquared, + swell, + }; +}; diff --git a/typescript/infra/config/environments/mainnet3/warp/configGetters/getEthereumZircuitRe7LRTWarpConfig.ts b/typescript/infra/config/environments/mainnet3/warp/configGetters/getEthereumZircuitRe7LRTWarpConfig.ts new file mode 100644 index 0000000000..c7ea4e9ac7 --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/warp/configGetters/getEthereumZircuitRe7LRTWarpConfig.ts @@ -0,0 +1,44 @@ +import { ethers } from 'ethers'; + +import { + ChainMap, + HypTokenRouterConfig, + OwnableConfig, + TokenType, +} from '@hyperlane-xyz/sdk'; + +import { + RouterConfigWithoutOwner, + tokens, +} from '../../../../../src/config/warp.js'; + +const Re7Safes = { + ethereum: '0x184d597Be309e11650ca6c935B483DcC05551578', + zircuit: '0x7Ac2631B4F87801965Acdad169949D6f865068f7', +}; + +const ISM_CONFIG = ethers.constants.AddressZero; // Default ISM + +export const getEthereumZircuitRe7LRTWarpConfig = async ( + routerConfig: ChainMap, +): Promise> => { + const ethereum: HypTokenRouterConfig = { + ...routerConfig.ethereum, + owner: Re7Safes.ethereum, + type: TokenType.collateral, + token: tokens.ethereum.Re7LRT, + interchainSecurityModule: ISM_CONFIG, + }; + + const zircuit: HypTokenRouterConfig = { + ...routerConfig.zircuit, + owner: Re7Safes.zircuit, + type: TokenType.synthetic, + interchainSecurityModule: ISM_CONFIG, + }; + + return { + ethereum, + zircuit, + }; +}; diff --git a/typescript/infra/config/environments/mainnet3/warp/warpIds.ts b/typescript/infra/config/environments/mainnet3/warp/warpIds.ts index 34b767c314..d9bf87760d 100644 --- a/typescript/infra/config/environments/mainnet3/warp/warpIds.ts +++ b/typescript/infra/config/environments/mainnet3/warp/warpIds.ts @@ -22,15 +22,20 @@ export enum WarpRouteIds { EthereumInevmUSDC = 'USDC/ethereum-inevm', EthereumInevmUSDT = 'USDT/ethereum-inevm', EthereumSeiFastUSD = 'FASTUSD/ethereum-sei', + EthereumVanaETH = 'ETH/ethereum-vana', + EthereumVanaVANA = 'VANA/ethereum-vana', EthereumVictionETH = 'ETH/ethereum-viction', EthereumVictionUSDC = 'USDC/ethereum-viction', EthereumVictionUSDT = 'USDT/ethereum-viction', EthereumSwellZircuitPZETH = 'PZETH/ethereum-swell-zircuit', EthereumBscLumiaLUMIA = 'LUMIA/bsc-ethereum-lumia', + EthereumZircuitRe7LRT = 'Re7LRT/ethereum-zircuit', InevmInjectiveINJ = 'INJ/inevm-injective', MantapacificNeutronTIA = 'TIA/mantapacific-neutron', BaseZeroNetworkCBBTC = 'CBBTC/base-zeronetwork', ArbitrumEthereumMantleModePolygonScrollZeroNetworkUSDT = 'USDT/arbitrum-ethereum-mantle-mode-polygon-scroll-zeronetwork', ArbitrumBaseEthereumLiskOptimismPolygonZeroNetworkUSDC = 'USDC/arbitrum-base-ethereum-lisk-optimism-polygon-zeronetwork', ArbitrumBaseBlastBscEthereumGnosisLiskMantleModeOptimismPolygonScrollZeroNetworkZoraMainnet = 'ETH/arbitrum-base-blast-bsc-ethereum-gnosis-lisk-mantle-mode-optimism-polygon-scroll-zeronetwork-zoramainnet', + AppchainBaseUSDC = 'USDC/appchain-base', + BobaBsquaredSwellUBTC = 'UBTC/boba-bsquared-swell', } diff --git a/typescript/infra/config/environments/testnet4/agent.ts b/typescript/infra/config/environments/testnet4/agent.ts index 2bab1291ac..d34e53657d 100644 --- a/typescript/infra/config/environments/testnet4/agent.ts +++ b/typescript/infra/config/environments/testnet4/agent.ts @@ -113,7 +113,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig< alephzeroevmtestnet: true, alfajores: true, arbitrumsepolia: true, - arcadiatestnet2: true, + arcadiatestnet2: false, basesepolia: true, berabartio: true, bsctestnet: true, @@ -219,7 +219,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'bb4e82b-20241107-190434', + tag: '7c0c967-20241218-173053', }, blacklist: [...releaseCandidateHelloworldMatchingList, ...relayBlacklist], gasPaymentEnforcement, @@ -250,7 +250,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '4b280cd-20241206-130519', + tag: 'd84d8da-20241217-172447', }, resources: scraperResources, }, @@ -265,7 +265,7 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '5a0d68b-20240916-144115', + tag: '7c0c967-20241218-173053', }, whitelist: [...releaseCandidateHelloworldMatchingList], blacklist: relayBlacklist, diff --git a/typescript/infra/config/environments/testnet4/index.ts b/typescript/infra/config/environments/testnet4/index.ts index 9ef3436975..03430bbbe4 100644 --- a/typescript/infra/config/environments/testnet4/index.ts +++ b/typescript/infra/config/environments/testnet4/index.ts @@ -26,10 +26,13 @@ import { liquidityLayerRelayerConfig } from './middleware.js'; import { owners } from './owners.js'; import { supportedChainNames } from './supportedChainNames.js'; -const getRegistry = async (useSecrets = true): Promise => +const getRegistry = async ( + useSecrets = true, + chains: ChainName[] = supportedChainNames, +): Promise => getRegistryForEnvironment( environmentName, - supportedChainNames, + chains, chainMetadataOverrides, useSecrets, ); @@ -45,15 +48,18 @@ export const environment: EnvironmentConfig = { role: Role = Role.Deployer, useSecrets?: boolean, chains?: ChainName[], - ) => - getMultiProviderForRole( + ) => { + const providerChains = + chains && chains.length > 0 ? chains : supportedChainNames; + return getMultiProviderForRole( environmentName, - chains && chains.length > 0 ? chains : supportedChainNames, - await getRegistry(useSecrets), + providerChains, + await getRegistry(useSecrets, providerChains), context, role, undefined, - ), + ); + }, getKeys: ( context: Contexts = Contexts.Hyperlane, role: Role = Role.Deployer, diff --git a/typescript/infra/config/warp.ts b/typescript/infra/config/warp.ts index f9ebeb69c6..c68e2221d9 100644 --- a/typescript/infra/config/warp.ts +++ b/typescript/infra/config/warp.ts @@ -13,6 +13,7 @@ import { import { RouterConfigWithoutOwner } from '../src/config/warp.js'; import { getAncient8EthereumUSDCWarpConfig } from './environments/mainnet3/warp/configGetters/getAncient8EthereumUSDCWarpConfig.js'; +import { getAppChainBaseUSDCWarpConfig } from './environments/mainnet3/warp/configGetters/getAppchainBaseUSDCWarpConfig.js'; import { getArbitrumBaseBlastBscEthereumGnosisMantleModeOptimismPolygonScrollZeroNetworkZoraMainnetETHWarpConfig } from './environments/mainnet3/warp/configGetters/getArbitrumBaseBlastBscEthereumGnosisMantleModeOptimismPolygonScrollZeroNetworkZoraMainnetETHWarpConfig.js'; import { getArbitrumBaseEthereumOptimismPolygonZeroNetworkUSDC } from './environments/mainnet3/warp/configGetters/getArbitrumBaseEthereumOptimismPolygonZeroNetworkUSDCWarpConfig.js'; import { getArbitrumEthereumMantleModePolygonScrollZeroNetworkUSDTWarpConfig } from './environments/mainnet3/warp/configGetters/getArbitrumBscEthereumMantleModePolygonScrollZeronetworkUSDTWarpConfig.js'; @@ -20,6 +21,7 @@ import { getArbitrumEthereumZircuitAmphrETHWarpConfig } from './environments/mai import { getArbitrumNeutronEclipWarpConfig } from './environments/mainnet3/warp/configGetters/getArbitrumNeutronEclipWarpConfig.js'; import { getArbitrumNeutronTiaWarpConfig } from './environments/mainnet3/warp/configGetters/getArbitrumNeutronTiaWarpConfig.js'; import { getBaseZeroNetworkCBBTCWarpConfig } from './environments/mainnet3/warp/configGetters/getBaseZeroNetworkCBBTCWarpConfig.js'; +import { getBobaBsquaredSwellUBTCWarpConfig } from './environments/mainnet3/warp/configGetters/getBobaBsquaredSwellUBTCWarpConfig.js'; import { getEclipseEthereumApxEthWarpConfig } from './environments/mainnet3/warp/configGetters/getEclipseEthereumApxETHWarpConfig.js'; import { getEclipseEthereumSolanaUSDTWarpConfig } from './environments/mainnet3/warp/configGetters/getEclipseEthereumSolanaUSDTWarpConfig.js'; import { getEclipseEthereumWBTCWarpConfig } from './environments/mainnet3/warp/configGetters/getEclipseEthereumWBTCWarpConfig.js'; @@ -34,6 +36,7 @@ import { getEthereumSeiFastUSDWarpConfig } from './environments/mainnet3/warp/co import { getEthereumVictionETHWarpConfig } from './environments/mainnet3/warp/configGetters/getEthereumVictionETHWarpConfig.js'; import { getEthereumVictionUSDCWarpConfig } from './environments/mainnet3/warp/configGetters/getEthereumVictionUSDCWarpConfig.js'; import { getEthereumVictionUSDTWarpConfig } from './environments/mainnet3/warp/configGetters/getEthereumVictionUSDTWarpConfig.js'; +import { getEthereumZircuitRe7LRTWarpConfig } from './environments/mainnet3/warp/configGetters/getEthereumZircuitRe7LRTWarpConfig.js'; import { getInevmInjectiveINJWarpConfig } from './environments/mainnet3/warp/configGetters/getInevmInjectiveINJWarpConfig.js'; import { getMantapacificNeutronTiaWarpConfig } from './environments/mainnet3/warp/configGetters/getMantapacificNeutronTiaWarpConfig.js'; import { getRenzoEZETHWarpConfig } from './environments/mainnet3/warp/configGetters/getRenzoEZETHWarpConfig.js'; @@ -78,6 +81,9 @@ export const warpConfigGetterMap: Record = { getArbitrumBaseBlastBscEthereumGnosisMantleModeOptimismPolygonScrollZeroNetworkZoraMainnetETHWarpConfig, [WarpRouteIds.EclipseStrideTIA]: getEclipseStrideTiaWarpConfig, [WarpRouteIds.EclipseStrideSTTIA]: getEclipseStrideStTiaWarpConfig, + [WarpRouteIds.AppchainBaseUSDC]: getAppChainBaseUSDCWarpConfig, + [WarpRouteIds.BobaBsquaredSwellUBTC]: getBobaBsquaredSwellUBTCWarpConfig, + [WarpRouteIds.EthereumZircuitRe7LRT]: getEthereumZircuitRe7LRTWarpConfig, }; export async function getWarpConfig( @@ -91,7 +97,11 @@ export async function getWarpConfig( ); // Strip the owners from the router config const routerConfigWithoutOwner = objMap(routerConfig, (_chain, config) => { - const { owner, ownerOverrides, ...configWithoutOwner } = config; + const { + owner: _owner, + ownerOverrides: _ownerOverrides, + ...configWithoutOwner + } = config; return configWithoutOwner; }); // Isolate the owners from the router config diff --git a/typescript/infra/scripts/agent-utils.ts b/typescript/infra/scripts/agent-utils.ts index a1c214208e..e60d137f95 100644 --- a/typescript/infra/scripts/agent-utils.ts +++ b/typescript/infra/scripts/agent-utils.ts @@ -295,9 +295,11 @@ export async function getWarpRouteIdInteractive() { // Interactively gets multiple warp route IDs export async function getWarpRouteIdsInteractive() { - const choices = Object.values(WarpRouteIds).map((id) => ({ - value: id, - })); + const choices = Object.values(WarpRouteIds) + .sort() + .map((id) => ({ + value: id, + })); let selection: WarpRouteIds[] = []; diff --git a/typescript/infra/scripts/check/check-validator-version.ts b/typescript/infra/scripts/check/check-validator-version.ts index 72df04621d..ee6992d88a 100644 --- a/typescript/infra/scripts/check/check-validator-version.ts +++ b/typescript/infra/scripts/check/check-validator-version.ts @@ -15,25 +15,33 @@ import { getEnvironmentConfig, getHyperlaneCore } from '../core-utils.js'; // prettier-ignore const acceptableValidatorVersions: Record = { // Aug 27 deploy - '72d498fa984750b9137c1211fef6c80a3e594ce7': 'aug-27-batch', + '72d498fa984750b9137c1211fef6c80a3e594ce7': 'August 27 2024', // Sep 9 deploy - 'd71dd4e5ed7eb69cc4041813ef444e37d881cdda': 'sep-9-batch', + 'd71dd4e5ed7eb69cc4041813ef444e37d881cdda': 'September 9 2024', // Oct 27 deploy - '45399a314cec85723bbb5d2360531c96a3aa261e': 'oct-27-batch', + '45399a314cec85723bbb5d2360531c96a3aa261e': 'October 27 2024', // Nov 7 deploy - '75d62ae7bbdeb77730c6d343c4fc1df97a08abe4': 'nov-7-batch', + '75d62ae7bbdeb77730c6d343c4fc1df97a08abe4': 'November 7 2024', // Nov 21 deploy - 'e70431a85965d8d21681e6f4856ed3ac9bd2ba27': 'nov-21-batch', + 'e70431a85965d8d21681e6f4856ed3ac9bd2ba27': 'November 21 2024', // Nov 21 bsquared deploy - 'd834d8147628584acd78a81e344bff76472d707e': 'nov-21-bsquared', + 'd834d8147628584acd78a81e344bff76472d707e': 'November 21 2024 (Bsquared)', // Nov 21 swell/lumiaprism deploy - 'b35c105f197267072daa14bb3d83c62410b96fac': 'nov-21-swell', + 'b35c105f197267072daa14bb3d83c62410b96fac': 'November 21 2024 (Swell)', + // Dec 4 deploy + 'a7f3967e047c2c5aabb8cc442e4acad435fa32ab': 'December 4 2024', + // Dec 13 deploy + '05e90bc76e5c8ec2491551ecf1b7880187fa2660': 'December 13 2024', // Rolled out only to AW infra before 1.0.0, just 1 commit behind 1.0.0 - 'a64af8be9a76120d0cfc727bb70660fa07e70cce': 'pre-1.0.0', + 'a64af8be9a76120d0cfc727bb70660fa07e70cce': '1.0.0-beta', // 1.0.0 'ffbe1dd82e2452dbc111b6fb469a34fb870da8f1': '1.0.0', - // Tessellated's Own Build - '9b855686d3e2b3d6b81238ce51a576ff5e0f770f': 'tesselated-special-build', + // Tessellated's Build from November 2024 + // https://github.com/Tessellated-io/hyperlane-monorepo/commit/9b855686d3e2b3d6b81238ce51a576ff5e0f770f + '9b855686d3e2b3d6b81238ce51a576ff5e0f770f': 'Tesselated - November 2024', + // Tesselated's Build from December 2024 + // https://github.com/Tessellated-io/hyperlane-monorepo/commit/2bd17da1b30725a6d741197914f5c4b2ae25b566 + '2bd17da1b30725a6d741197914f5c4b2ae25b566': 'Tesselated - December 2024', }; type ValidatorInfo = { diff --git a/typescript/infra/scripts/helloworld/kathy.ts b/typescript/infra/scripts/helloworld/kathy.ts index 678e2bb75d..34b3c4f960 100644 --- a/typescript/infra/scripts/helloworld/kathy.ts +++ b/typescript/infra/scripts/helloworld/kathy.ts @@ -480,8 +480,8 @@ async function sendMessage( }); await timeout( - // Will check for up to 12 minutes - core.waitForMessagesProcessed(origin, destination, receipt, 5000, 144), + // Retry indefinitely, but rely on the timeout to break out + core.waitForMessagesProcessed(origin, destination, receipt, 5000), messageReceiptTimeout, 'Timeout waiting for message to be received', ); diff --git a/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts b/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts index 29fd16b9a9..8ede7cdda5 100644 --- a/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts +++ b/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts @@ -35,6 +35,12 @@ async function main() { await helmManager.runHelmCommand(HelmCommand.InstallOrUpgrade); }; + // First try to uninstall any stale Warp Monitors. + // This can happen if a Warp Route ID is changed or removed. + await WarpRouteMonitorHelmManager.uninstallUnknownWarpMonitorReleases( + environment, + ); + for (const id of warpRouteIds) { console.log(`Deploying Warp Monitor for Warp Route ID: ${id}`); await deployWarpMonitor(id); diff --git a/typescript/infra/scripts/warp-routes/monitor/monitor-warp-route-balances.ts b/typescript/infra/scripts/warp-routes/monitor/monitor-warp-route-balances.ts index 1591d92b3d..4eecc1f736 100644 --- a/typescript/infra/scripts/warp-routes/monitor/monitor-warp-route-balances.ts +++ b/typescript/infra/scripts/warp-routes/monitor/monitor-warp-route-balances.ts @@ -160,7 +160,7 @@ async function getTokenBridgedBalance( const adapter = token.getHypAdapter(warpCore.multiProvider); const bridgedSupply = await adapter.getBridgedSupply(); - if (!bridgedSupply) { + if (bridgedSupply === undefined) { logger.warn('Bridged supply not found for token', token); return undefined; } @@ -273,7 +273,7 @@ async function tryGetTokenPrice( // We only get a price if the token defines a CoinGecko ID. // This way we can ignore values of certain types of collateralized warp routes, // e.g. Native warp routes on rollups that have been pre-funded. - let coinGeckoId = token.coinGeckoId; + const coinGeckoId = token.coinGeckoId; if (!coinGeckoId) { logger.warn('CoinGecko ID missing for token', token.symbol); diff --git a/typescript/infra/src/config/warp.ts b/typescript/infra/src/config/warp.ts index 2ee4314cbe..2ceb1c8cb1 100644 --- a/typescript/infra/src/config/warp.ts +++ b/typescript/infra/src/config/warp.ts @@ -12,6 +12,7 @@ export const tokens: ChainMap> = { USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7', WBTC: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', weETHs: '0x917cee801a67f933f2e6b33fc0cd1ed2d5909d88', + Re7LRT: '0x84631c0d0081FDe56DeB72F6DE77abBbF6A9f93a', }, sei: { fastUSD: '0x37a4dD9CED2b19Cfe8FAC251cd727b5787E45269', @@ -20,6 +21,9 @@ export const tokens: ChainMap> = { cbBTC: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', USDC: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', }, + bsquared: { + uBTC: '0x796e4D53067FF374B89b2Ac101ce0c1f72ccaAc2', + }, arbitrum: { USDT: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', USDC: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', diff --git a/typescript/infra/src/utils/helm.ts b/typescript/infra/src/utils/helm.ts index 2ec09385ea..855393473a 100644 --- a/typescript/infra/src/utils/helm.ts +++ b/typescript/infra/src/utils/helm.ts @@ -93,6 +93,11 @@ export function buildHelmChartDependencies(chartPath: string) { return execCmd(`cd ${chartPath} && helm dependency build`, {}, false, true); } +// Convenience function to remove a helm release without having a HelmManger for it. +export function removeHelmRelease(releaseName: string, namespace: string) { + return execCmd(`helm uninstall ${releaseName} --namespace ${namespace}`); +} + export type HelmValues = Record; export abstract class HelmManager { diff --git a/typescript/infra/src/warp/helm.ts b/typescript/infra/src/warp/helm.ts index ce6c901203..80c2f2353b 100644 --- a/typescript/infra/src/warp/helm.ts +++ b/typescript/infra/src/warp/helm.ts @@ -1,10 +1,16 @@ +import { confirm } from '@inquirer/prompts'; import path from 'path'; +import { difference } from '@hyperlane-xyz/utils'; + +import { WarpRouteIds } from '../../config/environments/mainnet3/warp/warpIds.js'; import { DeployEnvironment } from '../../src/config/environment.js'; -import { HelmManager } from '../../src/utils/helm.js'; -import { getInfraPath } from '../../src/utils/utils.js'; +import { HelmManager, removeHelmRelease } from '../../src/utils/helm.js'; +import { execCmdAndParseJson, getInfraPath } from '../../src/utils/utils.js'; export class WarpRouteMonitorHelmManager extends HelmManager { + static helmReleasePrefix: string = 'hyperlane-warp-route-'; + readonly helmChartPath: string = path.join( getInfraPath(), './helm/warp-routes', @@ -22,7 +28,7 @@ export class WarpRouteMonitorHelmManager extends HelmManager { return { image: { repository: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: 'aac6787-20241128-103715', + tag: '7e520fb-20241215-234731', }, warpRouteId: this.warpRouteId, fullnameOverride: this.helmReleaseName, @@ -37,8 +43,12 @@ export class WarpRouteMonitorHelmManager extends HelmManager { return this.runEnv; } - get helmReleaseName(): string { - let name = `hyperlane-warp-route-${this.warpRouteId + get helmReleaseName() { + return WarpRouteMonitorHelmManager.getHelmReleaseName(this.warpRouteId); + } + + static getHelmReleaseName(warpRouteId: string): string { + let name = `${WarpRouteMonitorHelmManager.helmReleasePrefix}${warpRouteId .toLowerCase() .replaceAll('/', '-')}`; @@ -53,4 +63,46 @@ export class WarpRouteMonitorHelmManager extends HelmManager { } return name; } + + // Gets all Warp Monitor Helm Releases in the given namespace. + static async getWarpMonitorHelmReleases( + namespace: string, + ): Promise { + const results = await execCmdAndParseJson( + `helm list --filter '${WarpRouteMonitorHelmManager.helmReleasePrefix}.+' -o json -n ${namespace}`, + ); + return results.map((r: any) => r.name); + } + + // This method is used to uninstall any stale Warp Monitors. + // This can happen if a Warp Route ID is changed or removed. + // Any warp monitor helm releases found that do not relate to known warp route ids + // will be prompted for uninstallation. + static async uninstallUnknownWarpMonitorReleases(namespace: string) { + const allExpectedHelmReleaseNames = Object.values(WarpRouteIds).map( + WarpRouteMonitorHelmManager.getHelmReleaseName, + ); + const helmReleases = + await WarpRouteMonitorHelmManager.getWarpMonitorHelmReleases(namespace); + + const unknownHelmReleases = difference( + new Set(helmReleases), + new Set(allExpectedHelmReleaseNames), + ); + for (const helmRelease of unknownHelmReleases) { + console.log( + `Unknown Warp Monitor Helm Release: ${helmRelease} (possibly a release from a stale Warp Route ID).`, + ); + const uninstall = await confirm({ + message: + "Would you like to uninstall this Helm Release? Make extra sure it shouldn't exist!", + }); + if (uninstall) { + console.log(`Uninstalling Helm Release: ${helmRelease}`); + await removeHelmRelease(helmRelease, namespace); + } else { + console.log(`Skipping uninstall of Helm Release: ${helmRelease}`); + } + } + } } diff --git a/typescript/sdk/package.json b/typescript/sdk/package.json index 47bb713b13..1c383e1839 100644 --- a/typescript/sdk/package.json +++ b/typescript/sdk/package.json @@ -8,7 +8,6 @@ "@chain-registry/types": "^0.50.14", "@cosmjs/cosmwasm-stargate": "^0.32.4", "@cosmjs/stargate": "^0.32.4", - "@google-cloud/storage": "7.14.0", "@hyperlane-xyz/core": "5.8.3", "@hyperlane-xyz/utils": "7.3.0", "@safe-global/api-kit": "1.3.0", diff --git a/typescript/sdk/src/consts/multisigIsm.ts b/typescript/sdk/src/consts/multisigIsm.ts index 867059be1d..0febbb803c 100644 --- a/typescript/sdk/src/consts/multisigIsm.ts +++ b/typescript/sdk/src/consts/multisigIsm.ts @@ -176,6 +176,18 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + arthera: { + threshold: 2, + validators: [ + { + address: '0x13710ac11c36c169f62fba95767ae59a1e57098d', + alias: AW_VALIDATOR_ALIAS, + }, + DEFAULT_MERKLY_VALIDATOR, + DEFAULT_MITOSIS_VALIDATOR, + ], + }, + astar: { threshold: 2, validators: [ @@ -200,6 +212,18 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + aurora: { + threshold: 2, + validators: [ + { + address: '0x37105aec3ff37c7bb0abdb0b1d75112e1e69fa86', + alias: AW_VALIDATOR_ALIAS, + }, + DEFAULT_MERKLY_VALIDATOR, + DEFAULT_MITOSIS_VALIDATOR, + ], + }, + avalanche: { threshold: 2, validators: [ @@ -271,7 +295,7 @@ export const defaultMultisigConfigs: ChainMap = { }, blast: { - threshold: 2, + threshold: 3, validators: [ { address: '0xf20c0b09f597597c8d2430d3d72dfddaf09177d1', @@ -279,9 +303,10 @@ export const defaultMultisigConfigs: ChainMap = { }, DEFAULT_MITOSIS_VALIDATOR, { - address: '0xae53467a5c2a9d9420c188d10fef5e1d9b9a5b80', - alias: 'Superform', + address: '0x1652d8ba766821cf01aeea34306dfc1cab964a32', + alias: 'Everclear', }, + { address: '0x54bb0036f777202371429e062fe6aee0d59442f9', alias: 'Renzo' }, ], }, @@ -431,6 +456,18 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + conflux: { + threshold: 2, + validators: [ + { + address: '0x113dfa1dc9b0a2efb6ad01981e2aad86d3658490', + alias: AW_VALIDATOR_ALIAS, + }, + DEFAULT_MERKLY_VALIDATOR, + DEFAULT_MITOSIS_VALIDATOR, + ], + }, + connextsepolia: { threshold: 1, validators: [ @@ -441,6 +478,18 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + conwai: { + threshold: 2, + validators: [ + { + address: '0x949e2cdd7e79f99ee9bbe549540370cdc62e73c3', + alias: AW_VALIDATOR_ALIAS, + }, + DEFAULT_MERKLY_VALIDATOR, + DEFAULT_MITOSIS_VALIDATOR, + ], + }, + coredao: { threshold: 2, validators: [ @@ -453,6 +502,18 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + corn: { + threshold: 2, + validators: [ + { + address: '0xc80b2e3e38220e02d194a0effa9d5bfe89894c07', + alias: AW_VALIDATOR_ALIAS, + }, + DEFAULT_MERKLY_VALIDATOR, + DEFAULT_MITOSIS_VALIDATOR, + ], + }, + cyber: { threshold: 2, validators: [ @@ -595,6 +656,18 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + evmos: { + threshold: 2, + validators: [ + { + address: '0x8f82387ad8b7b13aa9e06ed3f77f78a77713afe0', + alias: AW_VALIDATOR_ALIAS, + }, + DEFAULT_MERKLY_VALIDATOR, + DEFAULT_MITOSIS_VALIDATOR, + ], + }, + fantom: { threshold: 2, validators: [ @@ -658,6 +731,18 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + form: { + threshold: 2, + validators: [ + { + address: '0x58554b2e76167993b5fc000d0070a2f883cd333a', + alias: AW_VALIDATOR_ALIAS, + }, + DEFAULT_MERKLY_VALIDATOR, + DEFAULT_MITOSIS_VALIDATOR, + ], + }, + formtestnet: { threshold: 1, validators: [ @@ -668,6 +753,16 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + fractal: { + threshold: 1, + validators: [ + { + address: '0x3476c9652d3371bb01bbb4962516fffee5e73754', + alias: AW_VALIDATOR_ALIAS, + }, + ], + }, + fraxtal: { threshold: 4, validators: [ @@ -827,6 +922,31 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + ink: { + threshold: 4, + validators: [ + { + address: '0xb533b8b104522958b984fb258e0684dec0f1a6a5', + alias: AW_VALIDATOR_ALIAS, + }, + { + address: '0xd207a6dfd887d91648b672727ff1aef6223cb15a', + alias: 'Imperator', + }, + + { + address: '0xa40203b5301659f1e201848d92f5e81f64f206f5', + alias: 'Enigma', + }, + { + address: '0xff9c1e7b266a36eda0d9177d4236994d94819dc0', + alias: 'Luganodes', + }, + DEFAULT_BWARE_LABS_VALIDATOR, + DEFAULT_TESSELLATED_VALIDATOR, + ], + }, + inksepolia: { threshold: 1, validators: [ @@ -1323,6 +1443,18 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + rivalz: { + threshold: 2, + validators: [ + { + address: '0xf87c3eb3dde972257b0d6d110bdadcda951c0dc1', + alias: AW_VALIDATOR_ALIAS, + }, + DEFAULT_MERKLY_VALIDATOR, + DEFAULT_MITOSIS_VALIDATOR, + ], + }, + rootstockmainnet: { threshold: 2, validators: [ @@ -1484,6 +1616,16 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + soneium: { + threshold: 1, + validators: [ + { + address: '0xd4b7af853ed6a2bfc329ecef545df90c959cbee8', + alias: AW_VALIDATOR_ALIAS, + }, + ], + }, + soneiumtestnet: { threshold: 1, validators: [ @@ -1494,6 +1636,18 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + sonic: { + threshold: 2, + validators: [ + { + address: '0xa313d72dbbd3fa51a2ed1611ea50c37946fa42f7', + alias: AW_VALIDATOR_ALIAS, + }, + DEFAULT_MERKLY_VALIDATOR, + DEFAULT_MITOSIS_VALIDATOR, + ], + }, + sonictestnet: { threshold: 1, validators: [ @@ -1607,6 +1761,10 @@ export const defaultMultisigConfigs: ChainMap = { }, DEFAULT_MERKLY_VALIDATOR, DEFAULT_MITOSIS_VALIDATOR, + { + address: '0x5aed2fd5cc5f9749c455646c86b0db6126cafcbb', + alias: 'Hashkey Cloud', + }, ], }, @@ -1641,6 +1799,18 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + telos: { + threshold: 2, + validators: [ + { + address: '0xcb08410b14d3adf0d0646f0c61cd07e0daba8e54', + alias: AW_VALIDATOR_ALIAS, + }, + DEFAULT_MERKLY_VALIDATOR, + DEFAULT_MITOSIS_VALIDATOR, + ], + }, + treasure: { threshold: 3, validators: [ @@ -1657,6 +1827,10 @@ export const defaultMultisigConfigs: ChainMap = { alias: 'Treasure', }, DEFAULT_MITOSIS_VALIDATOR, + { + address: '0x5aed2fd5cc5f9749c455646c86b0db6126cafcbb', + alias: 'Hashkey Cloud', + }, ], }, diff --git a/typescript/sdk/src/core/HyperlaneCore.ts b/typescript/sdk/src/core/HyperlaneCore.ts index a3130ecd1a..10d4415ee7 100644 --- a/typescript/sdk/src/core/HyperlaneCore.ts +++ b/typescript/sdk/src/core/HyperlaneCore.ts @@ -14,6 +14,7 @@ import { ProtocolType, addBufferToGasLimit, addressToBytes32, + assert, bytes32ToAddress, isZeroishAddress, messageId, @@ -313,7 +314,7 @@ export class HyperlaneCore extends HyperlaneApp { message: DispatchedMessage, ): Promise { const destinationChain = this.getDestination(message); - const mailbox = this.contractsMap[destinationChain].mailbox; + const mailbox = this.getContracts(destinationChain).mailbox; const processedBlock = await mailbox.processedAt(message.id); const events = await mailbox.queryFilter( @@ -321,6 +322,11 @@ export class HyperlaneCore extends HyperlaneApp { processedBlock, processedBlock, ); + + assert( + events.length === 1, + `Expected exactly one process event, got ${events.length}`, + ); const processedEvent = events[0]; return processedEvent.getTransactionReceipt(); } @@ -428,6 +434,8 @@ export class HyperlaneCore extends HyperlaneApp { if (matching.length === 0) { throw new Error(`No dispatch event found for message ${messageId}`); } + + assert(matching.length === 1, 'Multiple dispatch events found'); const event = matching[0]; // only 1 event per message ID return event.getTransactionReceipt(); } diff --git a/typescript/sdk/src/core/HyperlaneRelayer.ts b/typescript/sdk/src/core/HyperlaneRelayer.ts index 9b82f90cbb..c36a37aef3 100644 --- a/typescript/sdk/src/core/HyperlaneRelayer.ts +++ b/typescript/sdk/src/core/HyperlaneRelayer.ts @@ -207,6 +207,38 @@ export class HyperlaneRelayer { return this.getIsmConfig(destinationChain, ism, message); } + async relayAll( + dispatchTx: providers.TransactionReceipt, + messages = HyperlaneCore.getDispatchedMessages(dispatchTx), + ): Promise> { + const destinationMap: ChainMap = {}; + messages.forEach((message) => { + destinationMap[message.parsed.destination] ??= []; + destinationMap[message.parsed.destination].push(message); + }); + + // parallelize relaying to different destinations + return promiseObjAll( + objMap(destinationMap, async (_destination, messages) => { + const receipts: ethers.ContractReceipt[] = []; + // serially relay messages to the same destination + for (const message of messages) { + try { + const receipt = await this.relayMessage( + dispatchTx, + undefined, + message, + ); + receipts.push(receipt); + } catch (e) { + this.logger.error(`Failed to relay message ${message.id}, ${e}`); + } + } + return receipts; + }), + ); + } + async relayMessage( dispatchTx: providers.TransactionReceipt, messageIndex = 0, diff --git a/typescript/sdk/src/gcp/storage.ts b/typescript/sdk/src/gcp/storage.ts index 96c2a3fd71..6177202314 100644 --- a/typescript/sdk/src/gcp/storage.ts +++ b/typescript/sdk/src/gcp/storage.ts @@ -1,5 +1,3 @@ -import { Storage } from '@google-cloud/storage'; - export const GCS_BUCKET_REGEX = /^(?:(?:https?:\/\/)?([^/]+)\.storage\.googleapis\.com\/?|gs:\/\/([^/]+))$/; @@ -18,53 +16,84 @@ export interface StorageConfig { } export class GcpStorageWrapper { - private readonly client: Storage; private readonly bucket: string; private cache: Record> | undefined; + private readonly baseUrl: string; static fromBucketUrl(bucketUrl: string): GcpStorageWrapper { const match = bucketUrl.match(GCS_BUCKET_REGEX); if (!match) throw new Error('Could not parse bucket url'); return new GcpStorageWrapper({ - bucket: match[1], + // Handle both http and gs:// formats + bucket: match[1] || match[2], caching: true, }); } constructor(readonly config: StorageConfig) { - this.client = new Storage({ - projectId: config.projectId, - keyFilename: config.keyFilename, - }); this.bucket = config.bucket; + this.baseUrl = `https://storage.googleapis.com/storage/v1/b/${this.bucket}/o`; if (config.caching) { this.cache = {}; } } - formatKey(key: string): string { + private formatKey(key: string): string { return this.config.folder ? `${this.config.folder}/${key}` : key; } - async getObject(key: string): Promise | undefined> { - const Key = this.formatKey(key); - if (this.cache?.[Key]) { - return this.cache![Key]; + private getCachedObject(key: string): StorageReceipt | undefined { + return this.cache?.[key]; + } + + private setCachedObject(key: string, value: StorageReceipt): void { + if (this.cache) { + this.cache[key] = value; } + } - try { - const bucket = this.client.bucket(this.bucket); - const file = bucket.file(Key); - const [exists] = await file.exists(); + private async fetchMetadata(key: string): Promise { + const url = new URL(`${this.baseUrl}/${encodeURIComponent(key)}`); + const response = await fetch(url.toString()); - if (!exists) { - return undefined; - } + if (response.status === 404) return undefined; + + if (!response.ok) { + const responseText = await response.text(); + throw new Error( + `Failed to fetch object metadata: ${response.statusText}. ${responseText}`, + ); + } + + return response.json(); + } + + private async fetchContent(key: string): Promise { + const url = `${this.baseUrl}/${encodeURIComponent(key)}?alt=media`; + const response = await fetch(url); + const responseText = await response.text(); + + if (!response.ok) { + throw new Error( + `Failed to fetch object content: ${response.statusText}. ${responseText}`, + ); + } + + return responseText; + } - const [metadata] = await file.getMetadata(); - const [contents] = await file.download(); - const body = contents.toString('utf-8'); + async getObject(key: string): Promise | undefined> { + const formattedKey = this.formatKey(key); + const cachedObject = this.getCachedObject(formattedKey); + if (cachedObject) { + return cachedObject; + } + try { + const metadata = await this.fetchMetadata(formattedKey); + if (!metadata) return undefined; + + const body = await this.fetchContent(formattedKey); const result = { data: JSON.parse(body), // If no updated date is provided, use the Unix epoch start @@ -72,12 +101,10 @@ export class GcpStorageWrapper { modified: new Date(metadata.updated ?? 0), }; - if (this.cache) { - this.cache[Key] = result; - } + this.setCachedObject(formattedKey, result); return result; } catch (e: any) { - if (e.code === 404) { + if (e.status === 404) { return undefined; } throw e; diff --git a/typescript/sdk/src/metadata/matchingList.ts b/typescript/sdk/src/metadata/matchingList.ts index 0e7a50804d..297bc54613 100644 --- a/typescript/sdk/src/metadata/matchingList.ts +++ b/typescript/sdk/src/metadata/matchingList.ts @@ -15,6 +15,7 @@ const DomainSchema = z.union([ const AddressSchema = z.union([z.literal('*'), ZHash, z.array(ZHash)]); const MatchingListElementSchema = z.object({ + messageId: AddressSchema.optional(), originDomain: DomainSchema.optional(), senderAddress: AddressSchema.optional(), destinationDomain: DomainSchema.optional(), diff --git a/typescript/sdk/src/router/HyperlaneRouterChecker.ts b/typescript/sdk/src/router/HyperlaneRouterChecker.ts index e514c8522e..7a8c5e3f1d 100644 --- a/typescript/sdk/src/router/HyperlaneRouterChecker.ts +++ b/typescript/sdk/src/router/HyperlaneRouterChecker.ts @@ -66,12 +66,7 @@ export class HyperlaneRouterChecker< }); } - if (config.hook) { - if (typeof config.hook !== 'string') - return this.logger.info( - `Hook objects not supported in router checker for HookConfig: ${config.hook}`, - ); - + if (config.hook && typeof config.hook === 'string') { const hook = await router.hook(); if (!eqAddress(hook, config.hook as string)) { this.addViolation({ diff --git a/typescript/widgets/src/components/Button.tsx b/typescript/widgets/src/components/Button.tsx index e983bd5645..19114a6cbb 100644 --- a/typescript/widgets/src/components/Button.tsx +++ b/typescript/widgets/src/components/Button.tsx @@ -7,7 +7,7 @@ export function Button(props: Props) { const { className, children, ...rest } = props; const base = - 'htw-flex htw-items-center htw-justify-center htw-rounded-sm htw-transition-all'; + 'htw-flex htw-items-center htw-justify-center htw-rounded-sm htw-transition-all htw-outline-none focus:htw-outline-none'; const onHover = 'hover:htw-opacity-80'; const onDisabled = 'disabled:htw-opacity-30 disabled:htw-cursor-default'; const onActive = 'active:htw-scale-95'; diff --git a/typescript/widgets/src/components/TextInput.tsx b/typescript/widgets/src/components/TextInput.tsx index 42f74f199d..ba24445caa 100644 --- a/typescript/widgets/src/components/TextInput.tsx +++ b/typescript/widgets/src/components/TextInput.tsx @@ -22,7 +22,7 @@ export function _TextInput( type="text" autoComplete="off" onChange={handleChange} - className={`htw-bg-gray-100 focus:htw-bg-gray-200 disabled:htw-bg-gray-500 htw-outline-none htw-transition-all htw-duration-300 ${className}`} + className={`htw-bg-gray-100 focus:htw-bg-gray-200 disabled:htw-bg-gray-500 htw-outline-none focus:htw-outline-none htw-transition-all htw-duration-300 ${className}`} {...props} /> ); diff --git a/typescript/widgets/src/icons/Discord.tsx b/typescript/widgets/src/icons/Discord.tsx index 28a3d93f1d..16e9761248 100644 --- a/typescript/widgets/src/icons/Discord.tsx +++ b/typescript/widgets/src/icons/Discord.tsx @@ -7,14 +7,14 @@ import { DefaultIconProps } from './types.js'; function _Discord({ color, ...rest }: DefaultIconProps) { return ( - + - + diff --git a/yarn.lock b/yarn.lock index 70a2c8f27f..da261caf33 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7205,30 +7205,6 @@ __metadata: languageName: node linkType: hard -"@google-cloud/paginator@npm:^5.0.0": - version: 5.0.2 - resolution: "@google-cloud/paginator@npm:5.0.2" - dependencies: - arrify: "npm:^2.0.0" - extend: "npm:^3.0.2" - checksum: 10/b64ba2029b77fdcf3c827aea0b6d128122fd1d2f4aa8c1ba70747cba0659d4216a283769fb3bbeb8f726176f5282624637f02c30f118a010e05838411da0cb76 - languageName: node - linkType: hard - -"@google-cloud/projectify@npm:^4.0.0": - version: 4.0.0 - resolution: "@google-cloud/projectify@npm:4.0.0" - checksum: 10/fdccdda0b50855c35541d71c46a6603f3302ff1a00108d946272cb2167435da00e2a2da5963fe489f4f5a4a9eb6320abeb97d3269974a972ae89f5df8451922d - languageName: node - linkType: hard - -"@google-cloud/promisify@npm:^4.0.0": - version: 4.0.0 - resolution: "@google-cloud/promisify@npm:4.0.0" - checksum: 10/c5de81321b3a5c567edcbe0b941fb32644611147f3ba22f20575918c225a979988a99bc2ebda05ac914fa8714b0a54c69be72c3f46c7a64c3b19db7d7fba8d04 - languageName: node - linkType: hard - "@google-cloud/secret-manager@npm:^5.5.0": version: 5.5.0 resolution: "@google-cloud/secret-manager@npm:5.5.0" @@ -7238,29 +7214,6 @@ __metadata: languageName: node linkType: hard -"@google-cloud/storage@npm:7.14.0": - version: 7.14.0 - resolution: "@google-cloud/storage@npm:7.14.0" - dependencies: - "@google-cloud/paginator": "npm:^5.0.0" - "@google-cloud/projectify": "npm:^4.0.0" - "@google-cloud/promisify": "npm:^4.0.0" - abort-controller: "npm:^3.0.0" - async-retry: "npm:^1.3.3" - duplexify: "npm:^4.1.3" - fast-xml-parser: "npm:^4.4.1" - gaxios: "npm:^6.0.2" - google-auth-library: "npm:^9.6.3" - html-entities: "npm:^2.5.2" - mime: "npm:^3.0.0" - p-limit: "npm:^3.0.1" - retry-request: "npm:^7.0.0" - teeny-request: "npm:^9.0.0" - uuid: "npm:^8.0.0" - checksum: 10/0726fde2697da696637fab91ebd756354a58c1331f6a0b9ecc5011de4aae72cd9e1fe3e9564aee15c6a2118e45ed0ae8c3ac9685c6581db6107080f906a949e9 - languageName: node - linkType: hard - "@grpc/grpc-js@npm:~1.10.3": version: 1.10.8 resolution: "@grpc/grpc-js@npm:1.10.8" @@ -7398,6 +7351,7 @@ __metadata: typescript: "npm:5.3.3" yaml: "npm:2.4.5" yargs: "npm:^17.7.2" + zksync-ethers: "npm:^5.10.0" zod: "npm:^3.21.2" zod-validation-error: "npm:^3.3.0" zx: "npm:^8.1.4" @@ -7602,7 +7556,6 @@ __metadata: "@cosmjs/cosmwasm-stargate": "npm:^0.32.4" "@cosmjs/stargate": "npm:^0.32.4" "@eslint/js": "npm:^9.15.0" - "@google-cloud/storage": "npm:7.14.0" "@hyperlane-xyz/core": "npm:5.8.3" "@hyperlane-xyz/utils": "npm:7.3.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" @@ -17874,13 +17827,6 @@ __metadata: languageName: node linkType: hard -"arrify@npm:^2.0.0": - version: 2.0.1 - resolution: "arrify@npm:2.0.1" - checksum: 10/067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 - languageName: node - linkType: hard - "as-table@npm:^1.0.36": version: 1.0.55 resolution: "as-table@npm:1.0.55" @@ -21074,7 +21020,7 @@ __metadata: languageName: node linkType: hard -"duplexify@npm:^4.0.0, duplexify@npm:^4.1.2, duplexify@npm:^4.1.3": +"duplexify@npm:^4.0.0, duplexify@npm:^4.1.2": version: 4.1.3 resolution: "duplexify@npm:4.1.3" dependencies: @@ -22700,7 +22646,7 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^5.1.0, ethers@npm:^5.3.1, ethers@npm:^5.7.0, ethers@npm:^5.7.1, ethers@npm:^5.7.2": +"ethers@npm:^5.1.0, ethers@npm:^5.3.1, ethers@npm:^5.7.0, ethers@npm:^5.7.1, ethers@npm:^5.7.2, ethers@npm:~5.7.0": version: 5.7.2 resolution: "ethers@npm:5.7.2" dependencies: @@ -23202,17 +23148,6 @@ __metadata: languageName: node linkType: hard -"fast-xml-parser@npm:^4.4.1": - version: 4.5.0 - resolution: "fast-xml-parser@npm:4.5.0" - dependencies: - strnum: "npm:^1.0.5" - bin: - fxparser: src/cli/cli.js - checksum: 10/dc9571c10e7b57b5be54bcd2d92f50c446eb42ea5df347d253e94dd14eb99b5300a6d172e840f151e0721933ca2406165a8d9b316a6d777bf0596dc4fe1df756 - languageName: node - linkType: hard - "fastq@npm:^1.6.0": version: 1.13.0 resolution: "fastq@npm:1.13.0" @@ -23955,19 +23890,6 @@ __metadata: languageName: node linkType: hard -"gaxios@npm:^6.0.2": - version: 6.7.1 - resolution: "gaxios@npm:6.7.1" - dependencies: - extend: "npm:^3.0.2" - https-proxy-agent: "npm:^7.0.1" - is-stream: "npm:^2.0.0" - node-fetch: "npm:^2.6.9" - uuid: "npm:^9.0.1" - checksum: 10/c85599162208884eadee91215ebbfa1faa412551df4044626cb561300e15193726e8f23d63b486533e066dadad130f58ed872a23acab455238d8d48b531a0695 - languageName: node - linkType: hard - "gcp-metadata@npm:^6.1.0": version: 6.1.0 resolution: "gcp-metadata@npm:6.1.0" @@ -24475,20 +24397,6 @@ __metadata: languageName: node linkType: hard -"google-auth-library@npm:^9.6.3": - version: 9.15.0 - resolution: "google-auth-library@npm:9.15.0" - dependencies: - base64-js: "npm:^1.3.0" - ecdsa-sig-formatter: "npm:^1.0.11" - gaxios: "npm:^6.1.1" - gcp-metadata: "npm:^6.1.0" - gtoken: "npm:^7.0.0" - jws: "npm:^4.0.0" - checksum: 10/fba2db9732bbf1b3a3a2e2b45131ba8e8aba297377f1c104d0b2ab3386bbc1e02047f20b8a7afca1c6308492da1540104618f1c7b5cd539703552e10399c560e - languageName: node - linkType: hard - "google-gax@npm:^4.0.3": version: 4.3.3 resolution: "google-gax@npm:4.3.3" @@ -25170,13 +25078,6 @@ __metadata: languageName: node linkType: hard -"html-entities@npm:^2.5.2": - version: 2.5.2 - resolution: "html-entities@npm:2.5.2" - checksum: 10/4ec12ebdf2d5ba8192c68e1aef3c1e4a4f36b29246a0a88464fe278a54517d0196d3489af46a3145c7ecacb4fc5fd50497be19eb713b810acab3f0efcf36fdc2 - languageName: node - linkType: hard - "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -30113,7 +30014,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.0.1, p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -36411,7 +36312,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^8.0.0, uuid@npm:^8.3.2": +"uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" bin: @@ -37993,6 +37894,17 @@ __metadata: languageName: node linkType: hard +"zksync-ethers@npm:^5.10.0": + version: 5.10.0 + resolution: "zksync-ethers@npm:5.10.0" + dependencies: + ethers: "npm:~5.7.0" + peerDependencies: + ethers: ~5.7.0 + checksum: 10/826719e2e40731e1104cf8a0c16c758526de6ca9e907d0483eb5bd80b635f02e3cce012115b75d68976a8dd746d63d4f83d576cc3bddc18a02a49d2bc023347f + languageName: node + linkType: hard + "zksync-web3@npm:^0.14.3": version: 0.14.4 resolution: "zksync-web3@npm:0.14.4"