diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml index 335b9dec16..e4f51e9ff1 100644 --- a/.github/workflows/node.yml +++ b/.github/workflows/node.yml @@ -120,7 +120,7 @@ jobs: # needs: [yarn-build] # strategy: # matrix: - # environment: [testnet4, mainnet2] + # environment: [testnet4, mainnet3] # module: [ism, core, igp, ica, helloworld] # steps: diff --git a/rust/agents/relayer/src/msg/metadata/base.rs b/rust/agents/relayer/src/msg/metadata/base.rs index 10b88346a0..1b333cd8c4 100644 --- a/rust/agents/relayer/src/msg/metadata/base.rs +++ b/rust/agents/relayer/src/msg/metadata/base.rs @@ -19,10 +19,7 @@ use tracing::{debug, info, instrument, warn}; use crate::{ merkle_tree::builder::MerkleTreeBuilder, msg::metadata::{ - multisig::{ - LegacyMultisigMetadataBuilder, MerkleRootMultisigMetadataBuilder, - MessageIdMultisigMetadataBuilder, - }, + multisig::{MerkleRootMultisigMetadataBuilder, MessageIdMultisigMetadataBuilder}, AggregationIsmMetadataBuilder, CcipReadIsmMetadataBuilder, NullMetadataBuilder, RoutingIsmMetadataBuilder, }, @@ -87,7 +84,6 @@ impl MetadataBuilder for BaseMetadataBuilder { let base = self.clone_with_incremented_depth()?; let metadata_builder: Box = match module_type { - ModuleType::LegacyMultisig => Box::new(LegacyMultisigMetadataBuilder::new(base)), ModuleType::MerkleRootMultisig => { Box::new(MerkleRootMultisigMetadataBuilder::new(base)) } diff --git a/rust/agents/relayer/src/msg/metadata/multisig/base.rs b/rust/agents/relayer/src/msg/metadata/multisig/base.rs index 3652936dd9..42c5efa514 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/base.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/base.rs @@ -1,26 +1,26 @@ -use std::collections::HashMap; use std::fmt::Debug; use async_trait::async_trait; +use derive_more::{AsRef, Deref}; use derive_new::new; use ethers::abi::Token; use eyre::{Context, Result}; use hyperlane_base::MultisigCheckpointSyncer; use hyperlane_core::accumulator::merkle::Proof; -use hyperlane_core::{Checkpoint, HyperlaneMessage, SignatureWithSigner, H256}; +use hyperlane_core::{HyperlaneMessage, MultisigSignedCheckpoint, H256}; use strum::Display; use tracing::{debug, info}; use crate::msg::metadata::BaseMetadataBuilder; use crate::msg::metadata::MetadataBuilder; -#[derive(new)] +#[derive(new, AsRef, Deref)] pub struct MultisigMetadata { - checkpoint: Checkpoint, - signatures: Vec, - merkle_leaf_index: Option, - message_id: Option, + #[deref] + quorum_checkpoint: MultisigSignedCheckpoint, + merkle_leaf_index: u32, + // optional because it's only used for MerkleRootMultisig proof: Option, } @@ -32,9 +32,7 @@ pub enum MetadataToken { MessageId, MerkleProof, MessageMerkleLeafIndex, - Threshold, Signatures, - Validators, } #[async_trait] @@ -49,22 +47,15 @@ pub trait MultisigIsmMetadataBuilder: AsRef + Send + Sync { fn token_layout(&self) -> Vec; - fn format_metadata( - &self, - validators: &[H256], - threshold: u8, - metadata: MultisigMetadata, - ) -> Result> { + fn format_metadata(&self, metadata: MultisigMetadata) -> Result> { let build_token = |token: &MetadataToken| -> Result> { match token { MetadataToken::CheckpointMerkleRoot => { Ok(metadata.checkpoint.root.to_fixed_bytes().into()) } - MetadataToken::MessageMerkleLeafIndex => Ok(metadata - .merkle_leaf_index - .ok_or(eyre::eyre!("Failed to fetch metadata"))? - .to_be_bytes() - .into()), + MetadataToken::MessageMerkleLeafIndex => { + Ok(metadata.merkle_leaf_index.to_be_bytes().into()) + } MetadataToken::CheckpointIndex => { Ok(metadata.checkpoint.index.to_be_bytes().into()) } @@ -74,9 +65,8 @@ pub trait MultisigIsmMetadataBuilder: AsRef + Send + Sync { .to_fixed_bytes() .into()), MetadataToken::MessageId => { - Ok(metadata.message_id.unwrap().to_fixed_bytes().into()) + Ok(metadata.checkpoint.message_id.to_fixed_bytes().into()) } - MetadataToken::Threshold => Ok(Vec::from([threshold])), MetadataToken::MerkleProof => { let proof_tokens: Vec = metadata .proof @@ -87,18 +77,12 @@ pub trait MultisigIsmMetadataBuilder: AsRef + Send + Sync { .collect(); Ok(ethers::abi::encode(&proof_tokens)) } - MetadataToken::Validators => { - let validator_tokens: Vec = validators - .iter() - .map(|x| Token::FixedBytes(x.to_fixed_bytes().into())) - .collect(); - Ok(ethers::abi::encode(&[Token::FixedArray(validator_tokens)])) - } - MetadataToken::Signatures => { - let ordered_signatures = order_signatures(validators, &metadata.signatures); - let threshold_signatures = &ordered_signatures[..threshold as usize]; - Ok(threshold_signatures.concat()) - } + MetadataToken::Signatures => Ok(metadata + .signatures + .iter() + .map(|x| x.to_vec()) + .collect::>() + .concat()), } }; let metas: Result>> = self.token_layout().iter().map(build_token).collect(); @@ -143,11 +127,7 @@ impl MetadataBuilder for T { .context(CTX)? { debug!(?message, ?metadata.checkpoint, "Found checkpoint with quorum"); - Ok(Some(self.format_metadata( - &validators, - threshold, - metadata, - )?)) + Ok(Some(self.format_metadata(metadata)?)) } else { println!( "pacquiao: validator, threshold, message_id: {:?}, {:?}, {:?}", @@ -163,32 +143,3 @@ impl MetadataBuilder for T { } } } - -/// Orders `signatures` by the signers according to the `desired_order`. -/// Returns a Vec of the signature raw bytes in the correct order. -/// Panics if any signers in `signatures` are not present in `desired_order` -fn order_signatures(desired_order: &[H256], signatures: &[SignatureWithSigner]) -> Vec> { - // Signer address => index to sort by - let ordering_map: HashMap = desired_order - .iter() - .enumerate() - .map(|(index, a)| (*a, index)) - .collect(); - - // Create a tuple of (SignatureWithSigner, index to sort by) - let mut ordered_signatures = signatures - .iter() - .cloned() - .map(|s| { - let order_index = ordering_map.get(&H256::from(s.signer)).unwrap(); - (s, *order_index) - }) - .collect::>(); - // Sort by the index - ordered_signatures.sort_by_key(|s| s.1); - // Now collect only the raw signature bytes - ordered_signatures - .into_iter() - .map(|s| s.0.signature.to_vec()) - .collect() -} diff --git a/rust/agents/relayer/src/msg/metadata/multisig/legacy_multisig.rs b/rust/agents/relayer/src/msg/metadata/multisig/legacy_multisig.rs deleted file mode 100644 index 9a97983ace..0000000000 --- a/rust/agents/relayer/src/msg/metadata/multisig/legacy_multisig.rs +++ /dev/null @@ -1,67 +0,0 @@ -use std::fmt::Debug; - -use async_trait::async_trait; -use derive_more::{AsRef, Deref}; -use derive_new::new; - -use eyre::{Context, Result}; -use hyperlane_base::MultisigCheckpointSyncer; -use hyperlane_core::{unwrap_or_none_result, HyperlaneMessage, H256}; - -use crate::msg::metadata::BaseMetadataBuilder; - -use super::base::{MetadataToken, MultisigIsmMetadataBuilder, MultisigMetadata}; - -#[derive(Debug, Clone, Deref, new, AsRef)] -pub struct LegacyMultisigMetadataBuilder(BaseMetadataBuilder); - -#[async_trait] -impl MultisigIsmMetadataBuilder for LegacyMultisigMetadataBuilder { - fn token_layout(&self) -> Vec { - vec![ - MetadataToken::CheckpointMerkleRoot, - MetadataToken::CheckpointIndex, - MetadataToken::CheckpointMerkleTreeHook, - MetadataToken::MerkleProof, - MetadataToken::Threshold, - MetadataToken::Signatures, - MetadataToken::Validators, - ] - } - - async fn fetch_metadata( - &self, - validators: &[H256], - threshold: u8, - message: &HyperlaneMessage, - checkpoint_syncer: &MultisigCheckpointSyncer, - ) -> Result> { - const CTX: &str = "When fetching LegacyMultisig metadata"; - unwrap_or_none_result!(highest_leaf_index, self.highest_known_leaf_index().await); - unwrap_or_none_result!( - quorum_checkpoint, - checkpoint_syncer - .legacy_fetch_checkpoint_in_range( - validators, - threshold as usize, - message.nonce, - highest_leaf_index, - ) - .await - .context(CTX)? - ); - unwrap_or_none_result!( - proof, - self.get_proof(message.nonce, quorum_checkpoint.checkpoint) - .await - .context(CTX)? - ); - Ok(Some(MultisigMetadata::new( - quorum_checkpoint.checkpoint, - quorum_checkpoint.signatures, - None, - None, - Some(proof), - ))) - } -} diff --git a/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs b/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs index a2fb09585d..022470c7c3 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs @@ -82,10 +82,8 @@ impl MultisigIsmMetadataBuilder for MerkleRootMultisigMetadataBuilder { debug!(leaf_index, checkpoint=?quorum_checkpoint, "Couldn't get proof") ); Ok(Some(MultisigMetadata::new( - quorum_checkpoint.checkpoint.checkpoint, - quorum_checkpoint.signatures, - Some(leaf_index), - Some(quorum_checkpoint.checkpoint.message_id), + quorum_checkpoint, + leaf_index, Some(proof), ))) } diff --git a/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs b/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs index 18fb6bee0d..17374d5ea6 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs @@ -22,7 +22,7 @@ impl MultisigIsmMetadataBuilder for MessageIdMultisigMetadataBuilder { vec![ MetadataToken::CheckpointMerkleTreeHook, MetadataToken::CheckpointMerkleRoot, - MetadataToken::MessageMerkleLeafIndex, + MetadataToken::CheckpointIndex, MetadataToken::Signatures, ] } @@ -34,10 +34,12 @@ impl MultisigIsmMetadataBuilder for MessageIdMultisigMetadataBuilder { message: &HyperlaneMessage, checkpoint_syncer: &MultisigCheckpointSyncer, ) -> Result> { + let message_id = message.id(); + const CTX: &str = "When fetching MessageIdMultisig metadata"; unwrap_or_none_result!( leaf_index, - self.get_merkle_leaf_id_by_message_id(message.id()) + self.get_merkle_leaf_id_by_message_id(message_id) .await .context(CTX)?, debug!( @@ -54,27 +56,23 @@ impl MultisigIsmMetadataBuilder for MessageIdMultisigMetadataBuilder { trace!("No quorum checkpoint found") ); - if quorum_checkpoint.checkpoint.message_id != message.id() { + if quorum_checkpoint.checkpoint.message_id != message_id { warn!( "Quorum checkpoint message id {} does not match message id {}", - quorum_checkpoint.checkpoint.message_id, - message.id() + quorum_checkpoint.checkpoint.message_id, message_id ); + if quorum_checkpoint.checkpoint.index != leaf_index { + warn!( + "Quorum checkpoint index {} does not match leaf index {}", + quorum_checkpoint.checkpoint.index, leaf_index + ); + } return Ok(None); } - unwrap_or_none_result!( - merkle_leaf_id, - self.get_merkle_leaf_id_by_message_id(message.id()) - .await - .context(CTX)? - ); - Ok(Some(MultisigMetadata::new( - quorum_checkpoint.checkpoint.checkpoint, - quorum_checkpoint.signatures, - Some(merkle_leaf_id), - None, + quorum_checkpoint, + leaf_index, None, ))) } diff --git a/rust/agents/relayer/src/msg/metadata/multisig/mod.rs b/rust/agents/relayer/src/msg/metadata/multisig/mod.rs index 218cd2743a..5c53cc4144 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/mod.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/mod.rs @@ -1,10 +1,8 @@ mod base; -mod legacy_multisig; mod merkle_root_multisig; mod message_id_multisig; pub use base::{MetadataToken, MultisigIsmMetadataBuilder, MultisigMetadata}; -pub use legacy_multisig::LegacyMultisigMetadataBuilder; pub use merkle_root_multisig::MerkleRootMultisigMetadataBuilder; pub use message_id_multisig::MessageIdMultisigMetadataBuilder; diff --git a/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs b/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs index 9358a30506..be7d938e6a 100644 --- a/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs +++ b/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs @@ -182,6 +182,30 @@ const DOMAINS: &[RawDomain] = &[ is_test_net: true, is_deprecated: false, }, + RawDomain { + name: "polygonzkevm", + token: "ETH", + domain: 1101, + chain_id: 1101, + is_test_net: false, + is_deprecated: false, + }, + RawDomain { + name: "base", + token: "ETH", + domain: 8453, + chain_id: 8453, + is_test_net: false, + is_deprecated: false, + }, + RawDomain { + name: "scroll", + token: "ETH", + domain: 534352, + chain_id: 534352, + is_test_net: false, + is_deprecated: false, + }, RawDomain { name: "test1", token: "ETH", diff --git a/rust/agents/validator/src/submit.rs b/rust/agents/validator/src/submit.rs index 79b9cfa6d0..ee185d7c99 100644 --- a/rust/agents/validator/src/submit.rs +++ b/rust/agents/validator/src/submit.rs @@ -84,6 +84,23 @@ impl ValidatorSubmitter { /// Submits signed checkpoints indefinitely, starting from the `tree`. #[instrument(err, skip(self, tree), fields(domain=%self.merkle_tree_hook.domain()))] pub(crate) async fn checkpoint_submitter(self, mut tree: IncrementalMerkle) -> Result<()> { + // How often to log checkpoint info - once every minute + let checkpoint_info_log_period = Duration::from_secs(60); + // The instant in which we last logged checkpoint info, if at all + let mut latest_checkpoint_info_log: Option = None; + // Returns whether checkpoint info should be logged based off the + // checkpoint_info_log_period having elapsed since the last log. + // Sets latest_checkpoint_info_log to the current instant if true. + let mut should_log_checkpoint_info = || { + if let Some(instant) = latest_checkpoint_info_log { + if instant.elapsed() < checkpoint_info_log_period { + return false; + } + } + latest_checkpoint_info_log = Some(Instant::now()); + true + }; + loop { // Lag by reorg period because this is our correctness checkpoint. let latest_checkpoint = self @@ -94,6 +111,14 @@ impl ValidatorSubmitter { .latest_checkpoint_observed .set(latest_checkpoint.index as i64); + if should_log_checkpoint_info() { + info!( + ?latest_checkpoint, + tree_count = tree.count(), + "Latest checkpoint" + ); + } + // This may occur e.g. if RPC providers are unreliable and make calls against // inconsistent block tips. // @@ -192,14 +217,20 @@ impl ValidatorSubmitter { bail!("Incorrect tree root, something went wrong"); } - debug!(index = checkpoint.index, "Reached tree consistency"); + if !checkpoint_queue.is_empty() { + info!( + index = checkpoint.index, + queue_len = checkpoint_queue.len(), + "Reached tree consistency" + ); - self.sign_and_submit_checkpoints(checkpoint_queue).await?; + self.sign_and_submit_checkpoints(checkpoint_queue).await?; - info!( - index = checkpoint.index, - "Signed all queued checkpoints until index" - ); + info!( + index = checkpoint.index, + "Signed all queued checkpoints until index" + ); + } Ok(()) } @@ -240,94 +271,6 @@ impl ValidatorSubmitter { } Ok(()) } - - pub(crate) async fn legacy_checkpoint_submitter(self) -> Result<()> { - // current_index will be None if the validator cannot find - // a previously signed checkpoint - let mut current_index = self.checkpoint_syncer.latest_index().await?; - - if let Some(current_index) = current_index { - self.metrics - .legacy_latest_checkpoint_processed - .set(current_index as i64); - } - - // How often to log checkpoint info - once every minute - let checkpoint_info_log_period = Duration::from_secs(60); - // The instant in which we last logged checkpoint info, if at all - let mut latest_checkpoint_info_log: Option = None; - // Returns whether checkpoint info should be logged based off the - // checkpoint_info_log_period having elapsed since the last log. - // Sets latest_checkpoint_info_log to the current instant if true. - let mut should_log_checkpoint_info = || { - if let Some(instant) = latest_checkpoint_info_log { - if instant.elapsed() < checkpoint_info_log_period { - return false; - } - } - latest_checkpoint_info_log = Some(Instant::now()); - true - }; - - loop { - // Check the latest checkpoint - let latest_checkpoint = self - .merkle_tree_hook - .latest_checkpoint(self.reorg_period) - .await?; - - self.metrics - .legacy_latest_checkpoint_observed - .set(latest_checkpoint.index as i64); - - // Occasional info to make it clear to a validator operator whether things are - // working correctly without using the debug log level. - if should_log_checkpoint_info() { - info!( - latest_signed_checkpoint_index=?current_index, - latest_known_checkpoint_index=?latest_checkpoint.index, - "Latest checkpoint infos" - ); - } - - debug!( - latest_signed_checkpoint_index=?current_index, - latest_known_checkpoint_index=?latest_checkpoint.index, - "Polled latest checkpoint" - ); - - // If current_index is None, we were unable to find a previously - // signed checkpoint, and we should sign the latest checkpoint. - // This ensures that we still sign even if the latest checkpoint - // has index 0. - if current_index - .map(|i| i < latest_checkpoint.index) - .unwrap_or(true) - { - let signed_checkpoint = self.signer.sign(latest_checkpoint).await?; - // fetch the message id for the current index - if let Some(insertion) = self - .message_db - .retrieve_merkle_tree_insertion_by_leaf_index(&latest_checkpoint.index)? - { - let message_id = insertion.message_id(); - println!("adesanya queued_checkpoint with id: {:?}", message_id); - } - - info!(signed_checkpoint = ?signed_checkpoint, signer=?self.signer, "Signed new latest checkpoint"); - current_index = Some(latest_checkpoint.index); - - self.checkpoint_syncer - .legacy_write_checkpoint(&signed_checkpoint) - .await?; - self.metrics - .legacy_latest_checkpoint_processed - .set(signed_checkpoint.value.index as i64); - } - - sleep(self.interval).await; - } - } } /// Returns whether the tree exceeds the checkpoint. @@ -341,20 +284,12 @@ fn tree_exceeds_checkpoint(checkpoint: &Checkpoint, tree: &IncrementalMerkle) -> pub(crate) struct ValidatorSubmitterMetrics { latest_checkpoint_observed: IntGauge, latest_checkpoint_processed: IntGauge, - legacy_latest_checkpoint_observed: IntGauge, - legacy_latest_checkpoint_processed: IntGauge, } impl ValidatorSubmitterMetrics { pub fn new(metrics: &CoreMetrics, mailbox_chain: &HyperlaneDomain) -> Self { let chain_name = mailbox_chain.name(); Self { - legacy_latest_checkpoint_observed: metrics - .latest_checkpoint() - .with_label_values(&["legacy_validator_observed", chain_name]), - legacy_latest_checkpoint_processed: metrics - .latest_checkpoint() - .with_label_values(&["legacy_validator_processed", chain_name]), latest_checkpoint_observed: metrics .latest_checkpoint() .with_label_values(&["validator_observed", chain_name]), diff --git a/rust/agents/validator/src/validator.rs b/rust/agents/validator/src/validator.rs index f7aa19aea2..d516e051c0 100644 --- a/rust/agents/validator/src/validator.rs +++ b/rust/agents/validator/src/validator.rs @@ -179,7 +179,6 @@ impl Validator { assert!(tip_tree.count() > 0, "merkle tree is empty"); let backfill_target = submitter.checkpoint(&tip_tree); - let legacy_submitter = submitter.clone(); let backfill_submitter = submitter.clone(); let mut tasks = vec![]; @@ -196,10 +195,6 @@ impl Validator { tokio::spawn(async move { submitter.checkpoint_submitter(tip_tree).await }) .instrument(info_span!("TipCheckpointSubmitter")), ); - tasks.push( - tokio::spawn(async move { legacy_submitter.legacy_checkpoint_submitter().await }) - .instrument(info_span!("LegacyCheckpointSubmitter")), - ); tasks } diff --git a/rust/chains/hyperlane-ethereum/src/signers.rs b/rust/chains/hyperlane-ethereum/src/signers.rs index 643e578f4d..7165cd1bc1 100644 --- a/rust/chains/hyperlane-ethereum/src/signers.rs +++ b/rust/chains/hyperlane-ethereum/src/signers.rs @@ -116,7 +116,9 @@ impl From for SignersError { #[cfg(test)] mod test { - use hyperlane_core::{Checkpoint, HyperlaneSigner, HyperlaneSignerExt, H256}; + use hyperlane_core::{ + Checkpoint, CheckpointWithMessageId, HyperlaneSigner, HyperlaneSignerExt, H256, + }; use crate::signers::Signers; @@ -128,11 +130,14 @@ mod test { .parse::() .unwrap() .into(); - let message = Checkpoint { - merkle_tree_hook_address: H256::repeat_byte(2), - mailbox_domain: 5, - root: H256::repeat_byte(1), - index: 123, + let message = CheckpointWithMessageId { + checkpoint: Checkpoint { + merkle_tree_hook_address: H256::repeat_byte(2), + mailbox_domain: 5, + root: H256::repeat_byte(1), + index: 123, + }, + message_id: H256::repeat_byte(3), }; let signed = signer.sign(message).await.expect("!sign"); diff --git a/rust/chains/hyperlane-ethereum/tests/signer_output.rs b/rust/chains/hyperlane-ethereum/tests/signer_output.rs index 37cb07aedd..c8af292cb7 100644 --- a/rust/chains/hyperlane-ethereum/tests/signer_output.rs +++ b/rust/chains/hyperlane-ethereum/tests/signer_output.rs @@ -17,7 +17,6 @@ use hyperlane_core::{ utils::domain_hash, Checkpoint, HyperlaneMessage, HyperlaneSignerExt, H160, H256, }; -use hyperlane_ethereum::Signers; /// Output proof to /vector/message.json #[test] @@ -121,58 +120,3 @@ pub fn output_domain_hashes() { file.write_all(json.as_bytes()) .expect("Failed to write to file"); } - -/// Outputs signed checkpoint test cases in /vector/signedCheckpoint.json -#[test] -pub fn output_signed_checkpoints() { - let merkle_tree_hook_address = - H256::from(H160::from_str("0x2222222222222222222222222222222222222222").unwrap()); - let t = async { - let signer: Signers = "1111111111111111111111111111111111111111111111111111111111111111" - .parse::() - .unwrap() - .into(); - - let mut test_cases: Vec = Vec::new(); - - // test suite - for i in 1..=3 { - let signed_checkpoint = signer - .sign(Checkpoint { - merkle_tree_hook_address, - mailbox_domain: 1000, - root: H256::repeat_byte(i + 1), - index: i as u32, - }) - .await - .expect("!sign_with"); - - test_cases.push(json!({ - "merkle_tree_hook": signed_checkpoint.value.merkle_tree_hook_address, - "domain": signed_checkpoint.value.mailbox_domain, - "root": signed_checkpoint.value.root, - "index": signed_checkpoint.value.index, - "signature": signed_checkpoint.signature, - "signer": signer.address(), - })) - } - - let json = json!(test_cases).to_string(); - - let mut file = OpenOptions::new() - .write(true) - .create(true) - .truncate(true) - .open(test_utils::find_vector("signedCheckpoint.json")) - .expect("Failed to open/create file"); - - file.write_all(json.as_bytes()) - .expect("Failed to write to file"); - }; - - tokio::runtime::Builder::new_current_thread() - .enable_all() - .build() - .unwrap() - .block_on(t) -} diff --git a/rust/config/mainnet3_config.json b/rust/config/mainnet3_config.json new file mode 100644 index 0000000000..fc06c4c8d5 --- /dev/null +++ b/rust/config/mainnet3_config.json @@ -0,0 +1,633 @@ +{ + "chains": { + "arbitrum": { + "chainId": 42161, + "domainId": 42161, + "name": "arbitrum", + "protocol": "ethereum", + "displayName": "Arbitrum", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://arb1.arbitrum.io/rpc" + } + ], + "blockExplorers": [ + { + "name": "Arbiscan", + "url": "https://arbiscan.io", + "apiUrl": "https://api.arbiscan.io/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 0, + "estimateBlockTime": 3 + }, + "gasCurrencyCoinGeckoId": "ethereum", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-arbitrum.safe.global/", + "storageGasOracle": "0xD3805207b65d99C075ceA938Fa7c0587026a5DF5", + "proxyAdmin": "0x80Cebd56A65e46c474a1A101e89E76C4c51D179c", + "merkleRootMultisigIsmFactory": "0x3C330D4A2e2b8443AFaB8E326E64ab4251B7Eae0", + "messageIdMultisigIsmFactory": "0x12Df53079d399a47e9E730df095b712B0FDFA791", + "aggregationIsmFactory": "0xD4883084389fC1Eeb4dAfB2ADcFc36B711c310EB", + "aggregationHookFactory": "0x9B5f440bBb64Fee337F37e03362b628711Ea09C7", + "routingIsmFactory": "0xC020F8A7b00178dFA0fcC75C159e14b79F8e5c63", + "merkleTreeHook": "0x748040afB89B8FdBb992799808215419d36A0930", + "interchainGasPaymaster": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "aggregationHook": "0xe0cb37cFc47296f1c4eD77EFf92Aed478644d10c", + "protocolFee": "0xD0199067DACb8526e7dc524a9a7DCBb57Cd25421", + "mailbox": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9", + "validatorAnnounce": "0x1df063280C4166AF9a725e3828b4dAC6c7113B08", + "index": { + "from": 145551152 + } + }, + "avalanche": { + "chainId": 43114, + "domainId": 43114, + "name": "avalanche", + "protocol": "ethereum", + "displayName": "Avalanche", + "nativeToken": { + "decimals": 18, + "name": "Avalanche", + "symbol": "AVAX" + }, + "rpcUrls": [ + { + "http": "https://api.avax.network/ext/bc/C/rpc", + "pagination": { + "maxBlockRange": 100000, + "minBlockNumber": 6765067 + } + } + ], + "blockExplorers": [ + { + "name": "SnowTrace", + "url": "https://snowtrace.io", + "apiUrl": "https://api.snowtrace.io/api", + "family": "other" + } + ], + "blocks": { + "confirmations": 3, + "reorgPeriod": 3, + "estimateBlockTime": 2 + }, + "gasCurrencyCoinGeckoId": "avalanche-2", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-avalanche.safe.global/", + "storageGasOracle": "0x175821F30AdCAA4bbB72Ce98eF76C2E0De2C3f21", + "proxyAdmin": "0xd7CF8c05fd81b8cA7CfF8E6C49B08a9D63265c9B", + "merkleRootMultisigIsmFactory": "0x896cF1D1B66cD211633eDd589fF158E8Cfaf9B54", + "messageIdMultisigIsmFactory": "0x8819D653DF5b1FC0DdB32189a2704E471AF8483c", + "aggregationIsmFactory": "0xa5E13796eB7d2EDCc88012c8cfF90D69B51FcF9f", + "aggregationHookFactory": "0x3bF6Ac986C7Af9A9Ac356C0e99C0041EFd8D96e7", + "routingIsmFactory": "0xA9Ddc70f50009aF8bDB312aA757B4304b0F7BbB3", + "merkleTreeHook": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "interchainGasPaymaster": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "aggregationHook": "0x0165a22BA489F7DA37DAf6397781777D9FCB5708", + "protocolFee": "0xEc4AdA26E51f2685279F37C8aE62BeAd8212D597", + "mailbox": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6", + "validatorAnnounce": "0x9Cad0eC82328CEE2386Ec14a12E81d070a27712f", + "index": { + "from": 37133307 + } + }, + "base": { + "chainId": 8453, + "domainId": 8453, + "name": "base", + "protocol": "ethereum", + "displayName": "Base", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://base.publicnode.com/" + }, + { + "http": "https://mainnet.base.org" + }, + { + "http": "https://base.blockpi.network/v1/rpc/public" + } + ], + "blockExplorers": [ + { + "name": "BaseScan", + "url": "https://basescan.org", + "apiUrl": "https://api.basescan.org/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 1, + "estimateBlockTime": 2 + }, + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-base.safe.global/", + "merkleRootMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "messageIdMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "aggregationIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "aggregationHookFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "routingIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "proxyAdmin": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "merkleTreeHook": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "storageGasOracle": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "interchainGasPaymaster": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "aggregationHook": "0x13f3d4B0Ee0a713430fded9E18f7fb6c91A6E41F", + "protocolFee": "0x99ca8c74cE7Cfa9d72A51fbb05F9821f5f826b3a", + "validatorAnnounce": "0x182E8d7c5F1B06201b102123FC7dF0EaeB445a7B", + "index": { + "from": 5959667 + } + }, + "bsc": { + "chainId": 56, + "domainId": 56, + "name": "bsc", + "protocol": "ethereum", + "displayName": "Binance Smart Chain", + "displayNameShort": "Binance", + "nativeToken": { + "decimals": 18, + "name": "BNB", + "symbol": "BNB" + }, + "rpcUrls": [ + { + "http": "https://bsc-dataseed.binance.org" + }, + { + "http": "https://rpc.ankr.com/bsc" + } + ], + "blockExplorers": [ + { + "name": "BscScan", + "url": "https://bscscan.com", + "apiUrl": "https://api.bscscan.com/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 15, + "estimateBlockTime": 3 + }, + "gasCurrencyCoinGeckoId": "binancecoin", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-bsc.safe.global/", + "transactionOverrides": { + "gasPrice": 7000000000 + }, + "storageGasOracle": "0x91d23D603d60445411C06e6443d81395593B7940", + "proxyAdmin": "0x65993Af9D0D3a64ec77590db7ba362D6eB78eF70", + "merkleRootMultisigIsmFactory": "0xfADBc81Ca8A957F1Bf7c78bCc575b28DBDE042b6", + "messageIdMultisigIsmFactory": "0x4B1d8352E35e3BDE36dF5ED2e73C24E35c4a96b7", + "aggregationIsmFactory": "0x38B3878c4fb44d201DA924c4a04bae3EE728c065", + "aggregationHookFactory": "0xe70E86a7D1e001D419D71F960Cb6CaD59b6A3dB6", + "routingIsmFactory": "0xc40481D13419BC8090e6AD07074Ef39E538c09CE", + "mailbox": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4", + "merkleTreeHook": "0xFDb9Cd5f9daAA2E4474019405A328a88E7484f26", + "interchainGasPaymaster": "0x78E25e7f84416e69b9339B0A6336EB6EFfF6b451", + "aggregationHook": "0x402Fc106576462a892355d69ACF03D46A888ae88", + "protocolFee": "0xA8Aa5f14a5463a78E45CC068F11c867949F3E367", + "validatorAnnounce": "0x7024078130D9c2100fEA474DAD009C2d1703aCcd", + "index": { + "from": 33068482 + } + }, + "celo": { + "chainId": 42220, + "domainId": 42220, + "name": "celo", + "protocol": "ethereum", + "displayName": "Celo", + "nativeToken": { + "decimals": 18, + "name": "CELO", + "symbol": "CELO" + }, + "rpcUrls": [ + { + "http": "https://forno.celo.org" + } + ], + "blockExplorers": [ + { + "name": "CeloScan", + "url": "https://celoscan.io", + "apiUrl": "https://api.celoscan.io/api", + "family": "etherscan" + }, + { + "name": "Blockscout", + "url": "https://explorer.celo.org", + "apiUrl": "https://explorer.celo.org/mainnet/api", + "family": "blockscout" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 0, + "estimateBlockTime": 5 + }, + "gnosisSafeTransactionServiceUrl": "https://mainnet-tx-svc.celo-safe-prod.celo-networks-dev.org/", + "storageGasOracle": "0xD9A9966E7dA9a7f0032bF449FB12696a638E673C", + "proxyAdmin": "0x90f9a2E9eCe93516d65FdaB726a3c62F5960a1b9", + "merkleRootMultisigIsmFactory": "0x4C96a1abc44dc846775CE702C9E9BE821D3b487c", + "messageIdMultisigIsmFactory": "0xaB402f227e892Ef37C105bf06619c0fa106a1fB2", + "aggregationIsmFactory": "0x1722dd970a1F56040712129f5Eeb76B003fd7500", + "aggregationHookFactory": "0xc3745652EFB8555A8b064A0EA78d295133d326D2", + "routingIsmFactory": "0xec748b5623f0B50E4c5eB1CFa7Bd46C3213608b6", + "merkleTreeHook": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "interchainGasPaymaster": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "aggregationHook": "0xc65890329066FB20c339Bc5C22f1756e9D3a4fF5", + "protocolFee": "0x89886d431f9c3eEE64DCD6dAbA3f7D689D98D899", + "mailbox": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb", + "validatorAnnounce": "0xCeF677b65FDaA6804d4403083bb12B8dB3991FE1", + "index": { + "from": 22208016 + } + }, + "ethereum": { + "chainId": 1, + "domainId": 1, + "name": "ethereum", + "protocol": "ethereum", + "displayName": "Ethereum", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161" + }, + { + "http": "https://cloudflare-eth.com" + } + ], + "blockExplorers": [ + { + "name": "Etherscan", + "url": "https://etherscan.io", + "apiUrl": "https://api.etherscan.io/api", + "family": "etherscan" + }, + { + "name": "Blockscout", + "url": "https://blockscout.com/eth/mainnet", + "apiUrl": "https://blockscout.com/eth/mainnet/api", + "family": "blockscout" + } + ], + "blocks": { + "confirmations": 3, + "reorgPeriod": 14, + "estimateBlockTime": 13 + }, + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-mainnet.safe.global/", + "transactionOverrides": { + "maxFeePerGas": 150000000000, + "maxPriorityFeePerGas": 5000000000 + }, + "storageGasOracle": "0xc9a103990A8dB11b4f627bc5CD1D0c2685484Ec5", + "proxyAdmin": "0x75EE15Ee1B4A75Fa3e2fDF5DF3253c25599cc659", + "merkleRootMultisigIsmFactory": "0x47e8aF9e30C32Ab91060ED587894288786761B45", + "messageIdMultisigIsmFactory": "0xfA21D9628ADce86531854C2B7ef00F07394B0B69", + "aggregationIsmFactory": "0x46FA191Ad972D9674Ed752B69f9659A0d7b22846", + "aggregationHookFactory": "0x6D2555A8ba483CcF4409C39013F5e9a3285D3C9E", + "routingIsmFactory": "0xCb74c6aE411236CEE6803619916694BE86cF5987", + "merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "aggregationHook": "0xb87AC8EA4533AE017604E44470F7c1E550AC6F10", + "protocolFee": "0x8B05BF30F6247a90006c5837eA63C7905D79e6d8", + "mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239", + "validatorAnnounce": "0xCe74905e51497b4adD3639366708b821dcBcff96", + "index": { + "from": 18466263 + } + }, + "gnosis": { + "chainId": 100, + "domainId": 100, + "name": "gnosis", + "protocol": "ethereum", + "displayName": "Gnosis", + "nativeToken": { + "name": "xDai", + "symbol": "xDai", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://rpc.gnosischain.com", + "pagination": { + "maxBlockRange": 10000, + "minBlockNumber": 25997478 + } + } + ], + "blockExplorers": [ + { + "name": "GnosisScan", + "url": "https://gnosisscan.io", + "apiUrl": "https://api.gnosisscan.io/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 14, + "estimateBlockTime": 5 + }, + "gasCurrencyCoinGeckoId": "xdai", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-gnosis-chain.safe.global/", + "storageGasOracle": "0x5E01d8F34b629E3f92d69546bbc4142A7Adee7e9", + "proxyAdmin": "0x81a92A1a272cb09d7b4970b07548463dC7aE0cB7", + "merkleRootMultisigIsmFactory": "0x8E273260EAd8B72A085B19346A676d355740e875", + "messageIdMultisigIsmFactory": "0x603f46cc520d2fc22957b81e206408590808F02F", + "aggregationIsmFactory": "0x11EF91d17c5ad3330DbCa709a8841743d3Af6819", + "aggregationHookFactory": "0xbC8AA096dabDf4A0200BB9f8D4Cbb644C3D86d7B", + "mailbox": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", + "routingIsmFactory": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", + "merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645", + "interchainGasPaymaster": "0xDd260B99d302f0A3fF885728c086f729c06f227f", + "aggregationHook": "0xdD1FA1C12496474c1dDC67a658Ba81437F818861", + "protocolFee": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", + "validatorAnnounce": "0x87ED6926abc9E38b9C7C19f835B41943b622663c", + "index": { + "from": 30715963 + } + }, + "moonbeam": { + "chainId": 1284, + "domainId": 1284, + "name": "moonbeam", + "protocol": "ethereum", + "displayName": "Moonbeam", + "nativeToken": { + "decimals": 18, + "name": "GLMR", + "symbol": "GLMR" + }, + "rpcUrls": [ + { + "http": "https://rpc.api.moonbeam.network" + } + ], + "blockExplorers": [ + { + "name": "MoonScan", + "url": "https://moonscan.io", + "apiUrl": "https://api-moonbeam.moonscan.io/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 2, + "reorgPeriod": 2, + "estimateBlockTime": 12 + }, + "gnosisSafeTransactionServiceUrl": "https://transaction.multisig.moonbeam.network", + "storageGasOracle": "0x448b7ADB0dA36d41AA2AfDc9d63b97541A7b3819", + "proxyAdmin": "0x6A9cdA3dd1F593983BFd142Eb35e6ce4137bd5ce", + "merkleRootMultisigIsmFactory": "0xE2f485bc031Feb5a4C41C1967bf028653d75f0C3", + "messageIdMultisigIsmFactory": "0x84Df48F8f241f11d0fA302d09d73030429Bd9C73", + "aggregationIsmFactory": "0x40c6Abcb6A2CdC8882d4bEcaC47927005c7Bb8c2", + "aggregationHookFactory": "0x59cC3E7A49DdC4893eB8754c7908f96072A7DbE8", + "routingIsmFactory": "0x98Aa6239FfCcEc73A662a5e5e26Bc3fD7c7291B7", + "mailbox": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", + "merkleTreeHook": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "interchainGasPaymaster": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "aggregationHook": "0x23cca255aE83F57F39EAf9D14fB9FdaDF22D5863", + "protocolFee": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", + "validatorAnnounce": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F", + "index": { + "from": 4763137 + } + }, + "optimism": { + "chainId": 10, + "domainId": 10, + "name": "optimism", + "protocol": "ethereum", + "displayName": "Optimism", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://mainnet.optimism.io" + } + ], + "blockExplorers": [ + { + "name": "Etherscan", + "url": "https://optimistic.etherscan.io", + "apiUrl": "https://api-optimistic.etherscan.io/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 0, + "estimateBlockTime": 3 + }, + "gasCurrencyCoinGeckoId": "ethereum", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-optimism.safe.global/", + "storageGasOracle": "0x27e88AeB8EA4B159d81df06355Ea3d20bEB1de38", + "proxyAdmin": "0xE047cb95FB3b7117989e911c6afb34771183fC35", + "merkleRootMultisigIsmFactory": "0xCA6Cb9Bc3cfF9E11003A06617cF934B684Bc78BC", + "messageIdMultisigIsmFactory": "0xAa4Be20E9957fE21602c74d7C3cF5CB1112EA9Ef", + "aggregationIsmFactory": "0x7491843F3A5Ba24E0f17a22645bDa04A1Ae2c584", + "aggregationHookFactory": "0x15DEeAB8dECDe553bb0B1F9C00984cbcae1af3D7", + "routingIsmFactory": "0x89E3530137aD51743536443a3EC838b502E72eb7", + "merkleTreeHook": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "interchainGasPaymaster": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "aggregationHook": "0x4ccC6d8eB79f2a1EC9bcb0f211fef7907631F91f", + "protocolFee": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", + "mailbox": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", + "validatorAnnounce": "0x30f5b08e01808643221528BB2f7953bf2830Ef38", + "index": { + "from": 111554952 + } + }, + "polygon": { + "chainId": 137, + "domainId": 137, + "name": "polygon", + "protocol": "ethereum", + "displayName": "Polygon", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://rpc-mainnet.matic.quiknode.pro", + "pagination": { + "maxBlockRange": 10000, + "minBlockNumber": 19657100 + } + }, + { + "http": "https://polygon-rpc.com" + } + ], + "blockExplorers": [ + { + "name": "PolygonScan", + "url": "https://polygonscan.com", + "apiUrl": "https://api.polygonscan.com/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 3, + "reorgPeriod": 256, + "estimateBlockTime": 2 + }, + "gasCurrencyCoinGeckoId": "matic-network", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-polygon.safe.global/", + "transactionOverrides": { + "maxFeePerGas": 500000000000, + "maxPriorityFeePerGas": 100000000000 + }, + "storageGasOracle": "0xA3a24EC5670F1F416AB9fD554FcE2f226AE9D7eB", + "proxyAdmin": "0xC4F7590C5d30BE959225dC75640657954A86b980", + "merkleRootMultisigIsmFactory": "0xa9E0E18E78b098c2DE36c42E4DDEA13ce214c592", + "messageIdMultisigIsmFactory": "0xEa5Be2AD66BB1BA321B7aCf0A079fBE304B09Ca0", + "aggregationIsmFactory": "0x81AdDD9Ca89105063DaDEBd5B4408551Ce850E22", + "aggregationHookFactory": "0xFeeB86e70e4a640cDd29636CCE19BD6fe8628135", + "routingIsmFactory": "0xF0752A65ffB2153EaE53F6a70c858a87022d5c56", + "mailbox": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", + "merkleTreeHook": "0x73FbD25c3e817DC4B4Cd9d00eff6D83dcde2DfF6", + "interchainGasPaymaster": "0x0071740Bf129b05C4684abfbBeD248D80971cce2", + "aggregationHook": "0x34dAb05650Cf590088bA18aF9d597f3e081bCc47", + "protocolFee": "0xF8F3629e308b4758F8396606405989F8D8C9c578", + "validatorAnnounce": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5", + "index": { + "from": 49352047 + } + }, + "polygonzkevm": { + "protocol": "ethereum", + "chainId": 1101, + "domainId": 1101, + "name": "polygonzkevm", + "displayName": "Polygon zkEVM", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://polygonzkevm-mainnet.g.alchemy.com/v2/demo" + }, + { + "http": "https://rpc.ankr.com/polygon_zkevm" + }, + { + "http": "https://zkevm.polygonscan.com/" + } + ], + "blockExplorers": [ + { + "name": "PolygonScan", + "url": "https://zkevm.polygonscan.com/", + "apiUrl": "https://api-zkevm.polygonscan.com/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 1, + "estimateBlockTime": 10 + }, + "merkleRootMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "messageIdMultisigIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "aggregationIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "aggregationHookFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "routingIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "storageGasOracle": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "aggregationHook": "0x8464aF853363B8d6844070F68b0AB34Cb6523d0F", + "protocolFee": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "validatorAnnounce": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", + "index": { + "from": 6789061 + } + }, + "scroll": { + "chainId": 534352, + "domainId": 534352, + "name": "scroll", + "protocol": "ethereum", + "displayName": "Scroll", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://scroll.blockpi.network/v1/rpc/public" + }, + { + "http": "https://scroll-mainnet.public.blastapi.io" + } + ], + "blockExplorers": [ + { + "name": "Scroll Explorer", + "url": "https://scrollscan.com/", + "apiUrl": "https://api.scrollscan.com/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 1, + "estimateBlockTime": 3 + }, + "merkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "messageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "aggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "aggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "routingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "merkleTreeHook": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "storageGasOracle": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "interchainGasPaymaster": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "aggregationHook": "0x9Bc0FAf446E128a618A88a2F28960Fb2Ca169faE", + "protocolFee": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "validatorAnnounce": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "index": { + "from": 426670 + } + } + }, + "defaultRpcConsensusType": "fallback" +} diff --git a/rust/config/mainnet_config.json b/rust/config/mainnet_config.json deleted file mode 100644 index df31c64f33..0000000000 --- a/rust/config/mainnet_config.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "chains": { - "celo": { - "name": "celo", - "domain": 42220, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 0, - "index": { - "from": 16884144 - } - }, - "ethereum": { - "name": "ethereum", - "domain": 1, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 20, - "index": { - "from": 16271503 - } - }, - "avalanche": { - "name": "avalanche", - "domain": 43114, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 3, - "index": { - "from": 24145479 - } - }, - "polygon": { - "name": "polygon", - "domain": 137, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 256, - "index": { - "from": 37313389 - } - }, - "bsc": { - "name": "bsc", - "domain": 56, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 15, - "index": { - "from": 24248037 - } - }, - "arbitrum": { - "name": "arbitrum", - "domain": 42161, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 0, - "index": { - "from": 49073182 - } - }, - "optimism": { - "name": "optimism", - "domain": 10, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 0, - "index": { - "from": 55698988 - } - }, - "moonbeam": { - "name": "moonbeam", - "domain": 1284, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 2, - "connection": { - "type": "http" - }, - "index": { - "from": 2595747 - } - }, - "gnosis": { - "name": "gnosis", - "domain": 100, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 14, - "index": { - "from": 25900000 - } - }, - "nautilus": { - "name": "nautilus", - "domain": 22222, - "addresses": { - "mailbox": "0xF59557dfacDc5a1cb8A36Af43aA4819a6A891e88", - "interchainGasPaymaster": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", - "validatorAnnounce": "0x23ce76645EC601148fa451e751eeB75785b97A00" - }, - "protocol": "ethereum", - "finalityBlocks": 1, - "index": { - "from": 216377 - } - }, - "solana": { - "name": "solana", - "domain": 1399811149, - "addresses": { - "mailbox": "Ge9atjAc3Ltu91VTbNpJDCjZ9CFxFyck4h3YBcTF9XPq", - "interchainGasPaymaster": "FCNfmLSZLo5x7oNYmkYU8WdPUu7pj636P9CaMxkmaCp7", - "validatorAnnounce": "C88Lk5GR6cPxYoJxPbNDDEwsx5Kxn1wZEomvQ2So333g" - }, - "protocol": "sealevel", - "finalityBlocks": 0, - "connection": { - "type": "http", - "url": "https://api.mainnet-beta.solana.com" - }, - "index": { - "from": 1, - "mode": "sequence" - } - } - } -} diff --git a/rust/config/testnet4_config.json b/rust/config/testnet4_config.json index 0b8f2db24c..d0fbd12598 100644 --- a/rust/config/testnet4_config.json +++ b/rust/config/testnet4_config.json @@ -50,8 +50,55 @@ "aggregationHook": "0xdBabD76358897E68E4964647C1fb8Bf524f5EFdB", "protocolFee": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", "defaultIsm": "0xFBb1D475d2275D4643B6ba9Dae16f2F5465F9436", + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0x79c7799a9E686Ed93EEa208B67a2D7E93852F182", + "LEGACY_MULTISIG": "0x2c940Cfe1Fa2bdf2F2746ba52acDf2f0106c3cf1" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0x3c9eD95aD9a3613a7c036F44fB6745052861f74C", + "LEGACY_MULTISIG": "0x8d3cf154259E3aF61BA8F62410d9D0E644c6A19f" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x3e844a5dA9247756F0182D652680065502BCB078", + "LEGACY_MULTISIG": "0x5aABB6B06112FC5Bb9f7e1BC8Ec17c06B01fb6Ed" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x6b6bEF043905810994a60Cd08F7CdF5BB798f19c", + "LEGACY_MULTISIG": "0xf75B0F727f1dea2FA491caD2Faf8f3B04B705294" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0x2aEEc24F5997D7C19833Bf9f520b1e6c0Ef1Eda5", + "LEGACY_MULTISIG": "0x62f6EfC5a7A978821a5111261902b0A218ABF99F" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0x0caB24DBBDcA1E1bc27dd33481c09d9b306AE4a1", + "LEGACY_MULTISIG": "0xf8afa14F1cd8600d802C5a82A4406ca83629FC23" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0x2183183bdc371c67302097DC60952e6E99484720", + "LEGACY_MULTISIG": "0x631749C86E90Cea9cF3Fb7686eBb6E80EfC9064c" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x4A0eFE3CCE8DEDAD4faC8A8521F920F5C2f553fC", + "LEGACY_MULTISIG": "0x19eeB6f283aBAb2A9A70a11C2a8972D416aA2af9" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0x5E81d0bc59A632f319C75E339874209a29A0D9D2", + "LEGACY_MULTISIG": "0x533fb8cAb191B7094C545A191Ac770deBb1B8EEc" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0xf32f54Ec925AFf962ad164f94E7437E288901015", + "LEGACY_MULTISIG": "0x6BbF423f3742cB6594f9B9D844e780381aa4Ad91" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xe48BDf85C269603AcB79444D874bb80DFDd93FC5", + "LEGACY_MULTISIG": "0x17B141F3278624B9882e275B8D1aC6a310afCCbe" + }, + "ROUTING": "0x2b5D84351aA22d860CE206EB79089F9bE8050890", + "AGGREGATION": "0x6f36a2dCC2eE58eB6b4B43330788Baa350F952EC", + "fallbackRoutingHook": "0xE1386148385275A27D29fC39Bd58a969CD5dCAF0", "index": { - "from": 20232734 + "from": 20566929 } }, "arbitrumgoerli": { @@ -99,8 +146,9 @@ "interchainGasPaymaster": "0x76189acFA212298d7022624a4633411eE0d2f26F", "aggregationHook": "0xf852EB6b98d84A4296754043a56759a0Ae0E06df", "protocolFee": "0x0358ba0D90ED2d90fB8cBb610F27C274D8077a0B", + "fallbackRoutingHook": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f", "index": { - "from": 45685526 + "from": 50669378 } }, "basegoerli": { @@ -150,8 +198,63 @@ "interchainGasPaymaster": "0x28B02B97a850872C4D33C3E024fab6499ad96564", "aggregationHook": "0x168e606fE4A9c8d7F83a3aAA132E831f153e4bAa", "protocolFee": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "fallbackRoutingHook": "0x4Ece7b15ba5dCA2708dCE2812016683193102b9F", + "alfajores": { + "messageIdMultisigIsm": "0xCc44a0dB101E08CB0C13f928aa8d4686042dA576", + "merkleRootMultisigIsm": "0xf113Ea1a825505840451A09113A9bb53908ED8f1", + "staticAggregationIsm": "0x3F5Bd4c5B3c0D91F11Aa7b57099fc3d71e5d26A4" + }, + "fuji": { + "messageIdMultisigIsm": "0x27F351ae5f5C0A58ea18aEAD9c1Dc07a53401721", + "merkleRootMultisigIsm": "0xefde4A00A72ef1eb08FFAd3475bCbCd6D336cA4f", + "staticAggregationIsm": "0x7A86e695a0A051Bcf1CB83128613E7561090c677" + }, + "mumbai": { + "messageIdMultisigIsm": "0x8Ce0Eda893a1727D171A55515D11420f1841549c", + "merkleRootMultisigIsm": "0x8FEc8D3efEe43Fd096F53b851c60E465A04384C7", + "staticAggregationIsm": "0xE9094c6172b905972D77FF4F5E3f28a73A6c5Dc1" + }, + "bsctestnet": { + "messageIdMultisigIsm": "0x4E7EAcA5D2d3B01005cFb0528d3c52cfF09BCA36", + "merkleRootMultisigIsm": "0x3eE9CA0355ae566A8776B41b8D5f96A996d6144e", + "staticAggregationIsm": "0xe111Ac8b252c41D787b4b68F7987B8aAAC3bc1Ce" + }, + "goerli": { + "opStackIsm": "0x14EE2f01907707Ce8d13C4F5DBC40778b5b664e0" + }, + "scrollsepolia": { + "messageIdMultisigIsm": "0xD5161cD144Ca3C88F87A1db8228D33708c5938Cc", + "merkleRootMultisigIsm": "0xEc5b9b4dc7088B450aa74994EBf65d569d027716", + "staticAggregationIsm": "0x343513A06727FE3268Ef78c3E53591fC67599Ec1" + }, + "sepolia": { + "messageIdMultisigIsm": "0x4d7C3c7592A874b8e1d6396646fC45005874beC9", + "merkleRootMultisigIsm": "0x173C1626542165A5F1B5cE20c0026e5E23ef19Ad", + "staticAggregationIsm": "0x0CAC5c5e7Ce997C39B51877E15ce18C5a9a4d00D" + }, + "moonbasealpha": { + "messageIdMultisigIsm": "0xC2A3802E2f6150a4d633b5328c6C01797177D2C0", + "merkleRootMultisigIsm": "0x31C77b1C9AD838ed75AAb535fe4fDca1b5dEfFfD", + "staticAggregationIsm": "0xEAfC371E012CC89D5a335AfF326F38b474Bc5E27" + }, + "optimismgoerli": { + "messageIdMultisigIsm": "0x75e1ad301B0E96f82d5a87D0Eb95cF1A250bf071", + "merkleRootMultisigIsm": "0xB98cE9298891Be9371F9b7fE021beaDBaD1189DD", + "staticAggregationIsm": "0x1629F7cf0561b7863C2E31F126Ab726Fe2bc307b" + }, + "arbitrumgoerli": { + "messageIdMultisigIsm": "0x19b34FDb98F4A6F41e803225bf4E258b7eC55876", + "merkleRootMultisigIsm": "0x93db3fA75bA99a040e6D5d3474350A0564E6E722", + "staticAggregationIsm": "0x830e7814c7C02a174208786CA65917405B845f20" + }, + "polygonzkevmtestnet": { + "messageIdMultisigIsm": "0x2c1bF9f9FE80D41Db769050Fb096be9aB41327Bc", + "merkleRootMultisigIsm": "0x8B2069eaa894995141F1879dDB612E05874F0116", + "staticAggregationIsm": "0x74bf2D0B09D371D54BD087df006786384E5525F8" + }, + "domainRoutingIsm": "0x4c8b1B480988f24b0F3602A4de641776586DbF90", "index": { - "from": 10676791 + "from": 11714799 } }, "bsctestnet": { @@ -167,7 +270,13 @@ }, "rpcUrls": [ { - "http": "https://data-seed-prebsc-1-s3.binance.org:8545" + "http": "https://bsc-testnet.publicnode.com" + }, + { + "http": "https://bsc-testnet.public.blastapi.io" + }, + { + "http": "https://bsc-testnet.blockpi.network/v1/rpc/public" } ], "blockExplorers": [ @@ -198,8 +307,55 @@ "mailbox": "0xF9F6F5646F478d5ab4e20B0F910C92F1CCC9Cc6D", "merkleTreeHook": "0xc6cbF39A747f5E28d1bDc8D9dfDAb2960Abd5A8f", "validatorAnnounce": "0xf09701B0a93210113D175461b6135a96773B5465", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0x352b56D019C85B1e7Db163c08876f0E4060e0EC0", + "LEGACY_MULTISIG": "0xc9764347811A0DDB36180273ADB6226E25e8134f" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0x32e4C6C49e9a568Da17f87ee80A9542B5c3cE0bf", + "LEGACY_MULTISIG": "0x55eC2978E6c63DbF4AD2670d36539737d0341c76" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0x4E368F65Ef1F765acf149052A5ad656AB4ecFeaf", + "LEGACY_MULTISIG": "0xB751c8366708A8cAa8E55580A6aE2CCAeD97Ca76" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x13999996CbA4E3BB793726e6Ed66B6DD0b8c19A6", + "LEGACY_MULTISIG": "0x6Bc6514ace1edf23cea6477d3fEDA7954571940C" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0xD953CC38fb2FF4CDE97739A024cd7D87e398Dcaf", + "LEGACY_MULTISIG": "0x16D1B0F3B3279c2793337FE8AfCC804c639C6627" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0xcc7e00D24249D7BCF0aD2c79f6D90951C80CB47B", + "LEGACY_MULTISIG": "0x0521e8571a72445B8a5F758ffF2707d055C0b53F" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0x16A3e41135b1339B925c6e49E64CEEadA5bAdBb7", + "LEGACY_MULTISIG": "0x5AE613e0D9aEF132f7034d6eF36b418ac9dE1f2E" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x6e37E41e7E4682d0dF68E34606f3254D89B7cDD0", + "LEGACY_MULTISIG": "0x8FEA7B15d7BCA0E09cb5B3BEB1dE71738A4a92B5" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0xE61fF63Ff2000Da24B72f1C29209554E8Ba79171", + "LEGACY_MULTISIG": "0x363Fa03085A7D089245d0b637D7FfCF5A1aacb7F" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x91aB65A54DaE3B71f8cE31A20B42e4f337126ffF", + "LEGACY_MULTISIG": "0x32241E9d721E0D61c82BFF037C8A6e33D6cB8F18" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xdFf1FE7F04c03A8788a728E3fcAe8A50eEAd6e11", + "LEGACY_MULTISIG": "0x6528cB0B4f9065bB4562096963a6C98BC619da7e" + }, + "ROUTING": "0x5a052832973d0A988cb553C46F5CfAcA4E078c92", + "AGGREGATION": "0x16c328B3976e5624D8AC38E362574e694676Ac6b", + "fallbackRoutingHook": "0xc278DDe83018F0e8c624b208e6D9E6251d263B1d", "index": { - "from": 33950052 + "from": 34506952 } }, "fuji": { @@ -249,8 +405,55 @@ "interchainGasPaymaster": "0x6895d3916B94b386fAA6ec9276756e16dAe7480E", "aggregationHook": "0x8E9b4006171c6B75111823e7545Ee5400CEce0B3", "protocolFee": "0xEbA64c8a9b4a61a9210d5fe7E4375380999C821b", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0xd8325468566964245FAdf15Ef0BD3587B598b3bc", + "LEGACY_MULTISIG": "0x04cB6d0616b0059751F2CFc0Ea7dde62d959CEEC" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0x0f56E6D62ddc37cbe2e4a8FA31dCA994c67c2A3d", + "LEGACY_MULTISIG": "0x8F2e9a004d3F0e8E1CEbE52375b44D79fB6Ff6ea" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x5C38d0d8686aAb40F81Ff5D9929bFD01f9C38899", + "LEGACY_MULTISIG": "0x4509Ee247C37738DC067b22fc84be9b8d7c18e83" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0xA62d029c16354F5845AC3c2728C8027645f16517", + "LEGACY_MULTISIG": "0xb7FFc29CF7be4a969282AE3E171c953D43212C30" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0x1b50E9729155D3F7e3eE886003818D1Fa80920Fd", + "LEGACY_MULTISIG": "0x4D57430F0cb764A9835521acad3653199b039327" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0xA90541C64f3eDc22a47Bc28D7cfdfE17F573A434", + "LEGACY_MULTISIG": "0xc1440Dbb7FeE4179D85d9dAD598A4E78cc5E222B" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0xE5dd4fDE4c99DCeB5F753B6F536E99523dA6EE06", + "LEGACY_MULTISIG": "0x4Bd1319ABc8Bf7633198A1f0e529158D91cfDa9F" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x40D79400513cf7fccaE4d110d3B74c23B08337B6", + "LEGACY_MULTISIG": "0x0a2cD3A4D324A322821A829A1211a8483214ef2a" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0x33b1A7480EC6dB39bE5919d695d06776E3bD7fA9", + "LEGACY_MULTISIG": "0x807AEb2b851Cc843Ae3d4D6f931cAEA893698823" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x247Dd2058D239ADC1348674BFA929F952Af331a0", + "LEGACY_MULTISIG": "0xD6e42987D0533cED33fcC9003B708bC56896C7Fe" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xD02753F38198DEB05924e503867f0e7bEC04d500", + "LEGACY_MULTISIG": "0x1A28Bc9F1D65661C4338bc374D4f133cB5763c50" + }, + "ROUTING": "0xd914570ea19385334e8DAcf5F1794f75895010dF", + "AGGREGATION": "0x39202263246c48eb80879870e9c547Bc787cdfC6", + "fallbackRoutingHook": "0x50897eDCb3f1bB2A90f20DA5a8dF0e5c57A146e3", "index": { - "from": 26504985 + "from": 27090437 } }, "goerli": { @@ -303,8 +506,84 @@ "merkleTreeHook": "0x28c294C61D3dE053462d2Cfa5d5f8c8D70605A59", "mailbox": "0x49cfd6Ef774AcAb14814D699e3F7eE36Fdfba932", "validatorAnnounce": "0x3c182AD9cA8A71bc107Ef440C2667E8360e1158E", + "alfajores": { + "messageIdMultisigIsm": "0x4683D18bD896acf67bC022f2dc0Cf9913E83a8C2", + "merkleRootMultisigIsm": "0xA09db9436C89376FbDCC731c61f3e96194d77549", + "staticAggregationIsm": "0xc80989C697d2dB54827293E9399461F5E17b50AE" + }, + "basegoerli": { + "messageIdMultisigIsm": "0x6EF750Fef341239fa0Fd7c9081508590A9527C69", + "merkleRootMultisigIsm": "0x8BB1F2bc7dd305440Dfe4E91c003510ef14044Ba", + "staticAggregationIsm": "0x110C79D5104f3d6a0291397d2f2896f10157C0f6" + }, + "fuji": { + "messageIdMultisigIsm": "0x44B0757b1C9512cff0C51089c7D5094C47D9316E", + "merkleRootMultisigIsm": "0xf3C288C5a4E17DCE46d06257B36ec7f4A82C1aF9", + "staticAggregationIsm": "0x0DB339E394665A7bDCb621B8f05A6dE746E4d28D" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x374A6953e95ADdC76c2d87cC7B89C3227DAf1Fd9", + "LEGACY_MULTISIG": "0x5d05c8152667f73e219CBb37531425C09e894de2", + "messageIdMultisigIsm": "0x374A6953e95ADdC76c2d87cC7B89C3227DAf1Fd9", + "merkleRootMultisigIsm": "0x5d05c8152667f73e219CBb37531425C09e894de2", + "staticAggregationIsm": "0x582643Ca4235195167b2195A4a8F71BDe56b8A1F" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x72a6Fcd41b68e6FAE71A5d0F21e574F3e6Ec5B9D", + "LEGACY_MULTISIG": "0x0F7C158d6afea27987f655A2d464E16fAe2aD8c7", + "messageIdMultisigIsm": "0x72a6Fcd41b68e6FAE71A5d0F21e574F3e6Ec5B9D", + "merkleRootMultisigIsm": "0x0F7C158d6afea27987f655A2d464E16fAe2aD8c7", + "staticAggregationIsm": "0x444a6FAc09220024f9D65943598829Fd4BD38bD7" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0x89c32A1Ca1Ae39886b18B0466dA5C97a6e031ca2", + "LEGACY_MULTISIG": "0x050798aFB2EF5A847f6A77764F19D207086bdDD3", + "messageIdMultisigIsm": "0x89c32A1Ca1Ae39886b18B0466dA5C97a6e031ca2", + "merkleRootMultisigIsm": "0x050798aFB2EF5A847f6A77764F19D207086bdDD3", + "staticAggregationIsm": "0x4A58088ff4B77dCcf8678A04C945CC552D6e65D6" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0xf45819C46A54cdD816DC8c9EE580712e76eaAc0C", + "LEGACY_MULTISIG": "0xD22fddaB4595a7C0f78Fa3d20cc9485b19Ee861d", + "messageIdMultisigIsm": "0xf45819C46A54cdD816DC8c9EE580712e76eaAc0C", + "merkleRootMultisigIsm": "0xD22fddaB4595a7C0f78Fa3d20cc9485b19Ee861d", + "staticAggregationIsm": "0xE0593C964e8BA2481d0f23BAF27e36DC7CCd9F13" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x9B04e5971738c427c1b0660e89859BD4164B0d67", + "LEGACY_MULTISIG": "0xD3Ad23079611e2cc306E8a60ddFdAD250512d43F", + "messageIdMultisigIsm": "0x9B04e5971738c427c1b0660e89859BD4164B0d67", + "merkleRootMultisigIsm": "0xD3Ad23079611e2cc306E8a60ddFdAD250512d43F", + "staticAggregationIsm": "0xc3AF7BC41D75909cFA34e424Fd505b7121C0CF90" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0x432B0ad68cbA0DFf644F30CC8b3275663Cb692E8", + "LEGACY_MULTISIG": "0xA50e98B2d52d4c9B242bD86f1B5C54D7E33190a6", + "messageIdMultisigIsm": "0x432B0ad68cbA0DFf644F30CC8b3275663Cb692E8", + "merkleRootMultisigIsm": "0xA50e98B2d52d4c9B242bD86f1B5C54D7E33190a6", + "staticAggregationIsm": "0x5d77806Fde4BbA8a665720d528CEACBb694B43b2" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x07733788489efD7F10533ab889144A7C67F6d9EF", + "LEGACY_MULTISIG": "0x44D117A356AfFE5C67D4A53b3eC1Ded1260Bd20d", + "messageIdMultisigIsm": "0x07733788489efD7F10533ab889144A7C67F6d9EF", + "merkleRootMultisigIsm": "0x44D117A356AfFE5C67D4A53b3eC1Ded1260Bd20d", + "staticAggregationIsm": "0x7F28dFed655a4C1a7AeC911B983Bc68EF9195D90" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0x070eDaC389b85aEe38507339Cd80aeBd95b1cb22", + "LEGACY_MULTISIG": "0x5c7e4Eb938DB4f1dE746aBb01eC1228EC38Ed3bd", + "messageIdMultisigIsm": "0x070eDaC389b85aEe38507339Cd80aeBd95b1cb22", + "merkleRootMultisigIsm": "0x5c7e4Eb938DB4f1dE746aBb01eC1228EC38Ed3bd", + "staticAggregationIsm": "0xE2fc443F458B6DbdD8987CDb6830d4F9a1AfDFeb" + }, + "ROUTING": "0x656cC76A0D05bC3F40c11DEBe0fF6EEEDabB856e", + "AGGREGATION": "0x595e45990F67A9795cE4FEB0b6ba4684c6258cD0", + "domainRoutingIsm": "0xE2401EB414B41DC2A97100f2Dab75bBcD7377119", + "opStackHook": "0xce59701919507F2d379270657A4e410F570aBe0D", + "fallbackRoutingHook": "0xDd66CB60D4Ffb7f0d8FB91CB1D20aBcaBC82900a", "index": { - "from": 9816044 + "from": 9954053 } }, "moonbasealpha": { @@ -352,8 +631,9 @@ "aggregationHook": "0xaA9d918C49Cea0D2a877252aFb7976B6e3A48623", "protocolFee": "0xe2A73F106902983452713F24Bd019F6eb8712986", "validatorAnnounce": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", + "fallbackRoutingHook": "0x6c9EB73793F9Cd535DB1bF86dC307f6d899b2fE3", "index": { - "from": 5241351 + "from": 5355188 } }, "mumbai": { @@ -394,7 +674,7 @@ }, "isTestnet": true, "transactionOverrides": { - "maxFeePerGas": 70000000000, + "maxFeePerGas": 150000000000, "maxPriorityFeePerGas": 40000000000 }, "merkleRootMultisigIsmFactory": "0xda0780ed3eE577EfE0B856E00f983bF231603307", @@ -411,8 +691,55 @@ "protocolFee": "0x244d1F7e30Be144A87602905baBF86630e8f39DC", "mailbox": "0x2d1889fe5B092CD988972261434F7E5f26041115", "validatorAnnounce": "0x99303EFF09332cDd93E8BC8b2F07b2416e4501e5", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0x2ab7f5DeC6f8Ef411315487c23a0FD1955824274", + "LEGACY_MULTISIG": "0x46c3f1a2734568Ab4582E5e990Be37e9A90c8d5C" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0xcA58F63034D79d00742153636f40975616996569", + "LEGACY_MULTISIG": "0x256578935Ea39D5B6eD49722C20D6c7734c17442" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0xbd3Cd908B44b1AB4A5c9A2E2Abc567dbd3265BaF", + "LEGACY_MULTISIG": "0xB24FadDB99664D85755a4ee5402Cce2f936e2A85" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x20fC9FF58AA29FB015195735Cb87999D1169acA7", + "LEGACY_MULTISIG": "0x1A445E9f7f5E6230A11a960E1d77af94ec1Dc70B" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0x94AfA49591B42C681CaFcBA9C1deb6d394dd358c", + "LEGACY_MULTISIG": "0x0025156297d59772cc3836EB15BcEb7b65bF2Ac0" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0xf90Ad611612d3D7f45C1EB525e2f487373286717", + "LEGACY_MULTISIG": "0x00a20F2637437151cBDB5DD8e80672458bcCAE68" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0x4234b78713bB6623b123CdBC4E163F497643D2b1", + "LEGACY_MULTISIG": "0x22A56d69B838897dacA4f87d6cC9c602de6bFaDC" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0xDbb5fc87d9CA83dE79E111acFb96882A70AE490c", + "LEGACY_MULTISIG": "0xe32F2c4129FeA483c55241Ab11413e0E9F38c716" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0xeD282a84F9cd27A827fF07D6894FE9dc63a64D63", + "LEGACY_MULTISIG": "0x45B1784587aCE88E534588e8d43E1A3282ecBA8b" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x75204D086D263d475A6390b476126B2BeB6c37A7", + "LEGACY_MULTISIG": "0x1004f5636f3348bbAae626cAf5b6578f2f7e0425" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xBae6ED82c61C1aa9a0df9741193aE5a8eE84fB28", + "LEGACY_MULTISIG": "0x2487E9d66E62B3de58C246b3e1d588f41b39d433" + }, + "ROUTING": "0xBAad51c021e4bb94b9a10b1fC82b773Ca9e35D30", + "AGGREGATION": "0xE794ff773fcd25ad43749CbCAE8e69f7f64810EF", + "fallbackRoutingHook": "0xFA005A892EbDACFcc3f1EF0111A7406c779c3647", "index": { - "from": 40880088 + "from": 41618135 } }, "optimismgoerli": { @@ -460,8 +787,9 @@ "interchainGasPaymaster": "0x02A7661273528EfF3d78CBE7CbD1a717b28B89fC", "aggregationHook": "0x1C8A2588b8038BF9B7b1b60dD0EdF5b995A45599", "protocolFee": "0x962e30F6A3ECDA85c7fa1FcF38cD04efA991Ee20", + "fallbackRoutingHook": "0xba962f31B8DE02238fDdf8CE6a21260Af8C5Dd2F", "index": { - "from": 15559566 + "from": 16395052 } }, "polygonzkevmtestnet": { @@ -508,8 +836,9 @@ "interchainGasPaymaster": "0xAD34A66Bf6dB18E858F6B686557075568c6E031C", "aggregationHook": "0x0Fd2C6F0Ad45e766660b9fDebCF36a2AD69536D1", "protocolFee": "0xddf4C3e791caCaFd26D7fb275549739B38ae6e75", + "fallbackRoutingHook": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5", "index": { - "from": 2847250 + "from": 3019086 } }, "scrollsepolia": { @@ -526,17 +855,14 @@ "rpcUrls": [ { "http": "https://sepolia-rpc.scroll.io" - }, - { - "http": "https://scroll-public.scroll-testnet.quiknode.pro" } ], "blockExplorers": [ { "name": "Scroll Explorer", - "url": "https://sepolia-blockscout.scroll.io", - "apiUrl": "https://sepolia-blockscout.scroll.io/api", - "family": "blockscout" + "url": "https://sepolia.scrollscan.dev/", + "apiUrl": "https://api-sepolia.scrollscan.com/api", + "family": "etherscan" } ], "blocks": { @@ -545,6 +871,9 @@ "estimateBlockTime": 3 }, "isTestnet": true, + "transactionOverrides": { + "gasLimit": 5000000 + }, "merkleRootMultisigIsmFactory": "0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7", "messageIdMultisigIsmFactory": "0xeb6f11189197223c656807a83B0DD374f9A6dF44", "aggregationIsmFactory": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37", @@ -559,8 +888,66 @@ "interchainGasPaymaster": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD", "aggregationHook": "0x7b63Aa270335F8896717c2A809205F4b650E4268", "protocolFee": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0xd9cbF08CaC905F78d961A72716Ef8EeD3aB7e5Eb", + "LEGACY_MULTISIG": "0xdC87a06493FaDE515c623464BE3F1580E5d8EC9A", + "MESSAGE_ID_MULTISIG": "0xd9cbF08CaC905F78d961A72716Ef8EeD3aB7e5Eb" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0xCC7DfEB63bbE762D46C9bb1B27D680b226A94b23", + "LEGACY_MULTISIG": "0xE38a0156e2968d336D43efEC716De54cF243974A", + "MESSAGE_ID_MULTISIG": "0xCC7DfEB63bbE762D46C9bb1B27D680b226A94b23" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0x6479E7a0f62db3E4cfC16dfa4960953572cE4d91", + "LEGACY_MULTISIG": "0x8671d101e6A5430D856234811e493CbB3e08f00b", + "MESSAGE_ID_MULTISIG": "0x6479E7a0f62db3E4cfC16dfa4960953572cE4d91" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0xf449003Fdb780bEFac5F946CfC12172dc1e732DF", + "LEGACY_MULTISIG": "0x8838412195Eec3B10Ad78aE3e05d7b3f29d93A4B", + "MESSAGE_ID_MULTISIG": "0xf449003Fdb780bEFac5F946CfC12172dc1e732DF" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x3074E40aA0C52d83FbB9Be642946f5fadA2212bf", + "LEGACY_MULTISIG": "0xB766e93CFf3B16cBfA698955E71f27a0bE0BD42e", + "MESSAGE_ID_MULTISIG": "0x3074E40aA0C52d83FbB9Be642946f5fadA2212bf" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0xf98a3dfCC6384b6f19F3cdfD992552CA876261f3", + "LEGACY_MULTISIG": "0xde5013E6Ace9c9Da898f98Fafd1a85547f5B893b", + "MESSAGE_ID_MULTISIG": "0xf98a3dfCC6384b6f19F3cdfD992552CA876261f3" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0xD3a84669f2F1896a1E9f77c7Dfe93F32EFf0Ea4E", + "LEGACY_MULTISIG": "0x4a072E0EB5AE0087A080F7b24E56d140E2aDd3f1", + "MESSAGE_ID_MULTISIG": "0xD3a84669f2F1896a1E9f77c7Dfe93F32EFf0Ea4E" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x47D285b171B5E2FDDf387EBdDcBeC58b188445De", + "LEGACY_MULTISIG": "0x3C1FA7196AAEAd718e741014B5Af7D46068335e3", + "MESSAGE_ID_MULTISIG": "0x47D285b171B5E2FDDf387EBdDcBeC58b188445De" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0xef317A77273BE269a2d9861F3e10808126608f4A", + "LEGACY_MULTISIG": "0x21c9A0085c58E08693bC9Bf106066B8b23c51A19", + "MESSAGE_ID_MULTISIG": "0xef317A77273BE269a2d9861F3e10808126608f4A" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x6a3D436940697D2e1b351b366816121E9d291dDd", + "LEGACY_MULTISIG": "0xc144381ccfEc30F40f32FC18C45dD5CC20510aCd", + "MESSAGE_ID_MULTISIG": "0x6a3D436940697D2e1b351b366816121E9d291dDd" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0x6B4374a792DbC69c0EfAdb076190D137df7145F9", + "LEGACY_MULTISIG": "0xD9b48cD1F0B98FaEBafa5BEB1A78bdaCd5731d08", + "MESSAGE_ID_MULTISIG": "0x6B4374a792DbC69c0EfAdb076190D137df7145F9" + }, + "ROUTING": "0x30861DDAEFa5F85DAB234F4f67a0bFF0a5E02C48", + "AGGREGATION": "0x5861Baf9aa7eC91e88585aB3bd8e3183B0768437", + "fallbackRoutingHook": "0x7c115c16E34c74afdb88bd268EaB19bC705891FE", "index": { - "from": 1345368 + "from": 1846115 } }, "sepolia": { @@ -576,7 +963,13 @@ }, "rpcUrls": [ { - "http": "https://endpoints.omniatech.io/v1/eth/sepolia/public" + "http": "https://ethereum-sepolia.blockpi.network/v1/rpc/public" + }, + { + "http": "https://eth-sepolia.g.alchemy.com/v2/demo" + }, + { + "http": "https://rpc.sepolia.org" } ], "blockExplorers": [ @@ -593,6 +986,9 @@ "estimateBlockTime": 13 }, "isTestnet": true, + "transactionOverrides": { + "gasLimit": 1000000 + }, "merkleRootMultisigIsmFactory": "0x0a71AcC99967829eE305a285750017C4916Ca269", "messageIdMultisigIsmFactory": "0xFEb9585b2f948c1eD74034205a7439261a9d27DD", "aggregationIsmFactory": "0xC83e12EF2627ACE445C298e6eC418684918a6002", @@ -607,10 +1003,11 @@ "mailbox": "0xfFAEF09B3cd11D9b20d1a19bECca54EEC2884766", "merkleTreeHook": "0x4917a9746A7B6E0A57159cCb7F5a6744247f2d0d", "validatorAnnounce": "0xE6105C59480a1B7DD3E4f28153aFdbE12F4CfCD9", + "fallbackRoutingHook": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", "index": { - "from": 4432735 + "from": 4558491 } } }, "defaultRpcConsensusType": "fallback" -} +} \ No newline at end of file diff --git a/rust/hyperlane-base/src/settings/trace/mod.rs b/rust/hyperlane-base/src/settings/trace/mod.rs index 954843d0d5..a8d835494e 100644 --- a/rust/hyperlane-base/src/settings/trace/mod.rs +++ b/rust/hyperlane-base/src/settings/trace/mod.rs @@ -69,6 +69,9 @@ impl TracingConfig { .with_target("hyper", Level::Info) .with_target("rusoto_core", Level::Info) .with_target("reqwest", Level::Info) + .with_target("h2", Level::Info) + .with_target("tower", Level::Info) + .with_target("tendermint", Level::Info) .with_target("tokio", Level::Debug) .with_target("tokio_util", Level::Debug) .with_target("ethers_providers", Level::Debug); diff --git a/rust/hyperlane-base/src/traits/checkpoint_syncer.rs b/rust/hyperlane-base/src/traits/checkpoint_syncer.rs index 3a885df27c..e017b3f5aa 100644 --- a/rust/hyperlane-base/src/traits/checkpoint_syncer.rs +++ b/rust/hyperlane-base/src/traits/checkpoint_syncer.rs @@ -3,19 +3,15 @@ use std::fmt::Debug; use async_trait::async_trait; use eyre::Result; -use hyperlane_core::{SignedAnnouncement, SignedCheckpoint, SignedCheckpointWithMessageId}; +use hyperlane_core::{SignedAnnouncement, SignedCheckpointWithMessageId}; /// A generic trait to read/write Checkpoints offchain #[async_trait] pub trait CheckpointSyncer: Debug + Send + Sync { /// Read the highest index of this Syncer async fn latest_index(&self) -> Result>; - /// Attempt to fetch the signed checkpoint at this index - async fn legacy_fetch_checkpoint(&self, index: u32) -> Result>; /// Attempt to fetch the signed (checkpoint, messageId) tuple at this index async fn fetch_checkpoint(&self, index: u32) -> Result>; - /// Write the signed checkpoint to this syncer - async fn legacy_write_checkpoint(&self, signed_checkpoint: &SignedCheckpoint) -> Result<()>; /// Write the signed (checkpoint, messageId) tuple to this syncer async fn write_checkpoint( &self, diff --git a/rust/hyperlane-base/src/types/local_storage.rs b/rust/hyperlane-base/src/types/local_storage.rs index d536b924e6..76c02a38cd 100644 --- a/rust/hyperlane-base/src/types/local_storage.rs +++ b/rust/hyperlane-base/src/types/local_storage.rs @@ -2,7 +2,7 @@ use std::path::PathBuf; use async_trait::async_trait; use eyre::{Context, Result}; -use hyperlane_core::{SignedAnnouncement, SignedCheckpoint, SignedCheckpointWithMessageId}; +use hyperlane_core::{SignedAnnouncement, SignedCheckpointWithMessageId}; use prometheus::IntGauge; use crate::traits::CheckpointSyncer; @@ -29,10 +29,6 @@ impl LocalStorage { Ok(Self { path, latest_index }) } - fn legacy_checkpoint_file_path(&self, index: u32) -> PathBuf { - self.path.join(format!("{}.json", index)) - } - fn checkpoint_file_path(&self, index: u32) -> PathBuf { self.path.join(format!("{}_with_id.json", index)) } @@ -41,14 +37,6 @@ impl LocalStorage { self.path.join("index.json") } - async fn write_index(&self, index: u32) -> Result<()> { - let path = self.latest_index_file_path(); - tokio::fs::write(&path, index.to_string()) - .await - .with_context(|| format!("Writing index to {path:?}"))?; - Ok(()) - } - fn announcement_file_path(&self) -> PathBuf { self.path.join("announcement.json") } @@ -74,16 +62,6 @@ impl CheckpointSyncer for LocalStorage { } } - async fn legacy_fetch_checkpoint(&self, index: u32) -> Result> { - match tokio::fs::read(self.legacy_checkpoint_file_path(index)).await { - Ok(data) => { - let checkpoint = serde_json::from_slice(&data)?; - Ok(Some(checkpoint)) - } - _ => Ok(None), - } - } - async fn fetch_checkpoint(&self, index: u32) -> Result> { let Ok(data) = tokio::fs::read(self.checkpoint_file_path(index)).await else { return Ok(None); @@ -92,25 +70,6 @@ impl CheckpointSyncer for LocalStorage { Ok(Some(checkpoint)) } - async fn legacy_write_checkpoint(&self, signed_checkpoint: &SignedCheckpoint) -> Result<()> { - let serialized_checkpoint = serde_json::to_string_pretty(signed_checkpoint)?; - let path = self.legacy_checkpoint_file_path(signed_checkpoint.value.index); - tokio::fs::write(&path, &serialized_checkpoint) - .await - .with_context(|| format!("Writing checkpoint to {path:?}"))?; - - match self.latest_index().await? { - Some(current_latest_index) => { - if current_latest_index < signed_checkpoint.value.index { - self.write_index(signed_checkpoint.value.index).await? - } - } - None => self.write_index(signed_checkpoint.value.index).await?, - } - - Ok(()) - } - async fn write_checkpoint( &self, signed_checkpoint: &SignedCheckpointWithMessageId, diff --git a/rust/hyperlane-base/src/types/multisig.rs b/rust/hyperlane-base/src/types/multisig.rs index 8ef9e259e1..2418364504 100644 --- a/rust/hyperlane-base/src/types/multisig.rs +++ b/rust/hyperlane-base/src/types/multisig.rs @@ -1,14 +1,11 @@ -use std::collections::{hash_map::Entry, HashMap}; +use std::collections::HashMap; use std::sync::Arc; use derive_new::new; use eyre::Result; use tracing::{debug, instrument, trace}; -use hyperlane_core::{ - Checkpoint, CheckpointWithMessageId, MultisigSignedCheckpoint, SignedCheckpointWithSigner, - H160, H256, -}; +use hyperlane_core::{MultisigSignedCheckpoint, SignedCheckpointWithMessageId, H160, H256}; use crate::CheckpointSyncer; @@ -21,174 +18,6 @@ pub struct MultisigCheckpointSyncer { } impl MultisigCheckpointSyncer { - /// Attempts to get the latest checkpoint with a quorum of signatures among - /// validators. - /// - /// First iterates through the `latest_index` of each validator's checkpoint - /// syncer, looking for the highest index that >= `threshold` validators - /// have returned. - /// - /// Attempts to find a quorum of signed checkpoints from that index, - /// iterating backwards if unsuccessful, until the (optional) index is - /// reached. - /// - /// Note it's possible to not find a quorum. - #[instrument(err, skip(self))] - pub async fn legacy_fetch_checkpoint_in_range( - &self, - validators: &[H256], - threshold: usize, - minimum_index: u32, - maximum_index: u32, - ) -> Result>> { - // Get the latest_index from each validator's checkpoint syncer. - let mut latest_indices = Vec::with_capacity(validators.len()); - for validator in validators { - let address = H160::from(*validator); - if let Some(checkpoint_syncer) = self.checkpoint_syncers.get(&address) { - // Gracefully handle errors getting the latest_index - match checkpoint_syncer.latest_index().await { - Ok(Some(index)) => { - trace!(?address, ?index, "Validator returned latest index"); - latest_indices.push(index); - } - err => { - debug!(?address, ?err, "Failed to get latest index from validator"); - } - } - } - } - debug!( - ?latest_indices, - "Fetched latest indices from checkpoint syncers" - ); - - if latest_indices.is_empty() { - debug!("No validators returned a latest index"); - return Ok(None); - } - - // Sort in descending order. The n'th index will represent - // the highest index for which we (supposedly) have (n+1) signed checkpoints - latest_indices.sort_by(|a, b| b.cmp(a)); - if let Some(&highest_quorum_index) = latest_indices.get(threshold - 1) { - // The highest viable checkpoint index is the minimum of the highest index - // we (supposedly) have a quorum for, and the maximum index for which we can - // generate a proof. - let start_index = highest_quorum_index.min(maximum_index); - if minimum_index > start_index { - debug!(%start_index, %highest_quorum_index, "Highest quorum index is below the minimum index"); - return Ok(None); - } - for index in (minimum_index..=start_index).rev() { - if let Ok(Some(checkpoint)) = self - .legacy_fetch_checkpoint(index, validators, threshold) - .await - { - return Ok(Some(checkpoint)); - } - } - } - debug!("No checkpoint found in range"); - Ok(None) - } - - /// Fetches a MultisigSignedCheckpoint if there is a quorum. - /// Returns Ok(None) if there is no quorum. - #[instrument(err, skip(self))] - pub async fn legacy_fetch_checkpoint( - &self, - index: u32, - validators: &[H256], - threshold: usize, - ) -> Result>> { - // Keeps track of signed validator checkpoints for a particular root. - // In practice, it's likely that validators will all sign the same root for a - // particular index, but we'd like to be robust to this not being the case - let mut signed_checkpoints_per_root: HashMap< - H256, - Vec>, - > = HashMap::new(); - - for validator in validators { - let addr = H160::from(*validator); - if let Some(checkpoint_syncer) = self.checkpoint_syncers.get(&addr) { - // Gracefully ignore an error fetching the checkpoint from a validator's - // checkpoint syncer, which can happen if the validator has not - // signed the checkpoint at `index`. - if let Ok(Some(signed_checkpoint)) = - checkpoint_syncer.legacy_fetch_checkpoint(index).await - { - // If the signed checkpoint is for a different index, ignore it - if signed_checkpoint.value.index != index { - debug!( - validator = format!("{:#x}", validator), - index = index, - checkpoint_index = signed_checkpoint.value.index, - "Checkpoint index mismatch" - ); - continue; - } - // Ensure that the signature is actually by the validator - let signer = signed_checkpoint.recover()?; - if H256::from(signer) != *validator { - debug!( - validator = format!("{:#x}", validator), - index = index, - "Checkpoint signature mismatch" - ); - continue; - } - - // Insert the SignedCheckpointWithSigner into signed_checkpoints_per_root - let signed_checkpoint_with_signer = SignedCheckpointWithSigner { - signer, - signed_checkpoint, - }; - let root = signed_checkpoint_with_signer.signed_checkpoint.value.root; - - let signature_count = match signed_checkpoints_per_root.entry(root) { - Entry::Occupied(mut entry) => { - let vec = entry.get_mut(); - vec.push(signed_checkpoint_with_signer); - vec.len() - } - Entry::Vacant(entry) => { - entry.insert(vec![signed_checkpoint_with_signer]); - 1 // length of 1 - } - }; - debug!( - validator = format!("{validator:#x}"), - index, - root = format!("{root:#x}"), - signature_count, - "Found signed checkpoint" - ); - // If we've hit a quorum, create a MultisigSignedCheckpoint - if signature_count >= threshold { - if let Some(signed_checkpoints) = signed_checkpoints_per_root.get(&root) { - let checkpoint = - MultisigSignedCheckpoint::try_from(signed_checkpoints)?; - debug!(?checkpoint, "Fetched multisig checkpoint"); - return Ok(Some(checkpoint)); - } - } - } else { - debug!( - validator = format!("{validator:#x}"), - index = index, - "Unable to find signed checkpoint" - ); - } - } else { - debug!(%validator, "Unable to find checkpoint syncer"); - continue; - } - } - Ok(None) - } - /// Attempts to get the latest checkpoint with a quorum of signatures among /// validators. /// @@ -208,7 +37,7 @@ impl MultisigCheckpointSyncer { threshold: usize, minimum_index: u32, maximum_index: u32, - ) -> Result>> { + ) -> Result> { // Get the latest_index from each validator's checkpoint syncer. let mut latest_indices = Vec::with_capacity(validators.len()); for validator in validators { @@ -261,6 +90,7 @@ impl MultisigCheckpointSyncer { } /// Fetches a MultisigSignedCheckpointWithMessageId if there is a quorum. + /// Validators must reflect the onchain ordering of the set /// Returns Ok(None) if there is no quorum. #[instrument(err, skip(self))] pub async fn fetch_checkpoint( @@ -268,14 +98,12 @@ impl MultisigCheckpointSyncer { validators: &[H256], threshold: usize, index: u32, - ) -> Result>> { + ) -> Result> { // Keeps track of signed validator checkpoints for a particular root. // In practice, it's likely that validators will all sign the same root for a // particular index, but we'd like to be robust to this not being the case - let mut signed_checkpoints_per_root: HashMap< - H256, - Vec>, - > = HashMap::new(); + let mut signed_checkpoints_per_root: HashMap> = + HashMap::new(); for validator in validators.iter() { let addr = H160::from(*validator); @@ -295,7 +123,7 @@ impl MultisigCheckpointSyncer { ); continue; } - // Ensure that the signature is actually by the validator + // Ensure that the signature is actually by the validator at the current index let signer = signed_checkpoint.recover()?; if H256::from(signer) != *validator { debug!( @@ -306,25 +134,13 @@ impl MultisigCheckpointSyncer { continue; } - // Insert the SignedCheckpointWithSigner into signed_checkpoints_per_root - let signed_checkpoint_with_signer = - SignedCheckpointWithSigner:: { - signer, - signed_checkpoint, - }; - let root = signed_checkpoint_with_signer.signed_checkpoint.value.root; + // Push the signed checkpoint into the hashmap + let root = signed_checkpoint.value.root; + let signed_checkpoints = signed_checkpoints_per_root.entry(root).or_default(); + signed_checkpoints.push(signed_checkpoint); - let signature_count = match signed_checkpoints_per_root.entry(root) { - Entry::Occupied(mut entry) => { - let vec = entry.get_mut(); - vec.push(signed_checkpoint_with_signer); - vec.len() - } - Entry::Vacant(entry) => { - entry.insert(vec![signed_checkpoint_with_signer]); - 1 // length of 1 - } - }; + // Count the number of signatures for this signed checkpoint + let signature_count = signed_checkpoints.len(); debug!( validator = format!("{:#x}", validator), index = index, @@ -332,16 +148,12 @@ impl MultisigCheckpointSyncer { signature_count = signature_count, "Found signed checkpoint" ); + // If we've hit a quorum, create a MultisigSignedCheckpoint if signature_count >= threshold { - if let Some(signed_checkpoints) = signed_checkpoints_per_root.get(&root) { - let checkpoint = - MultisigSignedCheckpoint::::try_from( - signed_checkpoints, - )?; - debug!(checkpoint=?checkpoint, "Fetched multisig checkpoint"); - return Ok(Some(checkpoint)); - } + let checkpoint: MultisigSignedCheckpoint = signed_checkpoints.try_into()?; + debug!(checkpoint=?checkpoint, "Fetched multisig checkpoint"); + return Ok(Some(checkpoint)); } } else { debug!( diff --git a/rust/hyperlane-base/src/types/s3_storage.rs b/rust/hyperlane-base/src/types/s3_storage.rs index 588bc81b76..cfce7ff3e5 100644 --- a/rust/hyperlane-base/src/types/s3_storage.rs +++ b/rust/hyperlane-base/src/types/s3_storage.rs @@ -4,7 +4,7 @@ use async_trait::async_trait; use derive_new::new; use eyre::{bail, Result}; use futures_util::TryStreamExt; -use hyperlane_core::{SignedAnnouncement, SignedCheckpoint, SignedCheckpointWithMessageId}; +use hyperlane_core::{SignedAnnouncement, SignedCheckpointWithMessageId}; use prometheus::IntGauge; use rusoto_core::{ credential::{Anonymous, AwsCredentials, StaticProvider}, @@ -127,10 +127,6 @@ impl S3Storage { } } - fn legacy_checkpoint_key(index: u32) -> String { - format!("checkpoint_{index}.json") - } - fn checkpoint_key(index: u32) -> String { format!("checkpoint_{index}_with_id.json") } @@ -163,14 +159,6 @@ impl CheckpointSyncer for S3Storage { ret } - async fn legacy_fetch_checkpoint(&self, index: u32) -> Result> { - self.anonymously_read_from_bucket(S3Storage::legacy_checkpoint_key(index)) - .await? - .map(|data| serde_json::from_slice(&data)) - .transpose() - .map_err(Into::into) - } - async fn fetch_checkpoint(&self, index: u32) -> Result> { self.anonymously_read_from_bucket(S3Storage::checkpoint_key(index)) .await? @@ -179,22 +167,6 @@ impl CheckpointSyncer for S3Storage { .map_err(Into::into) } - async fn legacy_write_checkpoint(&self, signed_checkpoint: &SignedCheckpoint) -> Result<()> { - let serialized_checkpoint = serde_json::to_string_pretty(signed_checkpoint)?; - self.write_to_bucket( - S3Storage::legacy_checkpoint_key(signed_checkpoint.value.index), - &serialized_checkpoint, - ) - .await?; - - self.write_to_bucket( - S3Storage::index_key(), - &signed_checkpoint.value.index.to_string(), - ) - .await?; - Ok(()) - } - async fn write_checkpoint( &self, signed_checkpoint: &SignedCheckpointWithMessageId, diff --git a/rust/hyperlane-core/src/traits/interchain_security_module.rs b/rust/hyperlane-core/src/traits/interchain_security_module.rs index 2fa7263a30..cf39b368c6 100644 --- a/rust/hyperlane-core/src/traits/interchain_security_module.rs +++ b/rust/hyperlane-core/src/traits/interchain_security_module.rs @@ -31,7 +31,7 @@ pub enum ModuleType { Routing, /// Aggregation ISM (aggregates multiple ISMs) Aggregation, - /// Legacy ISM (validators in calldata, set commitment in storage) + /// Legacy ISM (DEPRECATED) LegacyMultisig, /// Merkle Proof ISM (batching and censorship resistance) MerkleRootMultisig, diff --git a/rust/hyperlane-core/src/types/checkpoint.rs b/rust/hyperlane-core/src/types/checkpoint.rs index 35fe34ce2a..1fbd387e81 100644 --- a/rust/hyperlane-core/src/types/checkpoint.rs +++ b/rust/hyperlane-core/src/types/checkpoint.rs @@ -4,7 +4,7 @@ use derive_more::Deref; use serde::{Deserialize, Serialize}; use sha3::{digest::Update, Digest, Keccak256}; -use crate::{utils::domain_hash, Signable, Signature, SignedType, H160, H256}; +use crate::{utils::domain_hash, Signable, Signature, SignedType, H256}; /// An Hyperlane checkpoint #[derive(Copy, Clone, Eq, PartialEq, Serialize, Deserialize, Debug)] @@ -29,26 +29,6 @@ pub struct CheckpointWithMessageId { pub message_id: H256, } -impl Signable for Checkpoint { - /// A hash of the checkpoint contents. - /// The EIP-191 compliant version of this hash is signed by validators. - fn signing_hash(&self) -> H256 { - // sign: - // domain_hash(mailbox_address, mailbox_domain) || root || index (as u32) - H256::from_slice( - Keccak256::new() - .chain(domain_hash( - self.merkle_tree_hook_address, - self.mailbox_domain, - )) - .chain(self.root) - .chain(self.index.to_be_bytes()) - .finalize() - .as_slice(), - ) - } -} - impl Signable for CheckpointWithMessageId { /// A hash of the checkpoint contents. /// The EIP-191 compliant version of this hash is signed by validators. @@ -70,36 +50,16 @@ impl Signable for CheckpointWithMessageId { } } -/// Signed checkpoint -pub type SignedCheckpoint = SignedType; /// Signed (checkpoint, messageId) tuple pub type SignedCheckpointWithMessageId = SignedType; -/// An individual signed checkpoint with the recovered signer -#[derive(Clone, Debug)] -pub struct SignedCheckpointWithSigner { - /// The recovered signer - pub signer: H160, - /// The signed checkpoint - pub signed_checkpoint: SignedType, -} - -/// A signature and its signer. -#[derive(Clone, Debug)] -pub struct SignatureWithSigner { - /// The signature - pub signature: Signature, - /// The signer of the signature - pub signer: H160, -} - /// A checkpoint and multiple signatures #[derive(Clone, Debug)] -pub struct MultisigSignedCheckpoint { +pub struct MultisigSignedCheckpoint { /// The checkpoint - pub checkpoint: T, - /// Signatures over the checkpoint. No ordering guarantees. - pub signatures: Vec, + pub checkpoint: CheckpointWithMessageId, + /// Signatures over the checkpoint ordered by validator index, length == threshold + pub signatures: Vec, } /// Error types for MultisigSignedCheckpoint @@ -113,36 +73,24 @@ pub enum MultisigSignedCheckpointError { EmptySignatures(), } -impl TryFrom<&Vec>> - for MultisigSignedCheckpoint -{ +impl TryFrom<&mut Vec> for MultisigSignedCheckpoint { type Error = MultisigSignedCheckpointError; - /// Given multiple signed checkpoints with their signer, creates a - /// MultisigSignedCheckpoint + /// Given multiple signed checkpoints, create a MultisigSignedCheckpoint fn try_from( - signed_checkpoints: &Vec>, + signed_checkpoints: &mut Vec, ) -> Result { if signed_checkpoints.is_empty() { return Err(MultisigSignedCheckpointError::EmptySignatures()); } // Get the first checkpoint and ensure all other signed checkpoints are for // the same checkpoint - let checkpoint = signed_checkpoints[0].signed_checkpoint.value; - if !signed_checkpoints - .iter() - .all(|c| checkpoint == c.signed_checkpoint.value) - { + let checkpoint = signed_checkpoints[0].value; + if !signed_checkpoints.iter().all(|c| checkpoint == c.value) { return Err(MultisigSignedCheckpointError::InconsistentCheckpoints()); } - let signatures = signed_checkpoints - .iter() - .map(|c: &SignedCheckpointWithSigner| SignatureWithSigner { - signature: c.signed_checkpoint.signature, - signer: c.signer, - }) - .collect(); + let signatures = signed_checkpoints.iter().map(|c| c.signature).collect(); Ok(MultisigSignedCheckpoint { checkpoint, diff --git a/solidity/contracts/interfaces/optimism/ICrossDomainMessenger.sol b/solidity/contracts/interfaces/optimism/ICrossDomainMessenger.sol index d1e111fcd0..9bffafcc7e 100644 --- a/solidity/contracts/interfaces/optimism/ICrossDomainMessenger.sol +++ b/solidity/contracts/interfaces/optimism/ICrossDomainMessenger.sol @@ -27,13 +27,13 @@ interface ICrossDomainMessenger { bytes calldata _message ) external payable; - /************* - * Variables * - *************/ - function xDomainMessageSender() external view returns (address); + + function OTHER_MESSENGER() external view returns (address); } +interface IL1CrossDomainMessenger is ICrossDomainMessenger {} + interface IL2CrossDomainMessenger is ICrossDomainMessenger { function messageNonce() external view returns (uint256); } diff --git a/typescript/infra/config/aggregationIsm.ts b/typescript/infra/config/aggregationIsm.ts index 0c4bad0237..7dfa075633 100644 --- a/typescript/infra/config/aggregationIsm.ts +++ b/typescript/infra/config/aggregationIsm.ts @@ -1,8 +1,5 @@ -import { - AggregationIsmConfig, - ChainName, - ModuleType, -} from '@hyperlane-xyz/sdk'; +import { AggregationIsmConfig, ChainName } from '@hyperlane-xyz/sdk'; +import { IsmType } from '@hyperlane-xyz/sdk/dist/ism/types'; import { Contexts } from './contexts'; import { multisigIsm } from './multisigIsm'; @@ -13,11 +10,11 @@ export const aggregationIsm = ( context: Contexts, ): AggregationIsmConfig => { return { - type: ModuleType.AGGREGATION, + type: IsmType.AGGREGATION, modules: [ // Ordering matters to preserve determinism - multisigIsm(remote, ModuleType.MERKLE_ROOT_MULTISIG, context), - multisigIsm(remote, ModuleType.MESSAGE_ID_MULTISIG, context), + multisigIsm(remote, IsmType.MERKLE_ROOT_MULTISIG, context), + multisigIsm(remote, IsmType.MESSAGE_ID_MULTISIG, context), ], threshold: 2, }; diff --git a/typescript/infra/config/environments/index.ts b/typescript/infra/config/environments/index.ts index 7080679122..e38c89addd 100644 --- a/typescript/infra/config/environments/index.ts +++ b/typescript/infra/config/environments/index.ts @@ -1,9 +1,9 @@ -import { environment as mainnet2 } from './mainnet2'; +import { environment as mainnet3 } from './mainnet3'; import { environment as test } from './test'; import { environment as testnet4 } from './testnet4'; export const environments = { test, testnet4, - mainnet2, + mainnet3, }; diff --git a/typescript/infra/config/environments/mainnet2/agent.ts b/typescript/infra/config/environments/mainnet2/agent.ts deleted file mode 100644 index 369ad0389f..0000000000 --- a/typescript/infra/config/environments/mainnet2/agent.ts +++ /dev/null @@ -1,196 +0,0 @@ -import { - GasPaymentEnforcementPolicyType, - RpcConsensusType, - chainMetadata, - getDomainId, - hyperlaneEnvironments, -} from '@hyperlane-xyz/sdk'; -import { ProtocolType, objFilter, objMap } from '@hyperlane-xyz/utils'; - -import { - RootAgentConfig, - allAgentChainNames, - routerMatchingList, -} from '../../../src/config'; -import { GasPaymentEnforcementConfig } from '../../../src/config/agent/relayer'; -import { ALL_KEY_ROLES, Role } from '../../../src/roles'; -import { Contexts } from '../../contexts'; - -import { agentChainNames, environment } from './chains'; -import { helloWorld } from './helloworld'; -import { validatorChainConfig } from './validators'; - -const releaseCandidateHelloworldMatchingList = routerMatchingList( - helloWorld[Contexts.ReleaseCandidate].addresses, -); - -const interchainQueryRouters = objFilter( - objMap(hyperlaneEnvironments.mainnet, (_, addresses) => { - return { - router: addresses.interchainQueryRouter, - }; - }), - (chain, _addresses): _addresses is { router: string } => - chainMetadata[chain].protocol === ProtocolType.Ethereum, -); - -const interchainQueriesMatchingList = routerMatchingList( - interchainQueryRouters, -); - -const repo = 'gcr.io/abacus-labs-dev/hyperlane-agent'; - -const contextBase = { - namespace: environment, - runEnv: environment, - contextChainNames: agentChainNames, - environmentChainNames: allAgentChainNames(agentChainNames), - aws: { - region: 'us-east-1', - }, -} as const; - -const bscNautilusWarpRoutes: Array<{ router: string }> = [ - // ZBC - { - router: '0xC27980812E2E66491FD457D488509b7E04144b98', - }, - // ETH - { - router: '0x2a6822dc5639b3fe70de6b65b9ff872e554162fa', - }, - // USDC - { - router: '0x6937a62f93a56D2AE9392Fa1649b830ca37F3ea4', - }, - // BTC - { - router: '0xB3545006A532E8C23ebC4e33d5ab2232Cafc35Ad', - }, - // USDT - { - router: '0xb7d36720a16A1F9Cfc1f7910Ac49f03965401a36', - }, - // POSE - { - router: '0x97a2D58d30A2c838946194494207F7Cf50c25815', - }, -]; - -const gasPaymentEnforcement: GasPaymentEnforcementConfig[] = [ - { - type: GasPaymentEnforcementPolicyType.None, - // To continue relaying interchain query callbacks, we whitelist - // all messages between interchain query routers. - // This whitelist will become more strict with - // https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/1605 - matchingList: [ - ...interchainQueriesMatchingList, - { - originDomain: [getDomainId(chainMetadata.bsc)], - senderAddress: bscNautilusWarpRoutes.map((r) => r.router), - destinationDomain: '*', - recipientAddress: '*', - }, - // Temporarily don't charge gas for the Solana -> Nautilus ZBC warp route, - // as IGP indexing in the agents is currently incompatible with the deployed IGP. - { - originDomain: [getDomainId(chainMetadata.solana)], - senderAddress: ['EJqwFjvVJSAxH8Ur2PYuMfdvoJeutjmH6GkoEFQ4MdSa'], - destinationDomain: [getDomainId(chainMetadata.nautilus)], - recipientAddress: '*', - }, - // Similarly, temporarily not charging gas for Helloworld from Solana - { - originDomain: [getDomainId(chainMetadata.solana)], - senderAddress: [ - // Hyperlane context - '4k1gruSdH1r57V9QQK4aunzfMYzLFfF83jdYkkEwyem6', - // Rc context - '3pPDp16iVTJFge2sm85Q61hW61UN5xNqeG24gqFhzLFV', - ], - destinationDomain: '*', - recipientAddress: '*', - }, - ], - }, - { - type: GasPaymentEnforcementPolicyType.OnChainFeeQuoting, - }, -]; - -const hyperlane: RootAgentConfig = { - ...contextBase, - context: Contexts.Hyperlane, - rolesWithKeys: ALL_KEY_ROLES, - relayer: { - rpcConsensusType: RpcConsensusType.Fallback, - docker: { - repo, - tag: '35fdc74-20230913-104940', - }, - blacklist: [ - ...releaseCandidateHelloworldMatchingList, - { - originDomain: 137, - recipientAddress: '0xBC3cFeca7Df5A45d61BC60E7898E63670e1654aE', - }, - ], - gasPaymentEnforcement, - }, - validators: { - docker: { - repo, - tag: 'ed7569d-20230725-171222', - }, - chainDockerOverrides: { - [chainMetadata.solana.name]: { - tag: '3b0685f-20230815-110725', - }, - [chainMetadata.nautilus.name]: { - tag: '3b0685f-20230815-110725', - }, - }, - rpcConsensusType: RpcConsensusType.Quorum, - chains: validatorChainConfig(Contexts.Hyperlane), - }, - scraper: { - rpcConsensusType: RpcConsensusType.Fallback, - docker: { - repo, - tag: 'aaddba7-20230620-154941', - }, - }, -}; - -const releaseCandidate: RootAgentConfig = { - ...contextBase, - context: Contexts.ReleaseCandidate, - rolesWithKeys: [Role.Relayer, Role.Kathy, Role.Validator], - relayer: { - rpcConsensusType: RpcConsensusType.Fallback, - docker: { - repo, - tag: '35fdc74-20230913-104940', - }, - whitelist: releaseCandidateHelloworldMatchingList, - gasPaymentEnforcement, - transactionGasLimit: 750000, - // Skipping arbitrum because the gas price estimates are inclusive of L1 - // fees which leads to wildly off predictions. - skipTransactionGasLimitFor: [chainMetadata.arbitrum.name], - }, - validators: { - docker: { - repo, - tag: 'ed7569d-20230725-171222', - }, - rpcConsensusType: RpcConsensusType.Quorum, - chains: validatorChainConfig(Contexts.ReleaseCandidate), - }, -}; - -export const agents = { - [Contexts.Hyperlane]: hyperlane, - [Contexts.ReleaseCandidate]: releaseCandidate, -}; diff --git a/typescript/infra/config/environments/mainnet2/core/verification.json b/typescript/infra/config/environments/mainnet2/core/verification.json deleted file mode 100644 index e917261a0f..0000000000 --- a/typescript/infra/config/environments/mainnet2/core/verification.json +++ /dev/null @@ -1,722 +0,0 @@ -{ - "celo": [ - { - "name": "MultisigIsm", - "address": "0x9bDE63104EE030d9De419EEd6bA7D14b86D6fE3f", - "constructorArguments": "0x", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x90f9a2E9eCe93516d65FdaB726a3c62F5960a1b9", - "constructorArguments": "0x", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x5bc68C82d33160cF4EA34d0bab3F7c27cD9eD8D6", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x616AC8Bd65bEcF4b184eC92F5C1a45a454B7F211", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0x3f23f4594e1cCA1734d0A7F15495bF3C4cdb55db", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a4ec" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xeee36EA559250cF4145D9d034B75fDC61E2D7Dcf", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0xD9A9966E7dA9a7f0032bF449FB12696a638E673C", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "ethereum": [ - { - "name": "MultisigIsm", - "address": "0xec48E52D960E54a179f70907bF28b105813877ee", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x75EE15Ee1B4A75Fa3e2fDF5DF3253c25599cc659", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0xcC48E741996B0d77b38d9dC2bf9217e65E368E06", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xA4b2951bCd4B0ec43f2B4Deecd639551dC165E23", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0xc9a103990A8dB11b4f627bc5CD1D0c2685484Ec5", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "avalanche": [ - { - "name": "MultisigIsm", - "address": "0xeE80ab5B563cB3825133f29502bA34eD3707cb8C", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0xd7CF8c05fd81b8cA7CfF8E6C49B08a9D63265c9B", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0xFB4712576680002C2690f66C0c5eedEa5260DBfB", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a86a" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0x35BCCf7296012e1778148DB6bFD7088a75a3949A", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0x175821F30AdCAA4bbB72Ce98eF76C2E0De2C3f21", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "polygon": [ - { - "name": "MultisigIsm", - "address": "0x61A80297e77FC5395bd6Ff60EEacf7CD4f18d4a4", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0xC4F7590C5d30BE959225dC75640657954A86b980", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0xd63C65e84059b9d32bc979016bbC2976138da694", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000089" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xBF30B4F328d1F6AC47ecCcF23836F3CbB2422c9f", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0xA3a24EC5670F1F416AB9fD554FcE2f226AE9D7eB", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "bsc": [ - { - "name": "MultisigIsm", - "address": "0x3a579C0bd04FC4C98A8D70EEABD9094e7be4B26D", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x65993Af9D0D3a64ec77590db7ba362D6eB78eF70", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0x961877927Ec6B0a9133DbBb1d0232CB6A5C28b54", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000038" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xF1517508Ed21a1507703F1a21420170C3963dfa0", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0x91d23D603d60445411C06e6443d81395593B7940", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "arbitrum": [ - { - "name": "MultisigIsm", - "address": "0x32B92bd3e5045B67FDD8dbb7A58D25980836d04C", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x80Cebd56A65e46c474a1A101e89E76C4c51D179c", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0x4B5bc88A0D383c3C6E72D9889afaBB12A5dCCCfa", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a4b1" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xDfDC87F1D1fCc4ca4078d2F42A61D0E0B72FF09A", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0xD3805207b65d99C075ceA938Fa7c0587026a5DF5", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - }, - { - "name": "TimelockController", - "address": "0xAC98b0cD1B64EA4fe133C6D2EDaf842cE5cF4b01", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000093a80000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ba47e1b575980b7d1b1508cc48be1df4ee5081110000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ba47e1b575980b7d1b1508cc48be1df4ee508111", - "isProxy": false - } - ], - "optimism": [ - { - "name": "MultisigIsm", - "address": "0xAab1D11E2063Bae5EB01fa946cA8d2FDe3db05D5", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0xE047cb95FB3b7117989e911c6afb34771183fC35", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0x6989120F7042Df0895dBE856b73A31E4cD0A2Cad", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000000a" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xE10dE0D4F9889597786509600A92Ae597551A853", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0x27e88AeB8EA4B159d81df06355Ea3d20bEB1de38", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "moonbeam": [ - { - "name": "MultisigIsm", - "address": "0xf3b1F415740A26568C45b1c771A737E31C198F09", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x6A9cdA3dd1F593983BFd142Eb35e6ce4137bd5ce", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0x1747Fa1b94862C8648BF0637767315FD1Fa2106C", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000504" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xC4eD4C2090f43D7d42902A7301aA4f997dF79BEd", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0x448b7ADB0dA36d41AA2AfDc9d63b97541A7b3819", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "gnosis": [ - { - "name": "MultisigIsm", - "address": "0xC343A7054838FE9F249D7E3Ec1Fa6f1D108694b8", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x81a92A1a272cb09d7b4970b07548463dC7aE0cB7", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "Mailbox", - "address": "0x8e1d6B03F7A823e9302c9042cd0d00728F456e70", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000064" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0x5E01d8F34b629E3f92d69546bbc4142A7Adee7e9", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ] -} diff --git a/typescript/infra/config/environments/mainnet2/helloworld/hyperlane/addresses.json b/typescript/infra/config/environments/mainnet2/helloworld/hyperlane/addresses.json deleted file mode 100644 index eee1f4b7c2..0000000000 --- a/typescript/infra/config/environments/mainnet2/helloworld/hyperlane/addresses.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "bsc": { - "router": "0xB97d3bF2fC296c2cAC4056bBC8A783ff39408e20" - }, - "avalanche": { - "router": "0x2A925CD8a5d919c5c6599633090c37fe38A561b6" - }, - "polygon": { - "router": "0x6c0aC8cEA75232aa7BeD8cbe9C4f820E7a77a9C3" - }, - "celo": { - "router": "0x4151773Db70C0b2D4c43Ea44A5FB5803ff1d3e0B" - }, - "arbitrum": { - "router": "0x96271cA0ab9eeFB3Ca481749c0Ca4c705fD4F523" - }, - "optimism": { - "router": "0xA6f0A37DFDe9C2c8F46F010989C47d9edB3a9FA8" - }, - "ethereum": { - "router": "0x9311cEE522A7C122B843b66cC31C6a63e2F92641" - }, - "moonbeam": { - "router": "0xAe067C08703508230357025B38c35Cd12793628c" - }, - "gnosis": { - "router": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4" - }, - "solana": { - "router": "4k1gruSdH1r57V9QQK4aunzfMYzLFfF83jdYkkEwyem6" - } -} diff --git a/typescript/infra/config/environments/mainnet2/helloworld/rc/addresses.json b/typescript/infra/config/environments/mainnet2/helloworld/rc/addresses.json deleted file mode 100644 index fc05200b7e..0000000000 --- a/typescript/infra/config/environments/mainnet2/helloworld/rc/addresses.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "gnosis": { - "router": "0x99ca8c74cE7Cfa9d72A51fbb05F9821f5f826b3a" - }, - "bsc": { - "router": "0xe5554478F167936dB253f79f57c41770bfa00Bae" - }, - "avalanche": { - "router": "0xe1De9910fe71cC216490AC7FCF019e13a34481D7" - }, - "polygon": { - "router": "0xAb65C41a1BC580a52f0b166879122EFdce0cB868" - }, - "celo": { - "router": "0xfE29f6a4468536029Fc9c97d3a9669b9fe38E114" - }, - "arbitrum": { - "router": "0x414B67F62b143d6db6E9b633168Dd6fd4DA20642" - }, - "optimism": { - "router": "0xB4caf2CA864B413DAA502fA18A8D48cD0740fC52" - }, - "ethereum": { - "router": "0xed31c20c5517EaC05decD5F6dCd01Fe6d16fD09D" - }, - "moonbeam": { - "router": "0x3eB9eE2CFC8DCB6F58B5869D33336CFcBf1dC354" - }, - "solana": { - "router": "3pPDp16iVTJFge2sm85Q61hW61UN5xNqeG24gqFhzLFV" - } -} diff --git a/typescript/infra/config/environments/mainnet2/ism/verification.json b/typescript/infra/config/environments/mainnet2/ism/verification.json deleted file mode 100644 index 199b97842e..0000000000 --- a/typescript/infra/config/environments/mainnet2/ism/verification.json +++ /dev/null @@ -1,344 +0,0 @@ -{ - "celo": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0x9bf473968629b8f8cF4ab59Aeb9640b0c93411dd", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0xc864fa3B662613cA5051f41e157d0a997f9a5A87", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0x1fdfD1486b8339638C6b92f8a96D698D8182D2b1", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0x82140b2ddAd4E4dd7e1D6757Fb5F9485c230B79d", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x1079056da3EC7D55521F27e1E094015C0d39Cc65", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x870aeae147917c0b87ba55613d977026d3019018", - "constructorArguments": "", - "isProxy": false - } - ], - "ethereum": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0xfD548D8a8EB8366D802F24e1bC6D1d21dB057EF1", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x30B3Ef3e98B1FF72f03f71f68115E18F203Ec794", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0xBF30B4F328d1F6AC47ecCcF23836F3CbB2422c9f", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0xd6286a220b80128763bc0181Aa27F471fDC8E532", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x60305F347C369E31782B3bc42D08dC2c7F218807", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x2f14526ec4a7ec292e792ebf836fea303ce038fa", - "constructorArguments": "", - "isProxy": false - } - ], - "avalanche": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0x270d0334bC98a02f7A4e2328B319EDEDcd7a2000", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x070d4f61b05eD9e20C9194f29Df073f2110705fc", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0x0FC1A9DFAca9b6Ba11bC470Bf284Da7c107fDfF2", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0x3A434432E4305C378F7a29fD63653d09ec48a145", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x6f82eC078317aAbE2ae5200f09d4550987A1bF28", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x5d6945e61a2d67f5a8e93873eaf60c9ee1313314", - "constructorArguments": "", - "isProxy": false - } - ], - "polygon": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0xfF4872B62225c1f029a894D4682b250dD5577AC7", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x10Add66Db9C837000A43F3601aa9c54c6744F4c8", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0x0B48a744698ba8dFa514742dFEB6728f52fD66f7", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0x004D9DF774B1968989dCC9F2F389325BA61Ba370", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x720663C310D3Db506F28a8F65c39Af37BFBe0248", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x3c8d4e08ea1ad7644dcfc23e0fe708eb6a1f7ad7", - "constructorArguments": "", - "isProxy": false - } - ], - "bsc": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0x4F5db88EEdEBd6a8303ed13491169d4229D9A735", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x4084054Fc83af652A1f21EA2FF2a668D796e2514", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0x85392758524EEE2323Bd3029E77aFc9bA9E60216", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0x43Ee7f7Cd4bB7108144126780a07c22257925060", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0xcf14426dF1D973A656e20c3AcD2B9E18C3C05793", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0xae16de9c4e403c2ed47c8be6e32e58dbcc2551e2", - "constructorArguments": "", - "isProxy": false - } - ], - "arbitrum": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0x2A87BF6aE678569545B258fA11087C6F57dd9012", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x9E3075E067932d744119e583B34d11b144CE1e4A", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0xcC2fA09fa13857942fae408EcCEc8De307344e99", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0xb98CCA546f88B825D1ae132ac0fb52B27cE68b05", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x9D7B7245C6dAEBD5543080C91523e0702fC27024", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x0bf2518aADbAb4E16b16Ba21231CE8B17E3c8843", - "constructorArguments": "", - "isProxy": false - } - ], - "optimism": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0x21581dE0CB0Ce91E87b9d5124543C75Fa01ED9CC", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0xb7d42f065E32eB6fCAac7ef83902c56164328fE2", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0x4ef980034E631CC0CFb3b065aB793611f1B6511A", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0xdDF51d1f0f38ec98F60BAB4FF7edfc7e47C4eA0d", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x3A7Ff7b700681A2655377cFDc88eE2031cf270E1", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x0ca4d54b91f2d8b728117ef3fb1ce7b52017d335", - "constructorArguments": "", - "isProxy": false - } - ], - "moonbeam": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0xe3DB9EdafBA60629308166B21DE2B4970bF94969", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x20E1897CD584C3788A3C24f5e424345a55ADf90C", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0xB5ec4e94ec47A70C6A38370666F713423816ce4c", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0xE80C30738DC66dad77657695e345be168D49b062", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x147F8C69f0FCF571c03093dE4180718FaecbA31E", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x96b595b97bb5106518ac830c59b2d7cd32f2a150", - "constructorArguments": "", - "isProxy": false - } - ], - "gnosis": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0xb58257cc81E47EC72fD38aE16297048de23163b4", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0xb4fc9B5fD57499Ef6FfF3995728a55F7A618ef86", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0xbB22547D1dc681fe925f568f637Ff67aC06c20fc", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0x784b9D0f4eF9fb8444DfB5d24AB221C9D1A85395", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0xC4275763D7b621eb732847957012F1fb35C90BB8", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x2f134de027e88142aaad486572cc91c1f81214bf", - "constructorArguments": "", - "isProxy": false - } - ] -} diff --git a/typescript/infra/config/environments/mainnet2/validators.ts b/typescript/infra/config/environments/mainnet2/validators.ts deleted file mode 100644 index a4037737c5..0000000000 --- a/typescript/infra/config/environments/mainnet2/validators.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { chainMetadata } from '@hyperlane-xyz/sdk'; - -import { ValidatorBaseChainConfigMap } from '../../../src/config/agent'; -import { Contexts } from '../../contexts'; -import { validatorBaseConfigsFn } from '../utils'; - -import { environment } from './chains'; - -export const validatorChainConfig = ( - context: Contexts, -): ValidatorBaseChainConfigMap => { - const validatorsConfig = validatorBaseConfigsFn(environment, context); - return { - celo: { - interval: 5, - reorgPeriod: 0, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0x1f20274b1210046769d48174c2f0e7c25ca7d5c5'], - [Contexts.ReleaseCandidate]: [ - '0xe7a82e210f512f8e9900d6bc2acbf7981c63e66e', - ], - }, - 'celo', - ), - }, - ethereum: { - interval: 5, - reorgPeriod: 20, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0x4c327ccb881a7542be77500b2833dc84c839e7b7'], - [Contexts.ReleaseCandidate]: [ - '0xaea1adb1c687b061e5b60b9da84cb69e7b5fab44', - ], - }, - 'ethereum', - ), - }, - avalanche: { - interval: 5, - reorgPeriod: 3, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0xa7aa52623fe3d78c343008c95894be669e218b8d'], - [Contexts.ReleaseCandidate]: [ - '0x706976391e23dea28152e0207936bd942aba01ce', - ], - }, - 'avalanche', - ), - }, - polygon: { - interval: 5, - reorgPeriod: 256, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0x59a001c3451e7f9f3b4759ea215382c1e9aa5fc1'], - [Contexts.ReleaseCandidate]: [ - '0xef372f6ff7775989b3ac884506ee31c79638c989', - ], - }, - 'polygon', - ), - }, - bsc: { - interval: 5, - reorgPeriod: 15, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0xcc84b1eb711e5076b2755cf4ad1d2b42c458a45e'], - [Contexts.ReleaseCandidate]: [ - '0x0823081031a4a6f97c6083775c191d17ca96d0ab', - ], - }, - 'bsc', - ), - }, - arbitrum: { - interval: 5, - reorgPeriod: 0, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0xbcb815f38d481a5eba4d7ac4c9e74d9d0fc2a7e7'], - [Contexts.ReleaseCandidate]: [ - '0x1a95b35fb809d57faf1117c1cc29a6c5df289df1', - ], - }, - 'arbitrum', - ), - }, - optimism: { - interval: 5, - reorgPeriod: 0, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0x9f2296d5cfc6b5176adc7716c7596898ded13d35'], - [Contexts.ReleaseCandidate]: [ - '0x60e938bf280bbc21bacfd8bf435459d9003a8f98', - ], - }, - 'optimism', - ), - }, - moonbeam: { - interval: 5, - reorgPeriod: 2, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0x237243d32d10e3bdbbf8dbcccc98ad44c1c172ea'], - [Contexts.ReleaseCandidate]: [ - '0x0df7140811e309dc69638352545151ebb9d5e0fd', - ], - }, - 'moonbeam', - ), - }, - gnosis: { - interval: 5, - reorgPeriod: 14, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0xd0529ec8df08d0d63c0f023786bfa81e4bb51fd6'], - [Contexts.ReleaseCandidate]: [ - '0x15f48e78092a4f79febface509cfd76467c6cdbb', - ], - }, - 'gnosis', - ), - }, - solana: { - interval: 5, - reorgPeriod: chainMetadata.solana.blocks!.reorgPeriod!, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: [ - '0x3cd1a081f38874bbb075bf10b62adcb858db864c', - '0x28aa072634dd41d19471640237852e807bd9901f', - '0x8a93ba04f4e30064660670cb581d9aa10df78929', - ], - [Contexts.ReleaseCandidate]: [ - '0x8cc7dbfb5de339e4133f3af059c927ec383ace38', - ], - }, - 'solana', - ), - }, - nautilus: { - interval: 5, - reorgPeriod: chainMetadata.nautilus.blocks!.reorgPeriod!, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: [ - '0x9c920af9467595a23cb3433adefc3854d498a437', - '0x12b583ce1623b7de3fc727ccccda24dcab1fe022', - '0xc8b996a421ff1e203070c709c1af93944c049cc0', - ], - [Contexts.ReleaseCandidate]: [ - '0xdaf2e5ddaf2532753dc78bb6fbb0a10204c888c1', - ], - }, - 'nautilus', - ), - }, - }; -}; diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts new file mode 100644 index 0000000000..d2922ebc96 --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -0,0 +1,96 @@ +import { + GasPaymentEnforcementPolicyType, + RpcConsensusType, + chainMetadata, +} from '@hyperlane-xyz/sdk'; + +import { RootAgentConfig, allAgentChainNames } from '../../../src/config'; +import { GasPaymentEnforcementConfig } from '../../../src/config/agent/relayer'; +import { ALL_KEY_ROLES, Role } from '../../../src/roles'; +import { Contexts } from '../../contexts'; + +import { agentChainNames, environment } from './chains'; +import { validatorChainConfig } from './validators'; + +// const releaseCandidateHelloworldMatchingList = routerMatchingList( +// helloWorld[Contexts.ReleaseCandidate].addresses, +// ); + +const repo = 'gcr.io/abacus-labs-dev/hyperlane-agent'; + +const contextBase = { + namespace: environment, + runEnv: environment, + contextChainNames: agentChainNames, + environmentChainNames: allAgentChainNames(agentChainNames), + aws: { + region: 'us-east-1', + }, +} as const; + +const gasPaymentEnforcement: GasPaymentEnforcementConfig[] = [ + { + type: GasPaymentEnforcementPolicyType.OnChainFeeQuoting, + }, +]; + +const hyperlane: RootAgentConfig = { + ...contextBase, + context: Contexts.Hyperlane, + rolesWithKeys: ALL_KEY_ROLES, + relayer: { + rpcConsensusType: RpcConsensusType.Fallback, + docker: { + repo, + tag: '2e1db12-20231025-013013', + }, + gasPaymentEnforcement, + }, + validators: { + docker: { + repo, + tag: '2e1db12-20231025-013013', + }, + rpcConsensusType: RpcConsensusType.Quorum, + chains: validatorChainConfig(Contexts.Hyperlane), + }, + scraper: { + rpcConsensusType: RpcConsensusType.Fallback, + docker: { + repo, + tag: '2e1db12-20231025-013013', + }, + }, +}; + +const releaseCandidate: RootAgentConfig = { + ...contextBase, + context: Contexts.ReleaseCandidate, + rolesWithKeys: [Role.Relayer, Role.Kathy, Role.Validator], + relayer: { + rpcConsensusType: RpcConsensusType.Fallback, + docker: { + repo, + tag: '35fdc74-20230913-104940', + }, + // whitelist: releaseCandidateHelloworldMatchingList, + gasPaymentEnforcement, + transactionGasLimit: 750000, + // Skipping arbitrum because the gas price estimates are inclusive of L1 + // fees which leads to wildly off predictions. + skipTransactionGasLimitFor: [chainMetadata.arbitrum.name], + }, + validators: { + docker: { + repo, + tag: 'ed7569d-20230725-171222', + }, + rpcConsensusType: RpcConsensusType.Quorum, + chains: validatorChainConfig(Contexts.ReleaseCandidate), + }, +}; + +export const agents = { + [Contexts.Hyperlane]: hyperlane, + [Contexts.ReleaseCandidate]: releaseCandidate, +}; diff --git a/typescript/infra/config/environments/mainnet2/chains.ts b/typescript/infra/config/environments/mainnet3/chains.ts similarity index 83% rename from typescript/infra/config/environments/mainnet2/chains.ts rename to typescript/infra/config/environments/mainnet3/chains.ts index 4a38456d86..14465a19ce 100644 --- a/typescript/infra/config/environments/mainnet2/chains.ts +++ b/typescript/infra/config/environments/mainnet3/chains.ts @@ -10,6 +10,7 @@ export const ethereumMainnetConfigs: ChainMap = { }, }, avalanche: chainMetadata.avalanche, + base: chainMetadata.base, polygon: { ...chainMetadata.polygon, blocks: { @@ -22,6 +23,8 @@ export const ethereumMainnetConfigs: ChainMap = { // gasPrice: 50 * 10 ** 9, // 50 gwei }, }, + polygonzkevm: chainMetadata.polygonzkevm, + scroll: chainMetadata.scroll, celo: chainMetadata.celo, arbitrum: chainMetadata.arbitrum, optimism: chainMetadata.optimism, @@ -41,20 +44,20 @@ export const ethereumMainnetConfigs: ChainMap = { }; // Blessed non-Ethereum chains. -export const nonEthereumMainnetConfigs: ChainMap = { - solana: chainMetadata.solana, -}; +// export const nonEthereumMainnetConfigs: ChainMap = { +// solana: chainMetadata.solana, +// }; export const mainnetConfigs: ChainMap = { ...ethereumMainnetConfigs, - ...nonEthereumMainnetConfigs, + // ...nonEthereumMainnetConfigs, }; export type MainnetChains = keyof typeof mainnetConfigs; export const supportedChainNames = Object.keys( mainnetConfigs, ) as MainnetChains[]; -export const environment = 'mainnet2'; +export const environment = 'mainnet3'; export const ethereumChainNames = Object.keys( ethereumMainnetConfigs, @@ -62,8 +65,8 @@ export const ethereumChainNames = Object.keys( const validatorChainNames = [ ...supportedChainNames, - chainMetadata.solana.name, - chainMetadata.nautilus.name, + // chainMetadata.solana.name, + // chainMetadata.nautilus.name, ]; const relayerChainNames = validatorChainNames; diff --git a/typescript/infra/config/environments/mainnet2/core.ts b/typescript/infra/config/environments/mainnet3/core.ts similarity index 74% rename from typescript/infra/config/environments/mainnet2/core.ts rename to typescript/infra/config/environments/mainnet3/core.ts index 0ae945b568..3ecf7e28b8 100644 --- a/typescript/infra/config/environments/mainnet2/core.ts +++ b/typescript/infra/config/environments/mainnet3/core.ts @@ -18,21 +18,7 @@ import { igp } from './igp'; import { owners } from './owners'; export const core: ChainMap = objMap(owners, (local, owner) => { - const defaultIsm = routingIsm('mainnet2', local, Contexts.Hyperlane); - - let upgrade: CoreConfig['upgrade']; - if (local === 'arbitrum') { - upgrade = { - timelock: { - // 7 days in seconds - delay: 7 * 24 * 60 * 60, - roles: { - proposer: owner, - executor: owner, - }, - }, - }; - } + const defaultIsm = routingIsm('mainnet3', local, Contexts.Hyperlane); const merkleHook: MerkleTreeHookConfig = { type: HookType.MERKLE_TREE, @@ -51,7 +37,7 @@ export const core: ChainMap = objMap(owners, (local, owner) => { const requiredHook: ProtocolFeeHookConfig = { type: HookType.PROTOCOL_FEE, maxProtocolFee: ethers.utils.parseUnits('1', 'gwei'), // 1 gwei of native token - protocolFee: BigNumber.from(1), // 1 wei + protocolFee: BigNumber.from(0), // 0 wei beneficiary: owner, owner, }; diff --git a/typescript/infra/config/environments/mainnet3/core/verification.json b/typescript/infra/config/environments/mainnet3/core/verification.json new file mode 100644 index 0000000000..1f81718f07 --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/core/verification.json @@ -0,0 +1,1292 @@ +{ + "optimism": [ + { + "name": "Mailbox", + "address": "0xF00824861e4bFe5dFC769295A50006BA203BBc29", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000000a", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", + "constructorArguments": "000000000000000000000000f00824861e4bfe5dfc769295a50006ba203bbc29000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x30f5b08e01808643221528BB2f7953bf2830Ef38", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xF00824861e4bFe5dFC769295A50006BA203BBc29", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000000a", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", + "constructorArguments": "000000000000000000000000f00824861e4bfe5dfc769295a50006ba203bbc29000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x30f5b08e01808643221528BB2f7953bf2830Ef38", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + } + ], + "arbitrum": [ + { + "name": "Mailbox", + "address": "0x4826ce713944D8B3Eb98c73050bfc01e8fB6655A", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a4b1", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9", + "constructorArguments": "0000000000000000000000004826ce713944d8b3eb98c73050bfc01e8fb6655a00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x748040afB89B8FdBb992799808215419d36A0930", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfe181073f24A4fB69Ece1B3F6CCC9408157f96EB", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "constructorArguments": "000000000000000000000000fe181073f24a4fb69ece1b3f6ccc9408157f96eb00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x748040afB89B8FdBb992799808215419d36A0930", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfe181073f24A4fB69Ece1B3F6CCC9408157f96EB", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "constructorArguments": "000000000000000000000000fe181073f24a4fb69ece1b3f6ccc9408157f96eb00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xD0199067DACb8526e7dc524a9a7DCBb57Cd25421", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x1df063280C4166AF9a725e3828b4dAC6c7113B08", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x4826ce713944D8B3Eb98c73050bfc01e8fB6655A", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a4b1", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9", + "constructorArguments": "0000000000000000000000004826ce713944d8b3eb98c73050bfc01e8fb6655a00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x748040afB89B8FdBb992799808215419d36A0930", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfe181073f24A4fB69Ece1B3F6CCC9408157f96EB", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "constructorArguments": "000000000000000000000000fe181073f24a4fb69ece1b3f6ccc9408157f96eb00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x748040afB89B8FdBb992799808215419d36A0930", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfe181073f24A4fB69Ece1B3F6CCC9408157f96EB", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "constructorArguments": "000000000000000000000000fe181073f24a4fb69ece1b3f6ccc9408157f96eb00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xD0199067DACb8526e7dc524a9a7DCBb57Cd25421", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x1df063280C4166AF9a725e3828b4dAC6c7113B08", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + } + ], + "base": [ + { + "name": "ProxyAdmin", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000002105", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a70000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProxyAdmin", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000002105", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a70000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfDc940D5c148bA038505DAa5524730644527229a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "constructorArguments": "000000000000000000000000fdc940d5c148ba038505daa5524730644527229a0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfDc940D5c148bA038505DAa5524730644527229a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "constructorArguments": "000000000000000000000000fdc940d5c148ba038505daa5524730644527229a0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x99ca8c74cE7Cfa9d72A51fbb05F9821f5f826b3a", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x182E8d7c5F1B06201b102123FC7dF0EaeB445a7B", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", + "isProxy": false + } + ], + "avalanche": [ + { + "name": "Mailbox", + "address": "0xac6DfcAc1B0ED0dbe0e4836a1158263a24e8D896", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a86a", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6", + "constructorArguments": "000000000000000000000000ac6dfcac1b0ed0dbe0e4836a1158263a24e8d896000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x0FE58030a50ef83A02185a1cCc74acFA47E3df1a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "constructorArguments": "0000000000000000000000000fe58030a50ef83a02185a1ccc74acfa47e3df1a000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x0FE58030a50ef83A02185a1cCc74acFA47E3df1a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "constructorArguments": "0000000000000000000000000fe58030a50ef83a02185a1ccc74acfa47e3df1a000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xEc4AdA26E51f2685279F37C8aE62BeAd8212D597", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x9Cad0eC82328CEE2386Ec14a12E81d070a27712f", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xac6DfcAc1B0ED0dbe0e4836a1158263a24e8D896", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a86a", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6", + "constructorArguments": "000000000000000000000000ac6dfcac1b0ed0dbe0e4836a1158263a24e8d896000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x0FE58030a50ef83A02185a1cCc74acFA47E3df1a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "constructorArguments": "0000000000000000000000000fe58030a50ef83a02185a1ccc74acfa47e3df1a000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x0FE58030a50ef83A02185a1cCc74acFA47E3df1a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "constructorArguments": "0000000000000000000000000fe58030a50ef83a02185a1ccc74acfa47e3df1a000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xEc4AdA26E51f2685279F37C8aE62BeAd8212D597", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x9Cad0eC82328CEE2386Ec14a12E81d070a27712f", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + } + ], + "scroll": [ + { + "name": "ProxyAdmin", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000082750", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000082750", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + } + ], + "polygonzkevm": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000044d", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000044d", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + } + ], + "bsc": [ + { + "name": "Mailbox", + "address": "0xBFA300164A04437D64Afda390736e6DC45096da1", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000038", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4", + "constructorArguments": "000000000000000000000000bfa300164a04437d64afda390736e6dc45096da100000000000000000000000065993af9d0d3a64ec77590db7ba362d6eb78ef7000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xBFA300164A04437D64Afda390736e6DC45096da1", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000038", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4", + "constructorArguments": "000000000000000000000000bfa300164a04437d64afda390736e6dc45096da100000000000000000000000065993af9d0d3a64ec77590db7ba362d6eb78ef7000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xA8Aa5f14a5463a78E45CC068F11c867949F3E367", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x7024078130D9c2100fEA474DAD009C2d1703aCcd", + "constructorArguments": "0000000000000000000000002971b9aec44be4eb673df1b88cdb57b96eefe8a4", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xA8Aa5f14a5463a78E45CC068F11c867949F3E367", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x7024078130D9c2100fEA474DAD009C2d1703aCcd", + "constructorArguments": "0000000000000000000000002971b9aec44be4eb673df1b88cdb57b96eefe8a4", + "isProxy": false + } + ], + "gnosis": [ + { + "name": "Mailbox", + "address": "0x53642476e24E28c3218E8Da44eDEBB4adB9DE13e", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000064", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", + "constructorArguments": "00000000000000000000000053642476e24e28c3218e8da44edebb4adb9de13e00000000000000000000000081a92a1a272cb09d7b4970b07548463dc7ae0cb700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0x53642476e24E28c3218E8Da44eDEBB4adB9DE13e", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000064", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", + "constructorArguments": "00000000000000000000000053642476e24e28c3218e8da44edebb4adb9de13e00000000000000000000000081a92a1a272cb09d7b4970b07548463dc7ae0cb700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x87ED6926abc9E38b9C7C19f835B41943b622663c", + "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f", + "isProxy": false + } + ], + "celo": [ + { + "name": "Mailbox", + "address": "0x0564ECF87C9Be194BbCDB8BC606132b163F76DeD", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a4ec", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb", + "constructorArguments": "0000000000000000000000000564ecf87c9be194bbcdb8bc606132b163f76ded00000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x819b9E7D55E2E679d02d023559cB9d583F427078", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "constructorArguments": "000000000000000000000000819b9e7d55e2e679d02d023559cb9d583f42707800000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x819b9E7D55E2E679d02d023559cB9d583F427078", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "constructorArguments": "000000000000000000000000819b9e7d55e2e679d02d023559cb9d583f42707800000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x89886d431f9c3eEE64DCD6dAbA3f7D689D98D899", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xCeF677b65FDaA6804d4403083bb12B8dB3991FE1", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x0564ECF87C9Be194BbCDB8BC606132b163F76DeD", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a4ec", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb", + "constructorArguments": "0000000000000000000000000564ecf87c9be194bbcdb8bc606132b163f76ded00000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x819b9E7D55E2E679d02d023559cB9d583F427078", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "constructorArguments": "000000000000000000000000819b9e7d55e2e679d02d023559cb9d583f42707800000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x819b9E7D55E2E679d02d023559cB9d583F427078", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "constructorArguments": "000000000000000000000000819b9e7d55e2e679d02d023559cb9d583f42707800000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x89886d431f9c3eEE64DCD6dAbA3f7D689D98D899", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xCeF677b65FDaA6804d4403083bb12B8dB3991FE1", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + } + ], + "ethereum": [ + { + "name": "Mailbox", + "address": "0x7b4D881c122a5e61adCFfb56A2e3CE9927D53455", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000001", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xc005dc82818d67AF737725bD4bf75435d065D239", + "constructorArguments": "0000000000000000000000007b4d881c122a5e61adcffb56a2e3ce9927d5345500000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x1008FAbD07aBd93a7D9bB81803a89cC3a834E1A9", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "constructorArguments": "0000000000000000000000001008fabd07abd93a7d9bb81803a89cc3a834e1a900000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x1008FAbD07aBd93a7D9bB81803a89cC3a834E1A9", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "constructorArguments": "0000000000000000000000001008fabd07abd93a7d9bb81803a89cc3a834e1a900000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x8B05BF30F6247a90006c5837eA63C7905D79e6d8", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xCe74905e51497b4adD3639366708b821dcBcff96", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x7b4D881c122a5e61adCFfb56A2e3CE9927D53455", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000001", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xc005dc82818d67AF737725bD4bf75435d065D239", + "constructorArguments": "0000000000000000000000007b4d881c122a5e61adcffb56a2e3ce9927d5345500000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x1008FAbD07aBd93a7D9bB81803a89cC3a834E1A9", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "constructorArguments": "0000000000000000000000001008fabd07abd93a7d9bb81803a89cc3a834e1a900000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x1008FAbD07aBd93a7D9bB81803a89cC3a834E1A9", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "constructorArguments": "0000000000000000000000001008fabd07abd93a7d9bb81803a89cc3a834e1a900000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x8B05BF30F6247a90006c5837eA63C7905D79e6d8", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xCe74905e51497b4adD3639366708b821dcBcff96", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + } + ], + "moonbeam": [ + { + "name": "Mailbox", + "address": "0xeE064c4Dd3d476676a40b7cab94Ef651444175c0", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000504", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", + "constructorArguments": "000000000000000000000000ee064c4dd3d476676a40b7cab94ef651444175c00000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xeE064c4Dd3d476676a40b7cab94Ef651444175c0", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000504", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", + "constructorArguments": "000000000000000000000000ee064c4dd3d476676a40b7cab94ef651444175c00000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + } + ], + "polygon": [ + { + "name": "Mailbox", + "address": "0xA3Ae1C7dBAc1C9658708E6aCD271bfB93d87f8A3", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000089", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", + "constructorArguments": "000000000000000000000000a3ae1c7dbac1c9658708e6acd271bfb93d87f8a3000000000000000000000000c4f7590c5d30be959225dc75640657954a86b98000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xA3Ae1C7dBAc1C9658708E6aCD271bfB93d87f8A3", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000089", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", + "constructorArguments": "000000000000000000000000a3ae1c7dbac1c9658708e6acd271bfb93d87f8a3000000000000000000000000c4f7590c5d30be959225dc75640657954a86b98000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xF8F3629e308b4758F8396606405989F8D8C9c578", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5", + "constructorArguments": "0000000000000000000000005d934f4e2f797775e53561bb72aca21ba36b96bb", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xF8F3629e308b4758F8396606405989F8D8C9c578", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5", + "constructorArguments": "0000000000000000000000005d934f4e2f797775e53561bb72aca21ba36b96bb", + "isProxy": false + } + ] +} diff --git a/typescript/infra/config/environments/mainnet2/create2/addresses.json b/typescript/infra/config/environments/mainnet3/create2/addresses.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/create2/addresses.json rename to typescript/infra/config/environments/mainnet3/create2/addresses.json diff --git a/typescript/infra/config/environments/mainnet2/create2/verification.json b/typescript/infra/config/environments/mainnet3/create2/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/create2/verification.json rename to typescript/infra/config/environments/mainnet3/create2/verification.json diff --git a/typescript/infra/config/environments/mainnet2/funding.ts b/typescript/infra/config/environments/mainnet3/funding.ts similarity index 89% rename from typescript/infra/config/environments/mainnet2/funding.ts rename to typescript/infra/config/environments/mainnet3/funding.ts index 4cd4d2a93d..eeb834569e 100644 --- a/typescript/infra/config/environments/mainnet2/funding.ts +++ b/typescript/infra/config/environments/mainnet3/funding.ts @@ -9,7 +9,7 @@ import { environment } from './chains'; export const keyFunderConfig: KeyFunderConfig = { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '9a8d85c-20231013-213905', + tag: '4a3e6ee-20231025-192258', }, // We're currently using the same deployer key as mainnet. // To minimize nonce clobbering we offset the key funder cron @@ -21,7 +21,7 @@ export const keyFunderConfig: KeyFunderConfig = { contextFundingFrom: Contexts.Hyperlane, contextsAndRolesToFund: { [Contexts.Hyperlane]: [Role.Relayer, Role.Kathy], - [Contexts.ReleaseCandidate]: [Role.Relayer, Role.Kathy], + // [Contexts.ReleaseCandidate]: [Role.Relayer, Role.Kathy], }, connectionType: RpcConsensusType.Single, }; diff --git a/typescript/infra/config/environments/mainnet2/gas-oracle.ts b/typescript/infra/config/environments/mainnet3/gas-oracle.ts similarity index 87% rename from typescript/infra/config/environments/mainnet2/gas-oracle.ts rename to typescript/infra/config/environments/mainnet3/gas-oracle.ts index 7e98342a37..c3dc53ec6d 100644 --- a/typescript/infra/config/environments/mainnet2/gas-oracle.ts +++ b/typescript/infra/config/environments/mainnet3/gas-oracle.ts @@ -45,6 +45,9 @@ const gasPrices: ChainMap = { // Arbitrarily chosen as gas prices aren't really a thing // in Solana. solana: ethers.BigNumber.from('28'), + base: ethers.utils.parseUnits('1', 'gwei'), + scroll: ethers.utils.parseUnits('1', 'gwei'), + polygonzkevm: ethers.utils.parseUnits('2', 'gwei'), }; // Accurate from coingecko as of Mar 9, 2023. @@ -71,6 +74,15 @@ const tokenUsdPrices: ChainMap = { gnosis: ethers.utils.parseUnits('1.00', TOKEN_EXCHANGE_RATE_DECIMALS), // https://www.coingecko.com/en/coins/solana solana: ethers.utils.parseUnits('18.85', TOKEN_EXCHANGE_RATE_DECIMALS), + // https://www.coingecko.com/en/coins/ethereum + base: ethers.utils.parseUnits('1619.00', TOKEN_EXCHANGE_RATE_DECIMALS), + // https://www.coingecko.com/en/coins/ethereum + scroll: ethers.utils.parseUnits('1619.00', TOKEN_EXCHANGE_RATE_DECIMALS), + // https://www.coingecko.com/en/coins/ethereum + polygonzkevm: ethers.utils.parseUnits( + '1619.00', + TOKEN_EXCHANGE_RATE_DECIMALS, + ), }; // Gets the exchange rate of the remote quoted in local tokens diff --git a/typescript/infra/config/environments/mainnet2/helloworld.ts b/typescript/infra/config/environments/mainnet3/helloworld.ts similarity index 92% rename from typescript/infra/config/environments/mainnet2/helloworld.ts rename to typescript/infra/config/environments/mainnet3/helloworld.ts index 467004e47b..4f0fdde31a 100644 --- a/typescript/infra/config/environments/mainnet2/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: '9a8d85c-20231013-213905', + tag: 'bbe8928-20231025-215311', }, chainsToSkip: [], runEnv: environment, @@ -34,7 +34,7 @@ export const releaseCandidate: HelloWorldConfig = { kathy: { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '9a8d85c-20231013-213905', + tag: 'bef2251-20231025-174850', }, chainsToSkip: [], runEnv: environment, @@ -50,5 +50,5 @@ export const releaseCandidate: HelloWorldConfig = { export const helloWorld = { [Contexts.Hyperlane]: hyperlane, - [Contexts.ReleaseCandidate]: releaseCandidate, + // [Contexts.ReleaseCandidate]: releaseCandidate, }; diff --git a/typescript/infra/config/environments/mainnet3/helloworld/hyperlane/addresses.json b/typescript/infra/config/environments/mainnet3/helloworld/hyperlane/addresses.json new file mode 100644 index 0000000000..06547636b6 --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/helloworld/hyperlane/addresses.json @@ -0,0 +1,38 @@ +{ + "polygon": { + "router": "0x42ad84C5d2a90e574678958133B8a13CA9F44AAF" + }, + "bsc": { + "router": "0x22Fd11F93F0303346c9b9070cc67C4Bc7aB2dABB" + }, + "arbitrum": { + "router": "0xb2BFFD0248C7a0029860A29fD4Efe762a22f93Af" + }, + "optimism": { + "router": "0x3da5fDCcC661c84454f49dB0Cf519561BC7c2729" + }, + "moonbeam": { + "router": "0xE25d0D46a42a106Cdf4943262644DD5E26fa7bfF" + }, + "gnosis": { + "router": "0xA166219dF110BDA97b91e65D4BB4Aae4159978b9" + }, + "base": { + "router": "0x811808Dd29ba8B0FC6C0ec0b5537035E59745162" + }, + "scroll": { + "router": "0x0be2Ae2f6D02a3e0e00ECB57D3E1fCbb7f8F38F4" + }, + "polygonzkevm": { + "router": "0xaad207a0Fd7a4e3C927Ccc78ac8134baF586B852" + }, + "celo": { + "router": "0x10Add66Db9C837000A43F3601aa9c54c6744F4c8" + }, + "ethereum": { + "router": "0x7ff2bF58C38A41AD7C9CbC14e780e8a7EDBbd48D" + }, + "avalanche": { + "router": "0xd54fF402ADf0a7CBad9626B1261bF4bEB26A437a" + } +} diff --git a/typescript/infra/config/environments/mainnet2/helloworld/hyperlane/verification.json b/typescript/infra/config/environments/mainnet3/helloworld/hyperlane/verification.json similarity index 61% rename from typescript/infra/config/environments/mainnet2/helloworld/hyperlane/verification.json rename to typescript/infra/config/environments/mainnet3/helloworld/hyperlane/verification.json index 5dad6c7be7..8df25db64d 100644 --- a/typescript/infra/config/environments/mainnet2/helloworld/hyperlane/verification.json +++ b/typescript/infra/config/environments/mainnet3/helloworld/hyperlane/verification.json @@ -11,6 +11,12 @@ "address": "0xB97d3bF2fC296c2cAC4056bBC8A783ff39408e20", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0x22Fd11F93F0303346c9b9070cc67C4Bc7aB2dABB", + "constructorArguments": "0000000000000000000000002971b9aec44be4eb673df1b88cdb57b96eefe8a40000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "avalanche": [ @@ -25,6 +31,12 @@ "address": "0x2A925CD8a5d919c5c6599633090c37fe38A561b6", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0xd54fF402ADf0a7CBad9626B1261bF4bEB26A437a", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd60000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "polygon": [ @@ -39,6 +51,12 @@ "address": "0x6c0aC8cEA75232aa7BeD8cbe9C4f820E7a77a9C3", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0x42ad84C5d2a90e574678958133B8a13CA9F44AAF", + "constructorArguments": "0000000000000000000000005d934f4e2f797775e53561bb72aca21ba36b96bb0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "celo": [ @@ -53,6 +71,12 @@ "address": "0x4151773Db70C0b2D4c43Ea44A5FB5803ff1d3e0B", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0x10Add66Db9C837000A43F3601aa9c54c6744F4c8", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "arbitrum": [ @@ -67,6 +91,12 @@ "address": "0x96271cA0ab9eeFB3Ca481749c0Ca4c705fD4F523", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0xb2BFFD0248C7a0029860A29fD4Efe762a22f93Af", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb90000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "optimism": [ @@ -81,6 +111,12 @@ "address": "0xA6f0A37DFDe9C2c8F46F010989C47d9edB3a9FA8", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0x3da5fDCcC661c84454f49dB0Cf519561BC7c2729", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "ethereum": [ @@ -95,6 +131,12 @@ "address": "0x9311cEE522A7C122B843b66cC31C6a63e2F92641", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0x7ff2bF58C38A41AD7C9CbC14e780e8a7EDBbd48D", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d2390000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "moonbeam": [ @@ -109,6 +151,12 @@ "address": "0xAe067C08703508230357025B38c35Cd12793628c", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0xE25d0D46a42a106Cdf4943262644DD5E26fa7bfF", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc30000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "gnosis": [ @@ -129,6 +177,36 @@ "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0xA166219dF110BDA97b91e65D4BB4Aae4159978b9", + "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + } + ], + "base": [ + { + "name": "Router", + "address": "0x811808Dd29ba8B0FC6C0ec0b5537035E59745162", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + } + ], + "scroll": [ + { + "name": "Router", + "address": "0x0be2Ae2f6D02a3e0e00ECB57D3E1fCbb7f8F38F4", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a70000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + } + ], + "polygonzkevm": [ + { + "name": "Router", + "address": "0xaad207a0Fd7a4e3C927Ccc78ac8134baF586B852", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ] } diff --git a/typescript/infra/config/environments/mainnet3/helloworld/rc/addresses.json b/typescript/infra/config/environments/mainnet3/helloworld/rc/addresses.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/helloworld/rc/addresses.json @@ -0,0 +1 @@ +{} diff --git a/typescript/infra/config/environments/mainnet2/helloworld/rc/verification.json b/typescript/infra/config/environments/mainnet3/helloworld/rc/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/helloworld/rc/verification.json rename to typescript/infra/config/environments/mainnet3/helloworld/rc/verification.json diff --git a/typescript/infra/config/environments/mainnet2/igp.ts b/typescript/infra/config/environments/mainnet3/igp.ts similarity index 100% rename from typescript/infra/config/environments/mainnet2/igp.ts rename to typescript/infra/config/environments/mainnet3/igp.ts diff --git a/typescript/infra/config/environments/mainnet2/index.ts b/typescript/infra/config/environments/mainnet3/index.ts similarity index 100% rename from typescript/infra/config/environments/mainnet2/index.ts rename to typescript/infra/config/environments/mainnet3/index.ts diff --git a/typescript/infra/config/environments/mainnet2/infrastructure.ts b/typescript/infra/config/environments/mainnet3/infrastructure.ts similarity index 90% rename from typescript/infra/config/environments/mainnet2/infrastructure.ts rename to typescript/infra/config/environments/mainnet3/infrastructure.ts index badf6c7222..c0d562f91b 100644 --- a/typescript/infra/config/environments/mainnet2/infrastructure.ts +++ b/typescript/infra/config/environments/mainnet3/infrastructure.ts @@ -33,9 +33,14 @@ export const infrastructure: InfrastructureConfig = { }, gcpServiceAccountName: 'k8s-external-secrets-mainnet2', accessibleGCPSecretPrefixes: [ + 'hyperlane-mainnet-', + 'mainnet-', 'hyperlane-mainnet2-', 'rc-mainnet2-', 'mainnet2-', + 'hyperlane-mainnet3-', + 'rc-mainnet3-', + 'mainnet3-', ], }, }; diff --git a/typescript/infra/config/environments/mainnet3/ism/verification.json b/typescript/infra/config/environments/mainnet3/ism/verification.json new file mode 100644 index 0000000000..783d89e8ac --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/ism/verification.json @@ -0,0 +1,1430 @@ +{ + "celo": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x4C96a1abc44dc846775CE702C9E9BE821D3b487c", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x7F6cD932412508E9a8297CA626C56Ed3D279937F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0xaB402f227e892Ef37C105bf06619c0fa106a1fB2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xf422a4Af27e5fbDDAf799A1d92532Edd5dE58fF3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x1722dd970a1F56040712129f5Eeb76B003fd7500", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x43379b54E27EA8387B34B5c15534E230d490f0A8", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0xc3745652EFB8555A8b064A0EA78d295133d326D2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x8d9dB8bbF91d7852F36a954229BDf6ec69A3ae00", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xec748b5623f0B50E4c5eB1CFa7Bd46C3213608b6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0xe6a4646EE138e282A36c0665Ad028ccdC3E525E2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x7F6cD932412508E9a8297CA626C56Ed3D279937F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xf422a4Af27e5fbDDAf799A1d92532Edd5dE58fF3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x43379b54E27EA8387B34B5c15534E230d490f0A8", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x8d9dB8bbF91d7852F36a954229BDf6ec69A3ae00", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0xe6a4646EE138e282A36c0665Ad028ccdC3E525E2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x7F6cD932412508E9a8297CA626C56Ed3D279937F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xf422a4Af27e5fbDDAf799A1d92532Edd5dE58fF3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x43379b54E27EA8387B34B5c15534E230d490f0A8", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x8d9dB8bbF91d7852F36a954229BDf6ec69A3ae00", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0xe6a4646EE138e282A36c0665Ad028ccdC3E525E2", + "constructorArguments": "", + "isProxy": true + } + ], + "ethereum": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x47e8aF9e30C32Ab91060ED587894288786761B45", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xD4dAcca08737d2a910b4Ad401f805F83D0C170f3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0xfA21D9628ADce86531854C2B7ef00F07394B0B69", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x5371942D3Ed75b10d77F0f4184dDc85cC35A1420", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x46FA191Ad972D9674Ed752B69f9659A0d7b22846", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0xc2cCfc65D2D5719E78a77EA5f6C10AA4cdEC6719", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x6D2555A8ba483CcF4409C39013F5e9a3285D3C9E", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x03862793C0EE59af3e475f7Ca67406b547FfD95c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xCb74c6aE411236CEE6803619916694BE86cF5987", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x65f02B4fB2F0ccAb58955e4b816EebD4DFCbBaFf", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xD4dAcca08737d2a910b4Ad401f805F83D0C170f3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x5371942D3Ed75b10d77F0f4184dDc85cC35A1420", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xc2cCfc65D2D5719E78a77EA5f6C10AA4cdEC6719", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x03862793C0EE59af3e475f7Ca67406b547FfD95c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x65f02B4fB2F0ccAb58955e4b816EebD4DFCbBaFf", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xD4dAcca08737d2a910b4Ad401f805F83D0C170f3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x5371942D3Ed75b10d77F0f4184dDc85cC35A1420", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xc2cCfc65D2D5719E78a77EA5f6C10AA4cdEC6719", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x03862793C0EE59af3e475f7Ca67406b547FfD95c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x65f02B4fB2F0ccAb58955e4b816EebD4DFCbBaFf", + "constructorArguments": "", + "isProxy": true + } + ], + "avalanche": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x896cF1D1B66cD211633eDd589fF158E8Cfaf9B54", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x06b9dC1a6629122e7188698d20A92edbE966914f", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x8819D653DF5b1FC0DdB32189a2704E471AF8483c", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xeD8F4199e4409FDAe2AfD50dC7571f6771AadE50", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0xa5E13796eB7d2EDCc88012c8cfF90D69B51FcF9f", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x86Bb7AC2BF6044289aEAFFC421b118E38C995c5a", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x3bF6Ac986C7Af9A9Ac356C0e99C0041EFd8D96e7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x3988b98C43C7A1f7C9D3edce6CeAD3b8a3F3d969", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xA9Ddc70f50009aF8bDB312aA757B4304b0F7BbB3", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x61ca653A1F61A69E6498c45874237C4f1D8fC645", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x06b9dC1a6629122e7188698d20A92edbE966914f", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xeD8F4199e4409FDAe2AfD50dC7571f6771AadE50", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x86Bb7AC2BF6044289aEAFFC421b118E38C995c5a", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x3988b98C43C7A1f7C9D3edce6CeAD3b8a3F3d969", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x61ca653A1F61A69E6498c45874237C4f1D8fC645", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x06b9dC1a6629122e7188698d20A92edbE966914f", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xeD8F4199e4409FDAe2AfD50dC7571f6771AadE50", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x86Bb7AC2BF6044289aEAFFC421b118E38C995c5a", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x3988b98C43C7A1f7C9D3edce6CeAD3b8a3F3d969", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x61ca653A1F61A69E6498c45874237C4f1D8fC645", + "constructorArguments": "", + "isProxy": true + } + ], + "polygon": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0xa9E0E18E78b098c2DE36c42E4DDEA13ce214c592", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x14CEa5Df89Fa709409e83ebEA9518C5B6fb4B19B", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0xEa5Be2AD66BB1BA321B7aCf0A079fBE304B09Ca0", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x370815EdA08438c8F385a6f7AB5A2Dfa75008abC", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x81AdDD9Ca89105063DaDEBd5B4408551Ce850E22", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0xCC38436BFB9B9888be96b59d825E0fE5DC19e05c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0xFeeB86e70e4a640cDd29636CCE19BD6fe8628135", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x5B8418082D87c96B7De689D0368756cddAbB35F5", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xF0752A65ffB2153EaE53F6a70c858a87022d5c56", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x42cCAacf2666E92114F649b578056eDCeBdA8ba7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x14CEa5Df89Fa709409e83ebEA9518C5B6fb4B19B", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x370815EdA08438c8F385a6f7AB5A2Dfa75008abC", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xCC38436BFB9B9888be96b59d825E0fE5DC19e05c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x5B8418082D87c96B7De689D0368756cddAbB35F5", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x42cCAacf2666E92114F649b578056eDCeBdA8ba7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x14CEa5Df89Fa709409e83ebEA9518C5B6fb4B19B", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x370815EdA08438c8F385a6f7AB5A2Dfa75008abC", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xCC38436BFB9B9888be96b59d825E0fE5DC19e05c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x5B8418082D87c96B7De689D0368756cddAbB35F5", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x42cCAacf2666E92114F649b578056eDCeBdA8ba7", + "constructorArguments": "", + "isProxy": true + } + ], + "bsc": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0xfADBc81Ca8A957F1Bf7c78bCc575b28DBDE042b6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xDc3D51c58BDb84F4F209d2684151dfCa271e504f", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x4B1d8352E35e3BDE36dF5ED2e73C24E35c4a96b7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x707609419b70DCb4C41Ef185d3C184814c61Af9c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x38B3878c4fb44d201DA924c4a04bae3EE728c065", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x769FeC9f1a1e3DD1891015A387C92Ee9631CB0bA", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xDc3D51c58BDb84F4F209d2684151dfCa271e504f", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x707609419b70DCb4C41Ef185d3C184814c61Af9c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x769FeC9f1a1e3DD1891015A387C92Ee9631CB0bA", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0xe70E86a7D1e001D419D71F960Cb6CaD59b6A3dB6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0xf771dA1B909B67ca41dda9133E1C9934B5A2D8bb", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xc40481D13419BC8090e6AD07074Ef39E538c09CE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x4EFFb1d1B817c0D2823729b343ac079431182eE2", + "constructorArguments": "", + "isProxy": true + } + ], + "optimism": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0xCA6Cb9Bc3cfF9E11003A06617cF934B684Bc78BC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xC91A3282FE1eBc29AE494f10680006f152DcE316", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0xAa4Be20E9957fE21602c74d7C3cF5CB1112EA9Ef", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xb61544De4d3A103698AC57Fd62402627B8AC3cC2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x7491843F3A5Ba24E0f17a22645bDa04A1Ae2c584", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0xD416cF29F961c090e9b9b8aF0970c86D93c2Ff61", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x15DEeAB8dECDe553bb0B1F9C00984cbcae1af3D7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x315d8B4229134Fcb12B8955f0B5FC1310E56E764", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0x89E3530137aD51743536443a3EC838b502E72eb7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x35E536a6465632d2De568F0f22c514EfEE38aEA5", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xC91A3282FE1eBc29AE494f10680006f152DcE316", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xb61544De4d3A103698AC57Fd62402627B8AC3cC2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xD416cF29F961c090e9b9b8aF0970c86D93c2Ff61", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x315d8B4229134Fcb12B8955f0B5FC1310E56E764", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x35E536a6465632d2De568F0f22c514EfEE38aEA5", + "constructorArguments": "", + "isProxy": true + } + ], + "arbitrum": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x3C330D4A2e2b8443AFaB8E326E64ab4251B7Eae0", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xEbA276cdC61D4BC954E80985aC8FD71453fDab8e", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x12Df53079d399a47e9E730df095b712B0FDFA791", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xfD122f59ee8073528Cc5d36D5cc1451Bf1aF6923", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0xD4883084389fC1Eeb4dAfB2ADcFc36B711c310EB", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0xBbc6e404F8d841560261b036cA3468B55CB9f566", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x9B5f440bBb64Fee337F37e03362b628711Ea09C7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x97c5dC51adAa04B3BefE63F4e62e4778219D9426", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xC020F8A7b00178dFA0fcC75C159e14b79F8e5c63", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0xc0Ce143F44ADc65d35fB0d24436Eaa953380dF97", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xEbA276cdC61D4BC954E80985aC8FD71453fDab8e", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xfD122f59ee8073528Cc5d36D5cc1451Bf1aF6923", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xBbc6e404F8d841560261b036cA3468B55CB9f566", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x97c5dC51adAa04B3BefE63F4e62e4778219D9426", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0xc0Ce143F44ADc65d35fB0d24436Eaa953380dF97", + "constructorArguments": "", + "isProxy": true + } + ], + "scroll": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + } + ], + "base": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + } + ], + "polygonzkevm": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } + ], + "gnosis": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x8E273260EAd8B72A085B19346A676d355740e875", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xe46CDa25130A89759F1Da00591D7a920CAe7667E", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x603f46cc520d2fc22957b81e206408590808F02F", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xEeBd8F72573C5a08F18BeC0DbadCCD3365c06AEF", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x11EF91d17c5ad3330DbCa709a8841743d3Af6819", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x5aaF70a9944d2D7cf17153ea07632618b1e45C6F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0xbC8AA096dabDf4A0200BB9f8D4Cbb644C3D86d7B", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x72AffdEd251dF55c7c89566c64B9961dbc3e7A23", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xe522A5DcA58e3ab7fEd2bf25DA3E8d90c14083a8", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x9E60F82fF6b9BfCd3C10A562155E17448458D290", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xe46CDa25130A89759F1Da00591D7a920CAe7667E", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xEeBd8F72573C5a08F18BeC0DbadCCD3365c06AEF", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x5aaF70a9944d2D7cf17153ea07632618b1e45C6F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x72AffdEd251dF55c7c89566c64B9961dbc3e7A23", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x9E60F82fF6b9BfCd3C10A562155E17448458D290", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xe46CDa25130A89759F1Da00591D7a920CAe7667E", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xEeBd8F72573C5a08F18BeC0DbadCCD3365c06AEF", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x5aaF70a9944d2D7cf17153ea07632618b1e45C6F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x72AffdEd251dF55c7c89566c64B9961dbc3e7A23", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xe46CDa25130A89759F1Da00591D7a920CAe7667E", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xEeBd8F72573C5a08F18BeC0DbadCCD3365c06AEF", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x5aaF70a9944d2D7cf17153ea07632618b1e45C6F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x72AffdEd251dF55c7c89566c64B9961dbc3e7A23", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x28846fCb579747E8ddad9E93b55BE51b0A1Bf1f3", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x71AB2390e4eF4A8AF685aE11AAd974AC3E8eF85D", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x8528bAa7d1d386E7967603e480fa2B558a23644c", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x28846fCb579747E8ddad9E93b55BE51b0A1Bf1f3", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x71AB2390e4eF4A8AF685aE11AAd974AC3E8eF85D", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x8528bAa7d1d386E7967603e480fa2B558a23644c", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xe46CDa25130A89759F1Da00591D7a920CAe7667E", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xEeBd8F72573C5a08F18BeC0DbadCCD3365c06AEF", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x5aaF70a9944d2D7cf17153ea07632618b1e45C6F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x72AffdEd251dF55c7c89566c64B9961dbc3e7A23", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0xc4c11C88AbF6087150273b2c39B27878d137a920", + "constructorArguments": "", + "isProxy": true + } + ], + "moonbeam": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0xE2f485bc031Feb5a4C41C1967bf028653d75f0C3", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x28336d2b8783f2373bCFc173058EA932bf3b901C", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x84Df48F8f241f11d0fA302d09d73030429Bd9C73", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x76FD8c164F380107631160d8Fd1f4Edc2719004D", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x40c6Abcb6A2CdC8882d4bEcaC47927005c7Bb8c2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0xd5FF00DD9E737c9d1a197246738876fAF43e4aC0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x59cC3E7A49DdC4893eB8754c7908f96072A7DbE8", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x568De5f1639Fe7c9eba67f1191DE19eeCc77985B", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0x98Aa6239FfCcEc73A662a5e5e26Bc3fD7c7291B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0xE8d610DC4Baf01070FD2f223d45f84d8801D90B1", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x28336d2b8783f2373bCFc173058EA932bf3b901C", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x76FD8c164F380107631160d8Fd1f4Edc2719004D", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xd5FF00DD9E737c9d1a197246738876fAF43e4aC0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x568De5f1639Fe7c9eba67f1191DE19eeCc77985B", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0xE8d610DC4Baf01070FD2f223d45f84d8801D90B1", + "constructorArguments": "", + "isProxy": true + } + ] +} diff --git a/typescript/infra/config/environments/mainnet2/liquidityLayer.ts b/typescript/infra/config/environments/mainnet3/liquidityLayer.ts similarity index 100% rename from typescript/infra/config/environments/mainnet2/liquidityLayer.ts rename to typescript/infra/config/environments/mainnet3/liquidityLayer.ts diff --git a/typescript/infra/config/environments/mainnet2/middleware/accounts/verification.json b/typescript/infra/config/environments/mainnet3/middleware/accounts/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/middleware/accounts/verification.json rename to typescript/infra/config/environments/mainnet3/middleware/accounts/verification.json diff --git a/typescript/infra/config/environments/mainnet2/middleware/liquidity-layer/addresses.json b/typescript/infra/config/environments/mainnet3/middleware/liquidity-layer/addresses.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/middleware/liquidity-layer/addresses.json rename to typescript/infra/config/environments/mainnet3/middleware/liquidity-layer/addresses.json diff --git a/typescript/infra/config/environments/mainnet2/middleware/liquidity-layer/verification.json b/typescript/infra/config/environments/mainnet3/middleware/liquidity-layer/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/middleware/liquidity-layer/verification.json rename to typescript/infra/config/environments/mainnet3/middleware/liquidity-layer/verification.json diff --git a/typescript/infra/config/environments/mainnet2/middleware/queries/verification.json b/typescript/infra/config/environments/mainnet3/middleware/queries/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/middleware/queries/verification.json rename to typescript/infra/config/environments/mainnet3/middleware/queries/verification.json diff --git a/typescript/infra/config/environments/mainnet2/owners.ts b/typescript/infra/config/environments/mainnet3/owners.ts similarity index 56% rename from typescript/infra/config/environments/mainnet2/owners.ts rename to typescript/infra/config/environments/mainnet3/owners.ts index b900b75075..1b5e0712d4 100644 --- a/typescript/infra/config/environments/mainnet2/owners.ts +++ b/typescript/infra/config/environments/mainnet3/owners.ts @@ -1,7 +1,7 @@ import { ChainMap } from '@hyperlane-xyz/sdk'; -import { Address } from '@hyperlane-xyz/utils'; +import { Address, objMap } from '@hyperlane-xyz/utils'; -export const owners: ChainMap
= { +const safes: ChainMap
= { celo: '0x1DE69322B55AC7E0999F8e7738a1428C8b130E4d', ethereum: '0x12C5AB61Fe17dF9c65739DBa73dF294708f78d23', avalanche: '0xDF9B28B76877f1b1B4B8a11526Eb7D8D7C49f4f3', @@ -11,5 +11,15 @@ export const owners: ChainMap
= { optimism: '0xb523CFAf45AACF472859f8B793CB0BFDB16bD257', moonbeam: '0xF0cb1f968Df01fc789762fddBfA704AE0F952197', gnosis: '0x36b0AA0e7d04e7b825D7E409FEa3c9A3d57E4C22', - solana: 'EzppBFV2taxWw8kEjxNYvby6q7W1biJEqwP3iC7YgRe3', + // solana: 'EzppBFV2taxWw8kEjxNYvby6q7W1biJEqwP3iC7YgRe3', + // TODO: create gnosis safes here + base: '', + scroll: '', + polygonzkevm: '', }; + +// export const owners = safes; + +// temporarily keep ownership on deployer key +const deployer = '0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba'; +export const owners = objMap(safes, (_, __) => deployer); diff --git a/typescript/infra/config/environments/mainnet2/testquerysender/addresses.json b/typescript/infra/config/environments/mainnet3/testquerysender/addresses.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/testquerysender/addresses.json rename to typescript/infra/config/environments/mainnet3/testquerysender/addresses.json diff --git a/typescript/infra/config/environments/mainnet2/testquerysender/verification.json b/typescript/infra/config/environments/mainnet3/testquerysender/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/testquerysender/verification.json rename to typescript/infra/config/environments/mainnet3/testquerysender/verification.json diff --git a/typescript/infra/config/environments/mainnet2/testrecipient/addresses.json b/typescript/infra/config/environments/mainnet3/testrecipient/addresses.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/testrecipient/addresses.json rename to typescript/infra/config/environments/mainnet3/testrecipient/addresses.json diff --git a/typescript/infra/config/environments/mainnet2/testrecipient/verification.json b/typescript/infra/config/environments/mainnet3/testrecipient/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/testrecipient/verification.json rename to typescript/infra/config/environments/mainnet3/testrecipient/verification.json diff --git a/typescript/infra/config/environments/mainnet2/token-bridge.ts b/typescript/infra/config/environments/mainnet3/token-bridge.ts similarity index 100% rename from typescript/infra/config/environments/mainnet2/token-bridge.ts rename to typescript/infra/config/environments/mainnet3/token-bridge.ts diff --git a/typescript/infra/config/environments/mainnet3/validators.ts b/typescript/infra/config/environments/mainnet3/validators.ts new file mode 100644 index 0000000000..28d5e54fd6 --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/validators.ts @@ -0,0 +1,199 @@ +import { chainMetadata } from '@hyperlane-xyz/sdk'; + +import { ValidatorBaseChainConfigMap } from '../../../src/config/agent'; +import { Contexts } from '../../contexts'; +import { validatorBaseConfigsFn } from '../utils'; + +import { environment } from './chains'; + +export const validatorChainConfig = ( + context: Contexts, +): ValidatorBaseChainConfigMap => { + const validatorsConfig = validatorBaseConfigsFn(environment, context); + return { + celo: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x63478422679303c3e4fc611b771fa4a707ef7f4a', + '0x2f4e808744df049d8acc050628f7bdd8265807f9', + '0x7bf30afcb6a7d92146d5a910ea4c154fba38d25e', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'celo', + ), + }, + ethereum: { + interval: 5, + reorgPeriod: 20, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x03c842db86a6a3e524d4a6615390c1ea8e2b9541', + '0x4346776b10f5e0d9995d884b7a1dbaee4e24c016', + '0x749d6e7ad949e522c92181dc77f7bbc1c5d71506', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'ethereum', + ), + }, + avalanche: { + interval: 5, + reorgPeriod: 3, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x3fb8263859843bffb02950c492d492cae169f4cf', + '0xe58c63ad669b946e7c8211299f22679deecc9c83', + '0x6c754f1e9cd8287088b46a7c807303d55d728b49', + ], + [Contexts.ReleaseCandidate]: [ + '0x706976391e23dea28152e0207936bd942aba01ce', + ], + }, + 'avalanche', + ), + }, + polygon: { + interval: 5, + reorgPeriod: 256, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x12ecb319c7f4e8ac5eb5226662aeb8528c5cefac', + '0x8dd8f8d34b5ecaa5f66de24b01acd7b8461c3916', + '0xdbf3666de031bea43ec35822e8c33b9a9c610322', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'polygon', + ), + }, + bsc: { + interval: 5, + reorgPeriod: 15, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x570af9b7b36568c8877eebba6c6727aa9dab7268', + '0x7bf928d5d262365d31d64eaa24755d48c3cae313', + '0x03047213365800f065356b4a2fe97c3c3a52296a', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'bsc', + ), + }, + arbitrum: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x4d966438fe9e2b1e7124c87bbb90cb4f0f6c59a1', + '0x6333e110b8a261cab28acb43030bcde59f26978a', + '0x3369e12edd52570806f126eb50be269ba5e65843', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'arbitrum', + ), + }, + optimism: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x20349eadc6c72e94ce38268b96692b1a5c20de4f', + '0x04d040cee072272789e2d1f29aef73b3ad098db5', + '0x779a17e035018396724a6dec8a59bda1b5adf738', + ], + [Contexts.ReleaseCandidate]: [ + '0x60e938bf280bbc21bacfd8bf435459d9003a8f98', + ], + }, + 'optimism', + ), + }, + moonbeam: { + interval: 5, + reorgPeriod: 2, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x2225e2f4e9221049456da93b71d2de41f3b6b2a8', + '0x4fe067bb455358e295bfcfb92519a6f9de94b98e', + '0xcc4a78aa162482bea43313cd836ba7b560b44fc4', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'moonbeam', + ), + }, + gnosis: { + interval: 5, + reorgPeriod: 14, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0xd4df66a859585678f2ea8357161d896be19cc1ca', + '0x06a833508579f8b59d756b3a1e72451fc70840c3', + '0xb93a72cee19402553c9dd7fed2461aebd04e2454', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'gnosis', + ), + }, + base: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0xb9453d675e0fa3c178a17b4ce1ad5b1a279b3af9', + '0x4512985a574cb127b2af2d4bb676876ce804e3f8', + '0xb144bb2f599a5af095bc30367856f27ea8a8adc7', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'base', + ), + }, + scroll: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0xad557170a9f2f21c35e03de07cb30dcbcc3dff63', + '0xb37fe43a9f47b7024c2d5ae22526cc66b5261533', + '0x7210fa0a6be39a75cb14d682ebfb37e2b53ecbe5', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'scroll', + ), + }, + polygonzkevm: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x86f2a44592bb98da766e880cfd70d3bbb295e61a', + '0xc84076030bdabaabb9e61161d833dd84b700afda', + '0x6a1da2e0b7ae26aaece1377c0a4dbe25b85fa3ca', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'polygonzkevm', + ), + }, + }; +}; diff --git a/typescript/infra/config/environments/test/aggregationIsm.ts b/typescript/infra/config/environments/test/aggregationIsm.ts index 55a84a255d..c044eea51d 100644 --- a/typescript/infra/config/environments/test/aggregationIsm.ts +++ b/typescript/infra/config/environments/test/aggregationIsm.ts @@ -1,10 +1,10 @@ -import { AggregationIsmConfig, ModuleType } from '@hyperlane-xyz/sdk'; +import { AggregationIsmConfig, IsmType } from '@hyperlane-xyz/sdk'; import { merkleRootMultisig, messageIdMultisig } from './multisigIsm'; export const aggregationIsm = (validatorKey: string): AggregationIsmConfig => { return { - type: ModuleType.AGGREGATION, + type: IsmType.AGGREGATION, modules: [ merkleRootMultisig(validatorKey), messageIdMultisig(validatorKey), diff --git a/typescript/infra/config/environments/test/core.ts b/typescript/infra/config/environments/test/core.ts index 73370f214a..0c2f476e42 100644 --- a/typescript/infra/config/environments/test/core.ts +++ b/typescript/infra/config/environments/test/core.ts @@ -4,10 +4,11 @@ import { AggregationHookConfig, ChainMap, CoreConfig, + FallbackRoutingHookConfig, HookType, IgpHookConfig, + IsmType, MerkleTreeHookConfig, - ModuleType, RoutingIsmConfig, } from '@hyperlane-xyz/sdk'; import { ProtocolFeeHookConfig } from '@hyperlane-xyz/sdk/src/hook/types'; @@ -20,7 +21,7 @@ import { owners } from './owners'; export const core: ChainMap = objMap(owners, (local, owner) => { const defaultIsm: RoutingIsmConfig = { - type: ModuleType.ROUTING, + type: IsmType.ROUTING, owner, domains: Object.fromEntries( Object.entries(chainToValidator) @@ -38,11 +39,22 @@ export const core: ChainMap = objMap(owners, (local, owner) => { ...igp[local], }; - const defaultHook: AggregationHookConfig = { + const aggregationHook: AggregationHookConfig = { type: HookType.AGGREGATION, hooks: [merkleHook, igpHook], }; + const defaultHook: FallbackRoutingHookConfig = { + type: HookType.FALLBACK_ROUTING, + owner, + fallback: merkleHook, + domains: Object.fromEntries( + Object.entries(chainToValidator) + .filter(([chain, _]) => chain !== local) + .map(([chain, _]) => [chain, aggregationHook]), + ), + }; + const requiredHook: ProtocolFeeHookConfig = { type: HookType.PROTOCOL_FEE, maxProtocolFee: ethers.utils.parseUnits('1', 'gwei'), // 1 gwei of native token diff --git a/typescript/infra/config/environments/test/multisigIsm.ts b/typescript/infra/config/environments/test/multisigIsm.ts index a310d258f7..afa7916c95 100644 --- a/typescript/infra/config/environments/test/multisigIsm.ts +++ b/typescript/infra/config/environments/test/multisigIsm.ts @@ -1,4 +1,4 @@ -import { ChainMap, ModuleType, MultisigIsmConfig } from '@hyperlane-xyz/sdk'; +import { ChainMap, IsmType, MultisigIsmConfig } from '@hyperlane-xyz/sdk'; // the addresses here must line up with the e2e test's validator addresses // Validators are anvil accounts 4-6 @@ -10,7 +10,7 @@ export const chainToValidator: Record = { export const merkleRootMultisig = (validatorKey: string): MultisigIsmConfig => { return { - type: ModuleType.MERKLE_ROOT_MULTISIG, + type: IsmType.MERKLE_ROOT_MULTISIG, validators: [validatorKey], threshold: 1, }; @@ -18,7 +18,7 @@ export const merkleRootMultisig = (validatorKey: string): MultisigIsmConfig => { export const messageIdMultisig = (validatorKey: string): MultisigIsmConfig => { return { - type: ModuleType.MESSAGE_ID_MULTISIG, + type: IsmType.MESSAGE_ID_MULTISIG, validators: [validatorKey], threshold: 1, }; diff --git a/typescript/infra/config/environments/test/routingIsm.ts b/typescript/infra/config/environments/test/routingIsm.ts index bbe97fe449..7744e7471c 100644 --- a/typescript/infra/config/environments/test/routingIsm.ts +++ b/typescript/infra/config/environments/test/routingIsm.ts @@ -1,4 +1,4 @@ -import { ModuleType, RoutingIsmConfig } from '@hyperlane-xyz/sdk'; +import { IsmType, RoutingIsmConfig } from '@hyperlane-xyz/sdk'; import { multisigIsm } from './multisigIsm'; @@ -7,7 +7,7 @@ export const routingIsm = ( owner: string, ): RoutingIsmConfig => { return { - type: ModuleType.ROUTING, + type: IsmType.ROUTING, owner, domains: Object.fromEntries( Object.entries(multisigIsm).filter(([chain]) => chain !== local_chain), diff --git a/typescript/infra/config/environments/testnet4/core.ts b/typescript/infra/config/environments/testnet4/core.ts index d9aba45ffd..7a2ae2c321 100644 --- a/typescript/infra/config/environments/testnet4/core.ts +++ b/typescript/infra/config/environments/testnet4/core.ts @@ -5,10 +5,11 @@ import { AggregationIsmConfig, ChainMap, CoreConfig, + FallbackRoutingHookConfig, HookType, IgpHookConfig, + IsmType, MerkleTreeHookConfig, - ModuleType, MultisigConfig, MultisigIsmConfig, ProtocolFeeHookConfig, @@ -28,36 +29,29 @@ export const core: ChainMap = objMap(owners, (local, owner) => { .map((origin) => [origin, defaultMultisigIsmConfigs[origin]]), ); - const messageIdRouting: RoutingIsmConfig = { - type: ModuleType.ROUTING, - domains: objMap( - originMultisigs, - (_, multisig): MultisigIsmConfig => ({ - type: ModuleType.MESSAGE_ID_MULTISIG, - ...multisig, - }), - ), - owner, - }; + const merkleRoot = (multisig: MultisigConfig): MultisigIsmConfig => ({ + type: IsmType.MERKLE_ROOT_MULTISIG, + ...multisig, + }); - const merkleRootRouting: RoutingIsmConfig = { - type: ModuleType.ROUTING, + const messageIdIsm = (multisig: MultisigConfig): MultisigIsmConfig => ({ + type: IsmType.MESSAGE_ID_MULTISIG, + ...multisig, + }); + + const defaultIsm: RoutingIsmConfig = { + type: IsmType.ROUTING, domains: objMap( originMultisigs, - (_, multisig): MultisigIsmConfig => ({ - type: ModuleType.MERKLE_ROOT_MULTISIG, - ...multisig, + (_, multisig): AggregationIsmConfig => ({ + type: IsmType.AGGREGATION, + modules: [messageIdIsm(multisig), merkleRoot(multisig)], + threshold: 1, }), ), owner, }; - const defaultIsm: AggregationIsmConfig = { - type: ModuleType.AGGREGATION, - modules: [messageIdRouting, merkleRootRouting], - threshold: 1, - }; - const merkleHook: MerkleTreeHookConfig = { type: HookType.MERKLE_TREE, }; @@ -67,9 +61,19 @@ export const core: ChainMap = objMap(owners, (local, owner) => { ...igp[local], }; - const defaultHook: AggregationHookConfig = { - type: HookType.AGGREGATION, - hooks: [merkleHook, igpHook], + const aggregationHooks = objMap( + originMultisigs, + (_origin, _): AggregationHookConfig => ({ + type: HookType.AGGREGATION, + hooks: [igpHook, merkleHook], + }), + ); + + const defaultHook: FallbackRoutingHookConfig = { + type: HookType.FALLBACK_ROUTING, + owner, + fallback: merkleHook, + domains: aggregationHooks, }; const requiredHook: ProtocolFeeHookConfig = { diff --git a/typescript/infra/config/environments/testnet4/core/verification.json b/typescript/infra/config/environments/testnet4/core/verification.json index 25d0f76b2f..31eb4ee72a 100644 --- a/typescript/infra/config/environments/testnet4/core/verification.json +++ b/typescript/infra/config/environments/testnet4/core/verification.json @@ -1349,6 +1349,18 @@ "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xE1386148385275A27D29fC39Bd58a969CD5dCAF0", + "constructorArguments": "000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000221fa9cbafcd6c1c3d206571cf4427703e023ffa", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xE1386148385275A27D29fC39Bd58a969CD5dCAF0", + "constructorArguments": "000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000221fa9cbafcd6c1c3d206571cf4427703e023ffa", + "isProxy": false } ], "basegoerli": [ @@ -2701,6 +2713,18 @@ "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x4Ece7b15ba5dCA2708dCE2812016683193102b9F", + "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000005821f3b6ee05f3dc62b43b74ab1c8f8e6904b1c8", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x4Ece7b15ba5dCA2708dCE2812016683193102b9F", + "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000005821f3b6ee05f3dc62b43b74ab1c8f8e6904b1c8", + "isProxy": false } ], "fuji": [ @@ -3045,6 +3069,18 @@ "address": "0x4f7179A691F8a684f56cF7Fed65171877d30739a", "constructorArguments": "0x0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b0", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x50897eDCb3f1bB2A90f20DA5a8dF0e5c57A146e3", + "constructorArguments": "0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b0000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000009ff6ac3daf63103620bbf76136ea1aff43c2f612", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x50897eDCb3f1bB2A90f20DA5a8dF0e5c57A146e3", + "constructorArguments": "0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b0000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000009ff6ac3daf63103620bbf76136ea1aff43c2f612", + "isProxy": false } ], "mumbai": [ @@ -3137,6 +3173,18 @@ "address": "0x99303EFF09332cDd93E8BC8b2F07b2416e4501e5", "constructorArguments": "0x0000000000000000000000002d1889fe5b092cd988972261434f7e5f26041115", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xFA005A892EbDACFcc3f1EF0111A7406c779c3647", + "constructorArguments": "0000000000000000000000002d1889fe5b092cd988972261434f7e5f26041115000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000009af85731edd41e2e50f81ef8a0a69d2fb836edf9", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xFA005A892EbDACFcc3f1EF0111A7406c779c3647", + "constructorArguments": "0000000000000000000000002d1889fe5b092cd988972261434f7e5f26041115000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000009af85731edd41e2e50f81ef8a0a69d2fb836edf9", + "isProxy": false } ], "bsctestnet": [ @@ -3229,6 +3277,18 @@ "address": "0xf09701B0a93210113D175461b6135a96773B5465", "constructorArguments": "0x000000000000000000000000f9f6f5646f478d5ab4e20b0f910c92f1ccc9cc6d", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xc278DDe83018F0e8c624b208e6D9E6251d263B1d", + "constructorArguments": "000000000000000000000000f9f6f5646f478d5ab4e20b0f910c92f1ccc9cc6d000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000c6cbf39a747f5e28d1bdc8d9dfdab2960abd5a8f", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xc278DDe83018F0e8c624b208e6D9E6251d263B1d", + "constructorArguments": "000000000000000000000000f9f6f5646f478d5ab4e20b0f910c92f1ccc9cc6d000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000c6cbf39a747f5e28d1bdc8d9dfdab2960abd5a8f", + "isProxy": false } ], "goerli": [ @@ -3321,6 +3381,78 @@ "address": "0x3c182AD9cA8A71bc107Ef440C2667E8360e1158E", "constructorArguments": "0x00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x66F356393a9d66C7757dE475d02969783796d54c", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0x7523AE9fAebf49749a0E7148403c8d26C23a53da", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a330000000000000000000000001681cc382e08a72d4b64a123080896e30f96b7400000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x66F356393a9d66C7757dE475d02969783796d54c", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0x7523AE9fAebf49749a0E7148403c8d26C23a53da", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a330000000000000000000000001681cc382e08a72d4b64a123080896e30f96b7400000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0x108FD05a2c0Ba834506167ef8f9FD715B3319d8F", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a330000000000000000000000003212977fbe6464c2bb60fdb85ab0a5e06e25cdfb0000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0x108FD05a2c0Ba834506167ef8f9FD715B3319d8F", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a330000000000000000000000003212977fbe6464c2bb60fdb85ab0a5e06e25cdfb0000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x8BAB125B823ee5E55797394c03B15874bF176A53", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x8BAB125B823ee5E55797394c03B15874bF176A53", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xDd66CB60D4Ffb7f0d8FB91CB1D20aBcaBC82900a", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0xce59701919507F2d379270657A4e410F570aBe0D", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a33000000000000000000000000e0c5bdafee7f7065402337040e426a42b5c336500000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xDd66CB60D4Ffb7f0d8FB91CB1D20aBcaBC82900a", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0xce59701919507F2d379270657A4e410F570aBe0D", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a33000000000000000000000000e0c5bdafee7f7065402337040e426a42b5c336500000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false } ], "scrollsepolia": [ @@ -3413,6 +3545,30 @@ "address": "0x527768930D889662Fe7ACF64294871e86e4C2381", "constructorArguments": "0x0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xfBeaF07855181f8476B235Cf746A7DF3F9e386Fb", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f0", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xfBeaF07855181f8476B235Cf746A7DF3F9e386Fb", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f0", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x7c115c16E34c74afdb88bd268EaB19bC705891FE", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f0", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x7c115c16E34c74afdb88bd268EaB19bC705891FE", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f0", + "isProxy": false } ], "sepolia": [ @@ -3505,6 +3661,54 @@ "address": "0xE6105C59480a1B7DD3E4f28153aFdbE12F4CfCD9", "constructorArguments": "0x000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x7CE74319699165430fC651F6b99406eEbee95493", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x7CE74319699165430fC651F6b99406eEbee95493", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false } ], "moonbasealpha": [ @@ -3597,6 +3801,18 @@ "address": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", "constructorArguments": "0x00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x6c9EB73793F9Cd535DB1bF86dC307f6d899b2fE3", + "constructorArguments": "00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000155b1cd2f7cbc58d403b9be341fab6cd77425175", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x6c9EB73793F9Cd535DB1bF86dC307f6d899b2fE3", + "constructorArguments": "00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000155b1cd2f7cbc58d403b9be341fab6cd77425175", + "isProxy": false } ], "optimismgoerli": [ @@ -3689,6 +3905,18 @@ "address": "0x24D31e12E4d3bc2C46C994FcE0c828b218A1aeAb", "constructorArguments": "0x000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea2", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xba962f31B8DE02238fDdf8CE6a21260Af8C5Dd2F", + "constructorArguments": "000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea2000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fee074b31b5b259eb3109737be13d39b853b47b9", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xba962f31B8DE02238fDdf8CE6a21260Af8C5Dd2F", + "constructorArguments": "000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea2000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fee074b31b5b259eb3109737be13d39b853b47b9", + "isProxy": false } ], "arbitrumgoerli": [ @@ -3781,6 +4009,18 @@ "address": "0x4a01EEBa1CC20F47A2e60aE4ec932051601FcB9e", "constructorArguments": "0x00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f", + "constructorArguments": "00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000f0a38e1eea49dac7968f470c3aa0bde2565a5d80", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f", + "constructorArguments": "00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000f0a38e1eea49dac7968f470c3aa0bde2565a5d80", + "isProxy": false } ], "polygonzkevmtestnet": [ @@ -3873,6 +4113,18 @@ "address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324", "constructorArguments": "0x000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5", + "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000068311418d79fe8d96599384ed767d225635d88a8", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5", + "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000068311418d79fe8d96599384ed767d225635d88a8", + "isProxy": false } ] } diff --git a/typescript/infra/config/environments/testnet4/hooks.ts b/typescript/infra/config/environments/testnet4/hooks.ts new file mode 100644 index 0000000000..b88082c4b9 --- /dev/null +++ b/typescript/infra/config/environments/testnet4/hooks.ts @@ -0,0 +1,13 @@ +import { Chains, HookType, OpStackHookConfig } from '@hyperlane-xyz/sdk'; + +export const opHookConfig: OpStackHookConfig = { + type: HookType.OP_STACK, + nativeBridge: '0xDa2332D0a7608919Cd331B1304Cd179129a90495', + destinationChain: Chains.optimismgoerli, +}; + +export const baseHookConfig: OpStackHookConfig = { + type: HookType.OP_STACK, + nativeBridge: '0x8e5693140eA606bcEB98761d9beB1BC87383706D', + destinationChain: Chains.basegoerli, +}; diff --git a/typescript/infra/config/environments/testnet4/igp.ts b/typescript/infra/config/environments/testnet4/igp.ts index 047ebf6305..d5719b5964 100644 --- a/typescript/infra/config/environments/testnet4/igp.ts +++ b/typescript/infra/config/environments/testnet4/igp.ts @@ -29,6 +29,7 @@ export const igp: ChainMap = objMap(owners, (chain, owner) => { exclude(chain, supportedChainNames).map((remote) => [ remote, multisigIsmVerificationCost( + // TODO: parameterize this defaultMultisigIsmConfigs[remote].threshold, defaultMultisigIsmConfigs[remote].validators.length, ), diff --git a/typescript/infra/config/multisigIsm.ts b/typescript/infra/config/multisigIsm.ts index 8c7d5ea752..4eee71d68f 100644 --- a/typescript/infra/config/multisigIsm.ts +++ b/typescript/infra/config/multisigIsm.ts @@ -9,13 +9,13 @@ import { objFilter, objMap } from '@hyperlane-xyz/utils'; import { DeployEnvironment } from '../src/config'; import { Contexts } from './contexts'; -import { supportedChainNames as mainnet2Chains } from './environments/mainnet2/chains'; +import { supportedChainNames as mainnet3Chains } from './environments/mainnet3/chains'; import { chainNames as testChains } from './environments/test/chains'; import { supportedChainNames as testnet4Chains } from './environments/testnet4/chains'; import { rcMultisigIsmConfigs } from './rcMultisigIsmConfigs'; const chains = { - mainnet2: mainnet2Chains, + mainnet3: mainnet3Chains, testnet4: testnet4Chains, test: testChains, }; diff --git a/typescript/infra/config/routingIsm.ts b/typescript/infra/config/routingIsm.ts index d8fdb3a26d..2a46bd2eeb 100644 --- a/typescript/infra/config/routingIsm.ts +++ b/typescript/infra/config/routingIsm.ts @@ -3,47 +3,33 @@ import { ChainMap, ChainName, IsmConfig, - ModuleType, + IsmType, RoutingIsmConfig, } from '@hyperlane-xyz/sdk'; -import { Address } from '@hyperlane-xyz/utils'; import { DeployEnvironment } from '../src/config'; import { aggregationIsm } from './aggregationIsm'; import { Contexts } from './contexts'; -import { supportedChainNames as mainnet2Chains } from './environments/mainnet2/chains'; -import { owners as mainnet2Owners } from './environments/mainnet2/owners'; +import { supportedChainNames as mainnet3Chains } from './environments/mainnet3/chains'; +import { owners as mainnet3Owners } from './environments/mainnet3/owners'; import { chainNames as testChains } from './environments/test/chains'; import { owners as testOwners } from './environments/test/owners'; import { supportedChainNames as testnet4Chains } from './environments/testnet4/chains'; import { owners as testnet4Owners } from './environments/testnet4/owners'; const chains = { - mainnet2: mainnet2Chains, + mainnet3: mainnet3Chains, testnet4: testnet4Chains, test: testChains, }; const owners = { testnet4: testnet4Owners, - mainnet2: mainnet2Owners, + mainnet3: mainnet3Owners, test: testOwners, }; -export const mainnetHyperlaneDefaultIsmCache: ChainMap
= { - ethereum: '0x3Ef03aEf1392E5e0C16fd4D22C3c3b4f81C8AF0C', - optimism: '0xA7a0f9CB7d3bc3520A82ECF009F8f3949a926237', - arbitrum: '0xD629aB5353D6B11f52eD80EFb26a28e5E347B52F', - avalanche: '0x143A34E3Eaf1E77a8c994EcADb5268d717183150', - polygon: '0xE1403b9d64185f715414A4a7BEcec124Bd9198A7', - bsc: '0x307c66E1E2E9f20b6ED3c4561398215CF9b633c4', - celo: '0xAC0246a09f1FEaF4CEe32e43792eE12d6B277332', - moonbeam: '0xB32d147334AF9C15A65716Ab254a2460307648D1', - gnosis: '0xF6c174AcC399eD8407663387857f30f92B0db958', - solana: '6pHP4EeX2Xek24Be7PPTWCqcpmNEPENW1m9RnZSFSmA1', -}; - // Intended to be the "entrypoint" ISM. // Routing ISM => Aggregation (1/2) // | | @@ -55,10 +41,6 @@ export const routingIsm = ( local: ChainName, context: Contexts, ): RoutingIsmConfig | string => { - if (environment === 'mainnet2' && context === Contexts.Hyperlane) { - return mainnetHyperlaneDefaultIsmCache[local]; - } - const aggregationIsms: ChainMap = chains[ environment ].reduce( @@ -70,7 +52,7 @@ export const routingIsm = ( ); return { - type: ModuleType.ROUTING, + type: IsmType.ROUTING, domains: aggregationIsms, owner: owners[environment][local], }; @@ -79,15 +61,13 @@ export const routingIsm = ( const replacerEnum = (key: string, value: any) => { if (key === 'type') { switch (value) { - case ModuleType.AGGREGATION: + case IsmType.AGGREGATION: return 'AGGREGATION'; - case ModuleType.ROUTING: + case IsmType.ROUTING: return 'ROUTING'; - case ModuleType.MERKLE_ROOT_MULTISIG: + case IsmType.MERKLE_ROOT_MULTISIG: return 'MERKLE_ROOT_MULTISIG'; - case ModuleType.LEGACY_MULTISIG: - return 'LEGACY_MULTISIG'; - case ModuleType.MESSAGE_ID_MULTISIG: + case IsmType.MESSAGE_ID_MULTISIG: return 'MESSAGE_ID_MULTISIG'; default: return value; diff --git a/typescript/infra/fork.sh b/typescript/infra/fork.sh index 27db82fa8d..b65496aae4 100755 --- a/typescript/infra/fork.sh +++ b/typescript/infra/fork.sh @@ -9,7 +9,7 @@ fi if [ "$ENVIRONMENT" == "testnet3" ]; then FORK_CHAIN="goerli" RPC_URL="https://goerli.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161" -elif [ "$ENVIRONMENT" == "mainnet2" ]; then +elif [ "$ENVIRONMENT" == "mainnet3" ]; then FORK_CHAIN="arbitrum" RPC_URL="https://rpc.ankr.com/arbitrum" else diff --git a/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml b/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml index fff9c8d56f..a9cc54da90 100644 --- a/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml +++ b/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml @@ -32,7 +32,7 @@ spec: * to replace the correct value in the created secret. */}} {{- range .Values.hyperlane.chains }} - {{- if or (eq $.Values.hyperlane.connectionType "httpQuorum") (eq $.Values.hyperlane.connectionType "httpFallback") }} + {{- if or (eq $.Values.hyperlane.connectionType "quorum") (eq $.Values.hyperlane.connectionType "fallback") }} GCP_SECRET_OVERRIDE_{{ $.Values.hyperlane.runEnv | upper }}_RPC_ENDPOINTS_{{ . | upper }}: {{ printf "'{{ .%s_rpcs | toString }}'" . }} {{- else }} GCP_SECRET_OVERRIDE_{{ $.Values.hyperlane.runEnv | upper }}_RPC_ENDPOINT_{{ . | upper }}: {{ printf "'{{ .%s_rpc | toString }}'" . }} @@ -51,7 +51,7 @@ spec: * and associate it with the secret key networkname_rpc. */}} {{- range .Values.hyperlane.chains }} - {{- if or (eq $.Values.hyperlane.connectionType "httpQuorum") (eq $.Values.hyperlane.connectionType "httpFallback") }} + {{- if or (eq $.Values.hyperlane.connectionType "quorum") (eq $.Values.hyperlane.connectionType "fallback") }} - secretKey: {{ printf "%s_rpcs" . }} remoteRef: key: {{ printf "%s-rpc-endpoints-%s" $.Values.hyperlane.runEnv . }} diff --git a/typescript/infra/helm/warp-routes/values.yaml b/typescript/infra/helm/warp-routes/values.yaml index 1dfa9d17f4..c5d7c35e72 100644 --- a/typescript/infra/helm/warp-routes/values.yaml +++ b/typescript/infra/helm/warp-routes/values.yaml @@ -2,7 +2,7 @@ image: repository: gcr.io/hyperlane-labs-dev/hyperlane-monorepo tag: hyperlane: - runEnv: mainnet2 + runEnv: mainnet3 context: hyperlane -nameOverride: "" -fullnameOverride: "" +nameOverride: '' +fullnameOverride: '' diff --git a/typescript/infra/scripts/funding/fund-keys-from-deployer.ts b/typescript/infra/scripts/funding/fund-keys-from-deployer.ts index d3ad82da0e..a63e33a7de 100644 --- a/typescript/infra/scripts/funding/fund-keys-from-deployer.ts +++ b/typescript/infra/scripts/funding/fund-keys-from-deployer.ts @@ -12,7 +12,7 @@ import { MultiProvider, RpcConsensusType, } from '@hyperlane-xyz/sdk'; -import { error, log, warn } from '@hyperlane-xyz/utils'; +import { Address, error, log, warn } from '@hyperlane-xyz/utils'; import { Contexts } from '../../config/contexts'; import { parseKeyIdentifier } from '../../src/agents/agent'; @@ -33,22 +33,37 @@ import { } from '../../src/utils/utils'; import { getAgentConfig, getArgs, getEnvironmentConfig } from '../utils'; +import * as L1ETHGateway from './utils/L1ETHGateway.json'; +import * as L1MessageQueue from './utils/L1MessageQueue.json'; +import * as L1ScrollMessenger from './utils/L1ScrollMessenger.json'; +import * as PolygonZkEVMBridge from './utils/PolygonZkEVMBridge.json'; + +const nativeBridges = { + scrollsepolia: { + l1ETHGateway: '0x8A54A2347Da2562917304141ab67324615e9866d', + l1Messenger: '0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A', + }, + polygonzkevmtestnet: { + l1EVMBridge: '0xF6BEEeBB578e214CA9E23B0e9683454Ff88Ed2A7', + }, +}; + type L2Chain = | Chains.optimism | Chains.optimismgoerli | Chains.arbitrum | Chains.arbitrumgoerli - | Chains.scrollsepolia | Chains.basegoerli - | Chains.polygonzkevmtestnet; + | Chains.base; const L2Chains: ChainName[] = [ Chains.optimism, Chains.optimismgoerli, Chains.arbitrum, Chains.arbitrumgoerli, - Chains.scrollsepolia, Chains.basegoerli, + Chains.base, + Chains.polygonzkevmtestnet, ]; const L2ToL1: ChainMap = { @@ -56,9 +71,9 @@ const L2ToL1: ChainMap = { arbitrumgoerli: 'goerli', optimism: 'ethereum', arbitrum: 'ethereum', - scrollsepolia: 'sepolia', basegoerli: 'goerli', - polygonzktestnet: 'goerli', + base: 'ethereum', + polygonzkevmtestnet: 'goerli', }; // Missing types declaration for bufio @@ -118,7 +133,10 @@ const desiredBalancePerChain: ChainMap = { gnosis: '0.1', basegoerli: '0.05', scrollsepolia: '0.05', - polygonzkevmtestnet: '0.01', + polygonzkevm: '0.3', + scroll: '0.3', + base: '0.3', + polygonzkevmtestnet: '0.3', // unused test1: '0', @@ -138,6 +156,9 @@ const desiredKathyBalancePerChain: ChainMap = { bsc: '0.35', moonbeam: '250', gnosis: '100', + scroll: '0.05', + base: '0.05', + polygonzkevm: '0.05', }; // The balance threshold of the IGP contract that must be met for the key funder @@ -164,6 +185,9 @@ const igpClaimThresholdPerChain: ChainMap = { basegoerli: '0.1', scrollsepolia: '0.1', polygonzkevmtestnet: '0.1', + base: '0.1', + scroll: '0.1', + polygonzkevm: '0.1', // unused test1: '0', test2: '0', @@ -626,10 +650,14 @@ class ContextFunder { ), }); let tx; - if (l2Chain.includes('optimism')) { + if (l2Chain.includes('optimism') || l2Chain.includes('base')) { tx = await this.bridgeToOptimism(l2Chain, amount, to); } else if (l2Chain.includes('arbitrum')) { tx = await this.bridgeToArbitrum(l2Chain, amount); + } else if (l2Chain.includes('scroll')) { + tx = await this.bridgeToScroll(l2Chain, amount, to); + } else if (l2Chain.includes('zkevm')) { + tx = await this.bridgeToPolygonCDK(l2Chain, amount, to); } else { throw new Error(`${l2Chain} is not an L2`); } @@ -667,6 +695,69 @@ class ContextFunder { }); } + private async bridgeToScroll( + l2Chain: L2Chain, + amount: BigNumber, + to: Address, + ) { + const l1Chain = L2ToL1[l2Chain]; + const l1ChainSigner = this.multiProvider.getSigner(l1Chain); + const l1EthGateway = new ethers.Contract( + nativeBridges.scrollsepolia.l1ETHGateway, + L1ETHGateway.abi, + l1ChainSigner, + ); + const l1ScrollMessenger = new ethers.Contract( + nativeBridges.scrollsepolia.l1Messenger, + L1ScrollMessenger.abi, + l1ChainSigner, + ); + const l2GasLimit = BigNumber.from('200000'); // l2 gas amount for the transfer and an empty callback calls + const l1MessageQueueAddress = await l1ScrollMessenger.messageQueue(); + const l1MessageQueue = new ethers.Contract( + l1MessageQueueAddress, + L1MessageQueue.abi, + l1ChainSigner, + ); + const gasQuote = await l1MessageQueue.estimateCrossDomainMessageFee( + l2GasLimit, + ); + const totalAmount = amount.add(gasQuote); + return l1EthGateway['depositETH(address,uint256,uint256)']( + to, + amount, + l2GasLimit, + { + value: totalAmount, + }, + ); + } + + private async bridgeToPolygonCDK( + l2Chain: L2Chain, + amount: BigNumber, + to: Address, + ) { + const l1Chain = L2ToL1[l2Chain]; + const l1ChainSigner = this.multiProvider.getSigner(l1Chain); + const polygonZkEVMbridge = new ethers.Contract( + nativeBridges.polygonzkevmtestnet.l1EVMBridge, + PolygonZkEVMBridge.abi, + l1ChainSigner, + ); + return polygonZkEVMbridge.bridgeAsset( + 1, // 0 is mainnet, 1 is l2 + to, + amount, + ethers.constants.AddressZero, + true, + [], + { + value: amount, + }, + ); + } + private async updateWalletBalanceGauge(chain: ChainName) { const funderAddress = await this.multiProvider.getSignerAddress(chain); walletBalanceGauge diff --git a/typescript/infra/scripts/funding/utils/L1ETHGateway.json b/typescript/infra/scripts/funding/utils/L1ETHGateway.json new file mode 100644 index 0000000000..1622a94581 --- /dev/null +++ b/typescript/infra/scripts/funding/utils/L1ETHGateway.json @@ -0,0 +1,45 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "depositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "depositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ] +} diff --git a/typescript/infra/scripts/funding/utils/L1MessageQueue.json b/typescript/infra/scripts/funding/utils/L1MessageQueue.json new file mode 100644 index 0000000000..040883a47a --- /dev/null +++ b/typescript/infra/scripts/funding/utils/L1MessageQueue.json @@ -0,0 +1,23 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "estimateCrossDomainMessageFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +} diff --git a/typescript/infra/scripts/funding/utils/L1ScrollMessenger.json b/typescript/infra/scripts/funding/utils/L1ScrollMessenger.json new file mode 100644 index 0000000000..efe556a193 --- /dev/null +++ b/typescript/infra/scripts/funding/utils/L1ScrollMessenger.json @@ -0,0 +1,17 @@ +{ + "abi": [ + { + "inputs": [], + "name": "messageQueue", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +} diff --git a/typescript/infra/scripts/funding/utils/PolygonZkEVMBridge.json b/typescript/infra/scripts/funding/utils/PolygonZkEVMBridge.json new file mode 100644 index 0000000000..54a868c3fb --- /dev/null +++ b/typescript/infra/scripts/funding/utils/PolygonZkEVMBridge.json @@ -0,0 +1,42 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "bool", + "name": "forceUpdateGlobalExitRoot", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "permitData", + "type": "bytes" + } + ], + "name": "bridgeAsset", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ] +} diff --git a/typescript/infra/scripts/helloworld/utils.ts b/typescript/infra/scripts/helloworld/utils.ts index ac42023d0e..7c4ec54756 100644 --- a/typescript/infra/scripts/helloworld/utils.ts +++ b/typescript/infra/scripts/helloworld/utils.ts @@ -12,7 +12,6 @@ import { RpcConsensusType, attachContractsMap, attachContractsMapAndGetForeignDeployments, - chainMetadata, filterChainMapToProtocol, hyperlaneEnvironments, igpFactories, @@ -24,7 +23,6 @@ import { EnvironmentConfig } from '../../src/config'; import { deployEnvToSdkEnv } from '../../src/config/environment'; import { HelloWorldConfig } from '../../src/config/helloworld/types'; import { Role } from '../../src/roles'; -import { getKeyForRole } from '../utils'; export async function getHelloWorldApp( coreConfig: EnvironmentConfig, @@ -101,20 +99,20 @@ export async function getHelloWorldMultiProtocolApp( // await keys['solanadevnet'].fetch(); // } else - if ( - coreConfig.environment === 'mainnet2' && - !multiProtocolProvider.getKnownChainNames().includes('solana') - ) { - multiProvider.addChain(chainMetadata.solana); - multiProtocolProvider.addChain(chainMetadata.solana); - keys['solana'] = getKeyForRole( - coreConfig.environment, - context, - 'solana', - keyRole, - ); - await keys['solana'].fetch(); - } + // if ( + // coreConfig.environment === 'mainnet3' && + // !multiProtocolProvider.getKnownChainNames().includes('solana') + // ) { + // multiProvider.addChain(chainMetadata.solana); + // multiProtocolProvider.addChain(chainMetadata.solana); + // keys['solana'] = getKeyForRole( + // coreConfig.environment, + // context, + // 'solana', + // keyRole, + // ); + // await keys['solana'].fetch(); + // } const core = MultiProtocolCore.fromAddressesMap( envAddresses, diff --git a/typescript/infra/scripts/module-can-verify.ts b/typescript/infra/scripts/module-can-verify.ts index 25eacfe20f..33cec97a22 100644 --- a/typescript/infra/scripts/module-can-verify.ts +++ b/typescript/infra/scripts/module-can-verify.ts @@ -1,14 +1,13 @@ import { HyperlaneCore, moduleCanCertainlyVerify } from '@hyperlane-xyz/sdk'; import { ProtocolType } from '@hyperlane-xyz/utils'; -import { mainnetHyperlaneDefaultIsmCache } from '../config/routingIsm'; import { deployEnvToSdkEnv } from '../src/config/environment'; import { getArgs, getEnvironmentConfig } from './utils'; // Hacky temporary script just to make sure that default ISMs are correct. -// Testnet3 has already been updated, mainnet2 hasn't, so the above cache -// is used for mainnet2. +// Testnet3 has already been updated, mainnet3 hasn't, so the above cache +// is used for mainnet3. async function main() { const args = await getArgs().argv; @@ -31,10 +30,8 @@ async function main() { } let ismToCheck = ''; - if (environment === 'testnet4') { + if (environment === 'testnet4' || environment === 'mainnet3') { ismToCheck = await core.getContracts(local).mailbox.defaultIsm(); - } else if (environment === 'mainnet2') { - ismToCheck = mainnetHyperlaneDefaultIsmCache[local]!; } else { throw new Error(`Unsupported environment ${environment}`); } diff --git a/typescript/infra/scripts/print-multisig-ism-config.ts b/typescript/infra/scripts/print-multisig-ism-config.ts index 580afbf0ff..e05aeaf996 100644 --- a/typescript/infra/scripts/print-multisig-ism-config.ts +++ b/typescript/infra/scripts/print-multisig-ism-config.ts @@ -1,4 +1,4 @@ -import { AllChains, ModuleType } from '@hyperlane-xyz/sdk'; +import { AllChains, IsmType } from '@hyperlane-xyz/sdk'; import { multisigIsms } from '../config/multisigIsm'; @@ -16,7 +16,7 @@ async function main() { const config = multisigIsms( args.environment, args.local, - ModuleType.MESSAGE_ID_MULTISIG, + IsmType.MESSAGE_ID_MULTISIG, args.context, ); diff --git a/typescript/infra/scripts/verify.ts b/typescript/infra/scripts/verify.ts index 16842520e7..a2367f087d 100644 --- a/typescript/infra/scripts/verify.ts +++ b/typescript/infra/scripts/verify.ts @@ -37,8 +37,8 @@ async function main() { const compilerOptions: CompilerOptions = { codeformat: 'solidity-single-file', compilerversion: 'v0.8.19+commit.7dd6d404', - optimizationUsed: '0', - runs: '200', + optimizationUsed: '1', + runs: '999999', }; const versionRegex = /v(\d.\d.\d+)\+commit.\w+/; diff --git a/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts b/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts index e1a11aff56..30418d9063 100644 --- a/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts +++ b/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts @@ -3,7 +3,7 @@ import { HelmCommand } from '../../src/utils/helm'; import { runWarpRouteHelmCommand } from './helm'; async function main() { - await runWarpRouteHelmCommand(HelmCommand.InstallOrUpgrade, 'mainnet2'); + await runWarpRouteHelmCommand(HelmCommand.InstallOrUpgrade, 'mainnet3'); } main() diff --git a/typescript/infra/src/agents/key-utils.ts b/typescript/infra/src/agents/key-utils.ts index e7afc68ba7..afe3288e44 100644 --- a/typescript/infra/src/agents/key-utils.ts +++ b/typescript/infra/src/agents/key-utils.ts @@ -77,7 +77,7 @@ export function getCloudAgentKey( return new AgentGCPKey(agentConfig.runEnv, agentConfig.context, role); } // Otherwise use an AWS key except for the deployer - else if (!!agentConfig.aws && role !== Role.Deployer) { + else if (!!agentConfig.aws && role !== Role.Deployer && role !== Role.Kathy) { return new AgentAwsKey(agentConfig, role, chainName, index); } else { // Fallback to GCP diff --git a/typescript/infra/src/config/environment.ts b/typescript/infra/src/config/environment.ts index f2eb0b40ec..62b289da09 100644 --- a/typescript/infra/src/config/environment.ts +++ b/typescript/infra/src/config/environment.ts @@ -24,7 +24,7 @@ import { InfrastructureConfig } from './infrastructure'; import { LiquidityLayerRelayerConfig } from './middleware'; // TODO: fix this? -export const EnvironmentNames = ['test', 'testnet4', 'mainnet2']; +export const EnvironmentNames = ['test', 'testnet4', 'mainnet3']; export type DeployEnvironment = keyof typeof environments; export type EnvironmentChain = Extract< keyof typeof environments[E], @@ -63,6 +63,6 @@ export const deployEnvToSdkEnv: Record< HyperlaneEnvironment > = { test: 'testnet', // TODO: remove this - mainnet2: 'mainnet', + mainnet3: 'mainnet', testnet4: 'testnet', }; diff --git a/typescript/infra/src/config/helloworld/config.ts b/typescript/infra/src/config/helloworld/config.ts index ea1ca71286..9d384d7d7a 100644 --- a/typescript/infra/src/config/helloworld/config.ts +++ b/typescript/infra/src/config/helloworld/config.ts @@ -1,12 +1,8 @@ -import { ChainMap } from '@hyperlane-xyz/sdk'; -import { MultiProvider, RouterConfig } from '@hyperlane-xyz/sdk'; +import { ChainMap, MultiProvider, RouterConfig } from '@hyperlane-xyz/sdk'; import { objMap } from '@hyperlane-xyz/utils'; import { Contexts } from '../../../config/contexts'; -import { - mainnetHyperlaneDefaultIsmCache, - routingIsm, -} from '../../../config/routingIsm'; +import { routingIsm } from '../../../config/routingIsm'; import { getRouterConfig } from '../../../scripts/utils'; import { DeployEnvironment } from '../environment'; @@ -18,10 +14,6 @@ export async function helloWorldRouterConfig( const routerConfig = await getRouterConfig(environment, multiProvider, true); return objMap(routerConfig, (chain, config) => ({ ...config, - interchainSecurityModule: - context === Contexts.Hyperlane - ? // TODO move back to `undefined` after these are verified and made the default ISMs - mainnetHyperlaneDefaultIsmCache[chain] - : routingIsm(environment, chain, context), + interchainSecurityModule: routingIsm(environment, chain, context), })); } diff --git a/typescript/infra/src/helloworld/kathy.ts b/typescript/infra/src/helloworld/kathy.ts index 56881fadff..ae48434671 100644 --- a/typescript/infra/src/helloworld/kathy.ts +++ b/typescript/infra/src/helloworld/kathy.ts @@ -38,6 +38,8 @@ export async function runHelloworldKathyHelmCommand( const values = getHelloworldKathyHelmValues(agentConfig, kathyConfig); + console.log('kathy values: ', values); + return execCmd( `helm ${helmCommand} ${getHelmReleaseName( agentConfig.context, diff --git a/typescript/sdk/src/consts/chainMetadata.ts b/typescript/sdk/src/consts/chainMetadata.ts index 8788c43156..d0c9800add 100644 --- a/typescript/sdk/src/consts/chainMetadata.ts +++ b/typescript/sdk/src/consts/chainMetadata.ts @@ -135,6 +135,34 @@ export const avalanche: ChainMetadata = { 'https://safe-transaction-avalanche.safe.global/', }; +export const base: ChainMetadata = { + chainId: 8453, + domainId: 8453, + name: Chains.base, + protocol: ProtocolType.Ethereum, + displayName: 'Base', + nativeToken: etherToken, + rpcUrls: [ + { http: 'https://base.publicnode.com/' }, + { http: 'https://mainnet.base.org' }, + { http: 'https://base.blockpi.network/v1/rpc/public' }, + ], + blockExplorers: [ + { + name: 'BaseScan', + url: 'https://basescan.org', + apiUrl: 'https://api.basescan.org/api', + family: ExplorerFamily.Etherscan, + }, + ], + blocks: { + confirmations: 1, + reorgPeriod: 1, + estimateBlockTime: 2, + }, + gnosisSafeTransactionServiceUrl: 'https://safe-transaction-base.safe.global/', +}; + export const basegoerli: ChainMetadata = { chainId: 84531, domainId: 84531, @@ -419,6 +447,32 @@ export const sepolia: ChainMetadata = { isTestnet: true, }; +export const scroll: ChainMetadata = { + chainId: 534352, + domainId: 534352, + name: Chains.scroll, + protocol: ProtocolType.Ethereum, + displayName: 'Scroll', + nativeToken: etherToken, + rpcUrls: [ + { http: 'https://scroll.blockpi.network/v1/rpc/public' }, + { http: 'https://scroll-mainnet.public.blastapi.io' }, + ], + blockExplorers: [ + { + name: 'Scroll Explorer', + url: 'https://scrollscan.com/', + apiUrl: 'https://api.scrollscan.com/api', + family: ExplorerFamily.Etherscan, + }, + ], + blocks: { + confirmations: 1, + reorgPeriod: 1, + estimateBlockTime: 3, + }, +}; + export const scrollsepolia: ChainMetadata = { chainId: 534351, domainId: 534351, @@ -426,10 +480,7 @@ export const scrollsepolia: ChainMetadata = { protocol: ProtocolType.Ethereum, displayName: 'Scroll Sepolia', nativeToken: etherToken, - rpcUrls: [ - { http: 'https://sepolia-rpc.scroll.io' }, - { http: 'https://scroll-public.scroll-testnet.quiknode.pro' }, - ], + rpcUrls: [{ http: 'https://sepolia-rpc.scroll.io' }], blockExplorers: [ { name: 'Scroll Explorer', @@ -865,6 +916,33 @@ export const polygonzkevmtestnet: ChainMetadata = { isTestnet: true, }; +export const polygonzkevm: ChainMetadata = { + protocol: ProtocolType.Ethereum, + chainId: 1101, + domainId: 1101, + name: Chains.polygonzkevm, + displayName: 'Polygon zkEVM', + nativeToken: etherToken, + rpcUrls: [ + { http: 'https://polygonzkevm-mainnet.g.alchemy.com/v2/demo' }, + { http: 'https://rpc.ankr.com/polygon_zkevm' }, + { http: 'https://zkevm.polygonscan.com/' }, + ], + blockExplorers: [ + { + name: 'PolygonScan', + url: 'https://zkevm.polygonscan.com/', + apiUrl: 'https://api-zkevm.polygonscan.com/api', + family: ExplorerFamily.Etherscan, + }, + ], + blocks: { + confirmations: 1, + reorgPeriod: 1, + estimateBlockTime: 10, + }, +}; + /** * Collection maps * @@ -876,6 +954,7 @@ export const chainMetadata: ChainMap = { arbitrum, arbitrumgoerli, avalanche, + base, basegoerli, bsc, bsctestnet, @@ -885,6 +964,7 @@ export const chainMetadata: ChainMap = { fuji, goerli, lineagoerli, + scroll, scrollsepolia, sepolia, moonbasealpha, @@ -893,6 +973,7 @@ export const chainMetadata: ChainMap = { optimism, optimismgoerli, polygon, + polygonzkevm, polygonzkevmtestnet, gnosis, proteustestnet, diff --git a/typescript/sdk/src/consts/chains.ts b/typescript/sdk/src/consts/chains.ts index f7b07cc6e1..d7cc8a1ab5 100644 --- a/typescript/sdk/src/consts/chains.ts +++ b/typescript/sdk/src/consts/chains.ts @@ -7,6 +7,7 @@ export enum Chains { arbitrum = 'arbitrum', arbitrumgoerli = 'arbitrumgoerli', avalanche = 'avalanche', + base = 'base', basegoerli = 'basegoerli', bsc = 'bsc', bsctestnet = 'bsctestnet', @@ -17,6 +18,7 @@ export enum Chains { gnosis = 'gnosis', goerli = 'goerli', lineagoerli = 'lineagoerli', + scroll = 'scroll', scrollsepolia = 'scrollsepolia', sepolia = 'sepolia', moonbasealpha = 'moonbasealpha', @@ -26,6 +28,7 @@ export enum Chains { optimism = 'optimism', optimismgoerli = 'optimismgoerli', polygon = 'polygon', + polygonzkevm = 'polygonzkevm', polygonzkevmtestnet = 'polygonzkevmtestnet', proteustestnet = 'proteustestnet', solana = 'solana', @@ -58,7 +61,10 @@ export const Mainnets: Array = [ Chains.optimism, Chains.polygon, Chains.gnosis, - Chains.solana, + Chains.base, + Chains.scroll, + Chains.polygonzkevm, + // Chains.solana, ]; export const Testnets: Array = [ diff --git a/typescript/sdk/src/consts/environments/mainnet.json b/typescript/sdk/src/consts/environments/mainnet.json index b5c4f927ac..f9dea3adb4 100644 --- a/typescript/sdk/src/consts/environments/mainnet.json +++ b/typescript/sdk/src/consts/environments/mainnet.json @@ -1,174 +1,182 @@ { - "celo": { - "storageGasOracle": "0xD9A9966E7dA9a7f0032bF449FB12696a638E673C", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "proxyAdmin": "0x90f9a2E9eCe93516d65FdaB726a3c62F5960a1b9", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0x9bDE63104EE030d9De419EEd6bA7D14b86D6fE3f", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x5e8ee6840caa4f367aff1FF28aA36D5B1b836d35", - "aggregationIsmFactory": "0xc864fa3B662613cA5051f41e157d0a997f9a5A87", - "routingIsmFactory": "0x1fdfD1486b8339638C6b92f8a96D698D8182D2b1", - "interchainQueryRouter": "0xA837e38C3F7D509DF3a7a0fCf65E3814DB6c2618", - "interchainAccountRouter": "0x9521291A43ebA3aD3FD24d610F4b7F7543C8d761", - "merkleRootMultisigIsmFactory": "0x82140b2ddAd4E4dd7e1D6757Fb5F9485c230B79d", - "messageIdMultisigIsmFactory": "0x1079056da3EC7D55521F27e1E094015C0d39Cc65" - }, - "ethereum": { - "storageGasOracle": "0xc9a103990A8dB11b4f627bc5CD1D0c2685484Ec5", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "proxyAdmin": "0x75EE15Ee1B4A75Fa3e2fDF5DF3253c25599cc659", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0xec48E52D960E54a179f70907bF28b105813877ee", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x943303Ad7D2B87BB363E0BACC901486337d9B316", - "aggregationIsmFactory": "0x30B3Ef3e98B1FF72f03f71f68115E18F203Ec794", - "routingIsmFactory": "0xBF30B4F328d1F6AC47ecCcF23836F3CbB2422c9f", - "interchainQueryRouter": "0x1d9fB4EA1712d0aaF713F7e02Aee0766Bb42bdB0", - "interchainAccountRouter": "0xe0f6eDeb3de10447C1D1CfB787e14e8F2F3a21Fb", - "merkleRootMultisigIsmFactory": "0xd6286a220b80128763bc0181Aa27F471fDC8E532", - "messageIdMultisigIsmFactory": "0x60305F347C369E31782B3bc42D08dC2c7F218807" - }, - "avalanche": { - "storageGasOracle": "0x175821F30AdCAA4bbB72Ce98eF76C2E0De2C3f21", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "proxyAdmin": "0xd7CF8c05fd81b8cA7CfF8E6C49B08a9D63265c9B", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0xeE80ab5B563cB3825133f29502bA34eD3707cb8C", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x88C01B64dCe0032796a1967E2b3447B397c6c7AC", - "aggregationIsmFactory": "0x070d4f61b05eD9e20C9194f29Df073f2110705fc", - "routingIsmFactory": "0x0FC1A9DFAca9b6Ba11bC470Bf284Da7c107fDfF2", - "interchainQueryRouter": "0x93CDC5315833F827A92F593a2aAa61e68A95b51b", - "interchainAccountRouter": "0x7D8bd3e0e6782be26B817FF6f39F26300C457aC0", - "merkleRootMultisigIsmFactory": "0x3A434432E4305C378F7a29fD63653d09ec48a145", - "messageIdMultisigIsmFactory": "0x6f82eC078317aAbE2ae5200f09d4550987A1bF28" - }, "polygon": { "storageGasOracle": "0xA3a24EC5670F1F416AB9fD554FcE2f226AE9D7eB", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0xC4F7590C5d30BE959225dC75640657954A86b980", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0x61A80297e77FC5395bd6Ff60EEacf7CD4f18d4a4", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0xCd8ACf2254641bD3Eaa32C1B8D36f0983de8C0E6", - "aggregationIsmFactory": "0x10Add66Db9C837000A43F3601aa9c54c6744F4c8", - "routingIsmFactory": "0x0B48a744698ba8dFa514742dFEB6728f52fD66f7", - "interchainQueryRouter": "0x284f71eBF22b7C7bf43aD20c460343D1a2d697c0", - "interchainAccountRouter": "0x08B9d59ad00bb917144B25C957F9c4a1e955709a", - "merkleRootMultisigIsmFactory": "0x004D9DF774B1968989dCC9F2F389325BA61Ba370", - "messageIdMultisigIsmFactory": "0x720663C310D3Db506F28a8F65c39Af37BFBe0248" + "merkleRootMultisigIsmFactory": "0xa9E0E18E78b098c2DE36c42E4DDEA13ce214c592", + "messageIdMultisigIsmFactory": "0xEa5Be2AD66BB1BA321B7aCf0A079fBE304B09Ca0", + "aggregationIsmFactory": "0x81AdDD9Ca89105063DaDEBd5B4408551Ce850E22", + "aggregationHookFactory": "0xFeeB86e70e4a640cDd29636CCE19BD6fe8628135", + "routingIsmFactory": "0xF0752A65ffB2153EaE53F6a70c858a87022d5c56", + "mailbox": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", + "merkleTreeHook": "0x73FbD25c3e817DC4B4Cd9d00eff6D83dcde2DfF6", + "interchainGasPaymaster": "0x0071740Bf129b05C4684abfbBeD248D80971cce2", + "aggregationHook": "0x34dAb05650Cf590088bA18aF9d597f3e081bCc47", + "protocolFee": "0xF8F3629e308b4758F8396606405989F8D8C9c578", + "validatorAnnounce": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5" }, "bsc": { "storageGasOracle": "0x91d23D603d60445411C06e6443d81395593B7940", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0x65993Af9D0D3a64ec77590db7ba362D6eB78eF70", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0x3a579C0bd04FC4C98A8D70EEABD9094e7be4B26D", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x1d3Bdf44887744007C7C62c85924c445C9e825DE", - "aggregationIsmFactory": "0x4084054Fc83af652A1f21EA2FF2a668D796e2514", - "routingIsmFactory": "0x85392758524EEE2323Bd3029E77aFc9bA9E60216", - "interchainQueryRouter": "0xAD20d715A6544be3f132F96e1cEaAfF016e356D7", - "interchainAccountRouter": "0x98593E2EeC26e369C761f6F0A0220ABcd6ea2673", - "merkleRootMultisigIsmFactory": "0x43Ee7f7Cd4bB7108144126780a07c22257925060", - "messageIdMultisigIsmFactory": "0xcf14426dF1D973A656e20c3AcD2B9E18C3C05793" + "merkleRootMultisigIsmFactory": "0xfADBc81Ca8A957F1Bf7c78bCc575b28DBDE042b6", + "messageIdMultisigIsmFactory": "0x4B1d8352E35e3BDE36dF5ED2e73C24E35c4a96b7", + "aggregationIsmFactory": "0x38B3878c4fb44d201DA924c4a04bae3EE728c065", + "aggregationHookFactory": "0xe70E86a7D1e001D419D71F960Cb6CaD59b6A3dB6", + "routingIsmFactory": "0xc40481D13419BC8090e6AD07074Ef39E538c09CE", + "mailbox": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4", + "merkleTreeHook": "0xFDb9Cd5f9daAA2E4474019405A328a88E7484f26", + "interchainGasPaymaster": "0x78E25e7f84416e69b9339B0A6336EB6EFfF6b451", + "aggregationHook": "0x402Fc106576462a892355d69ACF03D46A888ae88", + "protocolFee": "0xA8Aa5f14a5463a78E45CC068F11c867949F3E367", + "validatorAnnounce": "0x7024078130D9c2100fEA474DAD009C2d1703aCcd" }, "arbitrum": { "storageGasOracle": "0xD3805207b65d99C075ceA938Fa7c0587026a5DF5", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0x80Cebd56A65e46c474a1A101e89E76C4c51D179c", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0x32B92bd3e5045B67FDD8dbb7A58D25980836d04C", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0xC1d10a99C382Dd224d7F513C7e0f74D7689071f4", - "aggregationIsmFactory": "0x9E3075E067932d744119e583B34d11b144CE1e4A", - "routingIsmFactory": "0xcC2fA09fa13857942fae408EcCEc8De307344e99", - "interchainQueryRouter": "0x6fa285743afc565Ee99b6D34FE5F298690BC6412", - "interchainAccountRouter": "0x2dF1d8f3b357422Ceddbeee3fdF159B45AC6F005", - "timelockController": "0xAC98b0cD1B64EA4fe133C6D2EDaf842cE5cF4b01", - "merkleRootMultisigIsmFactory": "0xb98CCA546f88B825D1ae132ac0fb52B27cE68b05", - "messageIdMultisigIsmFactory": "0x9D7B7245C6dAEBD5543080C91523e0702fC27024" + "merkleRootMultisigIsmFactory": "0x3C330D4A2e2b8443AFaB8E326E64ab4251B7Eae0", + "messageIdMultisigIsmFactory": "0x12Df53079d399a47e9E730df095b712B0FDFA791", + "aggregationIsmFactory": "0xD4883084389fC1Eeb4dAfB2ADcFc36B711c310EB", + "aggregationHookFactory": "0x9B5f440bBb64Fee337F37e03362b628711Ea09C7", + "routingIsmFactory": "0xC020F8A7b00178dFA0fcC75C159e14b79F8e5c63", + "merkleTreeHook": "0x748040afB89B8FdBb992799808215419d36A0930", + "interchainGasPaymaster": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "aggregationHook": "0xe0cb37cFc47296f1c4eD77EFf92Aed478644d10c", + "protocolFee": "0xD0199067DACb8526e7dc524a9a7DCBb57Cd25421", + "mailbox": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9", + "validatorAnnounce": "0x1df063280C4166AF9a725e3828b4dAC6c7113B08" }, "optimism": { "storageGasOracle": "0x27e88AeB8EA4B159d81df06355Ea3d20bEB1de38", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0xE047cb95FB3b7117989e911c6afb34771183fC35", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0xAab1D11E2063Bae5EB01fa946cA8d2FDe3db05D5", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x3de63b62BeF9Da290F51f856cA9F3dB4225EDc05", - "aggregationIsmFactory": "0xb7d42f065E32eB6fCAac7ef83902c56164328fE2", - "routingIsmFactory": "0x4ef980034E631CC0CFb3b065aB793611f1B6511A", - "interchainQueryRouter": "0x5188731eE98892d1e7d98b869D811624dADf94eb", - "interchainAccountRouter": "0x0e2fEfe9357453Fc587FB11eF7C2CcdF56127f8a", - "merkleRootMultisigIsmFactory": "0xdDF51d1f0f38ec98F60BAB4FF7edfc7e47C4eA0d", - "messageIdMultisigIsmFactory": "0x3A7Ff7b700681A2655377cFDc88eE2031cf270E1" + "merkleRootMultisigIsmFactory": "0xCA6Cb9Bc3cfF9E11003A06617cF934B684Bc78BC", + "messageIdMultisigIsmFactory": "0xAa4Be20E9957fE21602c74d7C3cF5CB1112EA9Ef", + "aggregationIsmFactory": "0x7491843F3A5Ba24E0f17a22645bDa04A1Ae2c584", + "aggregationHookFactory": "0x15DEeAB8dECDe553bb0B1F9C00984cbcae1af3D7", + "routingIsmFactory": "0x89E3530137aD51743536443a3EC838b502E72eb7", + "merkleTreeHook": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "interchainGasPaymaster": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "aggregationHook": "0x4ccC6d8eB79f2a1EC9bcb0f211fef7907631F91f", + "protocolFee": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", + "mailbox": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", + "validatorAnnounce": "0x30f5b08e01808643221528BB2f7953bf2830Ef38" }, "moonbeam": { "storageGasOracle": "0x448b7ADB0dA36d41AA2AfDc9d63b97541A7b3819", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0x6A9cdA3dd1F593983BFd142Eb35e6ce4137bd5ce", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0xf3b1F415740A26568C45b1c771A737E31C198F09", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x88d346eEc75b6D22428bbaB569b6eBB0bE183c4F", - "aggregationIsmFactory": "0x20E1897CD584C3788A3C24f5e424345a55ADf90C", - "routingIsmFactory": "0xB5ec4e94ec47A70C6A38370666F713423816ce4c", - "interchainQueryRouter": "0xf1CFA9D0d4191441b1D121144f4027e63bbAE591", - "interchainAccountRouter": "0xE50DEa401eD22aBc75559d411b9cfF819c324D3b", - "merkleRootMultisigIsmFactory": "0xE80C30738DC66dad77657695e345be168D49b062", - "messageIdMultisigIsmFactory": "0x147F8C69f0FCF571c03093dE4180718FaecbA31E" + "merkleRootMultisigIsmFactory": "0xE2f485bc031Feb5a4C41C1967bf028653d75f0C3", + "messageIdMultisigIsmFactory": "0x84Df48F8f241f11d0fA302d09d73030429Bd9C73", + "aggregationIsmFactory": "0x40c6Abcb6A2CdC8882d4bEcaC47927005c7Bb8c2", + "aggregationHookFactory": "0x59cC3E7A49DdC4893eB8754c7908f96072A7DbE8", + "routingIsmFactory": "0x98Aa6239FfCcEc73A662a5e5e26Bc3fD7c7291B7", + "mailbox": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", + "merkleTreeHook": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "interchainGasPaymaster": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "aggregationHook": "0x23cca255aE83F57F39EAf9D14fB9FdaDF22D5863", + "protocolFee": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", + "validatorAnnounce": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F" }, "gnosis": { "storageGasOracle": "0x5E01d8F34b629E3f92d69546bbc4142A7Adee7e9", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0x81a92A1a272cb09d7b4970b07548463dC7aE0cB7", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0xC343A7054838FE9F249D7E3Ec1Fa6f1D108694b8", - "create2Factory": "0xc97D8e6f57b0d64971453dDc6EB8483fec9d163a", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x8AB7A6FaC052518A39628497735C855a2Beb515B", - "aggregationIsmFactory": "0xb4fc9B5fD57499Ef6FfF3995728a55F7A618ef86", - "routingIsmFactory": "0xbB22547D1dc681fe925f568f637Ff67aC06c20fc", - "interchainQueryRouter": "0xA376b27212D608324808923Add679A2c9FAFe9Da", - "interchainAccountRouter": "0xe9E3444DDD80c50276c0Fcf316026f6d7fEc2c47", - "merkleRootMultisigIsmFactory": "0x784b9D0f4eF9fb8444DfB5d24AB221C9D1A85395", - "messageIdMultisigIsmFactory": "0xC4275763D7b621eb732847957012F1fb35C90BB8" + "merkleRootMultisigIsmFactory": "0x8E273260EAd8B72A085B19346A676d355740e875", + "messageIdMultisigIsmFactory": "0x603f46cc520d2fc22957b81e206408590808F02F", + "aggregationIsmFactory": "0x11EF91d17c5ad3330DbCa709a8841743d3Af6819", + "aggregationHookFactory": "0xbC8AA096dabDf4A0200BB9f8D4Cbb644C3D86d7B", + "mailbox": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", + "routingIsmFactory": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", + "merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645", + "interchainGasPaymaster": "0xDd260B99d302f0A3fF885728c086f729c06f227f", + "aggregationHook": "0xdD1FA1C12496474c1dDC67a658Ba81437F818861", + "protocolFee": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", + "validatorAnnounce": "0x87ED6926abc9E38b9C7C19f835B41943b622663c" + }, + "base": { + "merkleRootMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "messageIdMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "aggregationIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "aggregationHookFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "routingIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "proxyAdmin": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "merkleTreeHook": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "storageGasOracle": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "interchainGasPaymaster": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "aggregationHook": "0x13f3d4B0Ee0a713430fded9E18f7fb6c91A6E41F", + "protocolFee": "0x99ca8c74cE7Cfa9d72A51fbb05F9821f5f826b3a", + "validatorAnnounce": "0x182E8d7c5F1B06201b102123FC7dF0EaeB445a7B" }, - "solana": { - "storageGasOracle": "11111111111111111111111111111111", - "validatorAnnounce": "C88Lk5GR6cPxYoJxPbNDDEwsx5Kxn1wZEomvQ2So333g", - "proxyAdmin": "11111111111111111111111111111111", - "mailbox": "Ge9atjAc3Ltu91VTbNpJDCjZ9CFxFyck4h3YBcTF9XPq", - "interchainGasPaymaster": "FCNfmLSZLo5x7oNYmkYU8WdPUu7pj636P9CaMxkmaCp7", - "defaultIsmInterchainGasPaymaster": "GTj6WzNxLNFydq5zJrV9p13fyqotRoo1MQykNCWuVpbS", - "multisigIsm": "11111111111111111111111111111111", - "testRecipient": "11111111111111111111111111111111", - "interchainAccountIsm": "11111111111111111111111111111111", - "aggregationIsmFactory": "11111111111111111111111111111111", - "routingIsmFactory": "11111111111111111111111111111111", - "interchainQueryRouter": "11111111111111111111111111111111", - "interchainAccountRouter": "11111111111111111111111111111111", - "merkleRootMultisigIsmFactory": "11111111111111111111111111111111", - "messageIdMultisigIsmFactory": "11111111111111111111111111111111" + "scroll": { + "merkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "messageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "aggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "aggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "routingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "merkleTreeHook": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "storageGasOracle": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "interchainGasPaymaster": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "aggregationHook": "0x9Bc0FAf446E128a618A88a2F28960Fb2Ca169faE", + "protocolFee": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "validatorAnnounce": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638" + }, + "polygonzkevm": { + "merkleRootMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "messageIdMultisigIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "aggregationIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "aggregationHookFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "routingIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "storageGasOracle": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "aggregationHook": "0x8464aF853363B8d6844070F68b0AB34Cb6523d0F", + "protocolFee": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "validatorAnnounce": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9" + }, + "celo": { + "storageGasOracle": "0xD9A9966E7dA9a7f0032bF449FB12696a638E673C", + "proxyAdmin": "0x90f9a2E9eCe93516d65FdaB726a3c62F5960a1b9", + "merkleRootMultisigIsmFactory": "0x4C96a1abc44dc846775CE702C9E9BE821D3b487c", + "messageIdMultisigIsmFactory": "0xaB402f227e892Ef37C105bf06619c0fa106a1fB2", + "aggregationIsmFactory": "0x1722dd970a1F56040712129f5Eeb76B003fd7500", + "aggregationHookFactory": "0xc3745652EFB8555A8b064A0EA78d295133d326D2", + "routingIsmFactory": "0xec748b5623f0B50E4c5eB1CFa7Bd46C3213608b6", + "merkleTreeHook": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "interchainGasPaymaster": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "aggregationHook": "0xc65890329066FB20c339Bc5C22f1756e9D3a4fF5", + "protocolFee": "0x89886d431f9c3eEE64DCD6dAbA3f7D689D98D899", + "mailbox": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb", + "validatorAnnounce": "0xCeF677b65FDaA6804d4403083bb12B8dB3991FE1" + }, + "ethereum": { + "storageGasOracle": "0xc9a103990A8dB11b4f627bc5CD1D0c2685484Ec5", + "proxyAdmin": "0x75EE15Ee1B4A75Fa3e2fDF5DF3253c25599cc659", + "merkleRootMultisigIsmFactory": "0x47e8aF9e30C32Ab91060ED587894288786761B45", + "messageIdMultisigIsmFactory": "0xfA21D9628ADce86531854C2B7ef00F07394B0B69", + "aggregationIsmFactory": "0x46FA191Ad972D9674Ed752B69f9659A0d7b22846", + "aggregationHookFactory": "0x6D2555A8ba483CcF4409C39013F5e9a3285D3C9E", + "routingIsmFactory": "0xCb74c6aE411236CEE6803619916694BE86cF5987", + "merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "aggregationHook": "0xb87AC8EA4533AE017604E44470F7c1E550AC6F10", + "protocolFee": "0x8B05BF30F6247a90006c5837eA63C7905D79e6d8", + "mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239", + "validatorAnnounce": "0xCe74905e51497b4adD3639366708b821dcBcff96" + }, + "avalanche": { + "storageGasOracle": "0x175821F30AdCAA4bbB72Ce98eF76C2E0De2C3f21", + "proxyAdmin": "0xd7CF8c05fd81b8cA7CfF8E6C49B08a9D63265c9B", + "merkleRootMultisigIsmFactory": "0x896cF1D1B66cD211633eDd589fF158E8Cfaf9B54", + "messageIdMultisigIsmFactory": "0x8819D653DF5b1FC0DdB32189a2704E471AF8483c", + "aggregationIsmFactory": "0xa5E13796eB7d2EDCc88012c8cfF90D69B51FcF9f", + "aggregationHookFactory": "0x3bF6Ac986C7Af9A9Ac356C0e99C0041EFd8D96e7", + "routingIsmFactory": "0xA9Ddc70f50009aF8bDB312aA757B4304b0F7BbB3", + "merkleTreeHook": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "interchainGasPaymaster": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "aggregationHook": "0x0165a22BA489F7DA37DAf6397781777D9FCB5708", + "protocolFee": "0xEc4AdA26E51f2685279F37C8aE62BeAd8212D597", + "mailbox": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6", + "validatorAnnounce": "0x9Cad0eC82328CEE2386Ec14a12E81d070a27712f" } } diff --git a/typescript/sdk/src/consts/environments/testnet.json b/typescript/sdk/src/consts/environments/testnet.json index 2126cc1d05..db04e9078a 100644 --- a/typescript/sdk/src/consts/environments/testnet.json +++ b/typescript/sdk/src/consts/environments/testnet.json @@ -8,12 +8,12 @@ "proxyAdmin": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", "mailbox": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", "validatorAnnounce": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", - "defaultIsm": "0x7147a48429D6FA06ec08Ed95b500e68356819f2b", "merkleTreeHook": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", "storageGasOracle": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", "interchainGasPaymaster": "0x28B02B97a850872C4D33C3E024fab6499ad96564", "aggregationHook": "0x168e606fE4A9c8d7F83a3aAA132E831f153e4bAa", - "protocolFee": "0xEe421285728284000ec6c6C55C6F9161faeFfa99" + "protocolFee": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "fallbackRoutingHook": "0x2C6dD6768E669EDB7b53f26067C1C4534862c3de" }, "arbitrumgoerli": { "merkleRootMultisigIsmFactory": "0x17D58eBb5Ea0E2d360c877E119FAef4C4052e6B9", @@ -24,12 +24,12 @@ "proxyAdmin": "0x00DFB81Bfc45fa03060b605273147F274ea807E5", "mailbox": "0x13dABc0351407d5aAa0A50003a166A73b4febfDc", "validatorAnnounce": "0x4a01EEBa1CC20F47A2e60aE4ec932051601FcB9e", - "defaultIsm": "0x8C841784947dEa42f78263D54bec15c0cF65fA22", "merkleTreeHook": "0xf0A38e1eEA49dAc7968F470c3aA0BDE2565A5d80", "storageGasOracle": "0xFc8229ADB46D96056A6e451Fb3c55d60FFeD056f", "interchainGasPaymaster": "0x76189acFA212298d7022624a4633411eE0d2f26F", "aggregationHook": "0xf852EB6b98d84A4296754043a56759a0Ae0E06df", - "protocolFee": "0x0358ba0D90ED2d90fB8cBb610F27C274D8077a0B" + "protocolFee": "0x0358ba0D90ED2d90fB8cBb610F27C274D8077a0B", + "fallbackRoutingHook": "0xEdA6f85f4761A1f9e42FD40CA5a4E8Ce1C764015" }, "optimismgoerli": { "merkleRootMultisigIsmFactory": "0xAbC25d7daDD748948F5cC912A807b0f8FcBb56a9", @@ -40,12 +40,12 @@ "proxyAdmin": "0x800b4be4Dc91E56DE934D9f16888d113eFf89Ebb", "mailbox": "0xB5f021728Ea6223E3948Db2da61d612307945eA2", "validatorAnnounce": "0x24D31e12E4d3bc2C46C994FcE0c828b218A1aeAb", - "defaultIsm": "0x986e076aA22342282B6c2a287e9AaBC8a36161f3", "merkleTreeHook": "0xFEe074B31B5B259eB3109737bE13D39B853b47b9", "storageGasOracle": "0x4927C33299091033D935C15DE6b6073164e99BE0", "interchainGasPaymaster": "0x02A7661273528EfF3d78CBE7CbD1a717b28B89fC", "aggregationHook": "0x1C8A2588b8038BF9B7b1b60dD0EdF5b995A45599", - "protocolFee": "0x962e30F6A3ECDA85c7fa1FcF38cD04efA991Ee20" + "protocolFee": "0x962e30F6A3ECDA85c7fa1FcF38cD04efA991Ee20", + "fallbackRoutingHook": "0xc775c748F8c9F5443151Fd989e8B61375657474d" }, "scrollsepolia": { "merkleRootMultisigIsmFactory": "0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7", @@ -56,12 +56,12 @@ "proxyAdmin": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", "mailbox": "0x3C5154a193D6e2955650f9305c8d80c18C814A68", "validatorAnnounce": "0x527768930D889662Fe7ACF64294871e86e4C2381", - "defaultIsm": "0x4983DDBd279DB930cd883B44AF3f0da7567a06E6", "merkleTreeHook": "0x863E8c26621c52ACa1849C53500606e73BA272F0", "storageGasOracle": "0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C", "interchainGasPaymaster": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD", "aggregationHook": "0x7b63Aa270335F8896717c2A809205F4b650E4268", - "protocolFee": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8" + "protocolFee": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "fallbackRoutingHook": "0xE1CCB130389f687bf745Dd6dc05E50da17d9ea96" }, "alfajores": { "merkleRootMultisigIsmFactory": "0xa9C7e306C0941896CA1fd528aA59089571D8D67E", @@ -77,7 +77,7 @@ "interchainGasPaymaster": "0x44769b0f4a6f01339e131a691cc2eebbb519d297", "aggregationHook": "0xdBabD76358897E68E4964647C1fb8Bf524f5EFdB", "protocolFee": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", - "defaultIsm": "0xFBb1D475d2275D4643B6ba9Dae16f2F5465F9436" + "fallbackRoutingHook": "0x3528B1aeF3a3d29E0eae90ad777A2b4A6a48aC3F" }, "polygonzkevmtestnet": { "merkleRootMultisigIsmFactory": "0xfc6e546510dC9d76057F1f76633FCFfC188CB213", @@ -88,12 +88,12 @@ "proxyAdmin": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8", "mailbox": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", "validatorAnnounce": "0x7914A3349107A7295Bbf2374db5A973d73D1b324", - "defaultIsm": "0xfF5512D605018c185ac159B20354994BD3d75Ae2", "merkleTreeHook": "0x68311418D79fE8d96599384ED767d225635d88a8", "storageGasOracle": "0x3707bc8C7342aA6f693bCe1Bd7671Fca146F7F0A", "interchainGasPaymaster": "0xAD34A66Bf6dB18E858F6B686557075568c6E031C", "aggregationHook": "0x0Fd2C6F0Ad45e766660b9fDebCF36a2AD69536D1", - "protocolFee": "0xddf4C3e791caCaFd26D7fb275549739B38ae6e75" + "protocolFee": "0xddf4C3e791caCaFd26D7fb275549739B38ae6e75", + "fallbackRoutingHook": "0xBF2C366530C1269d531707154948494D3fF4AcA7" }, "sepolia": { "merkleRootMultisigIsmFactory": "0x0a71AcC99967829eE305a285750017C4916Ca269", @@ -102,14 +102,14 @@ "aggregationHookFactory": "0x160C28C92cA453570aD7C031972b58d5Dd128F72", "routingIsmFactory": "0x3603458990BfEb30f99E61B58427d196814D8ce1", "proxyAdmin": "0x97Bbc6bBaFa5Ce3b2FA966c121Af63bD09e940f8", - "defaultIsm": "0x97FE534674A0fA312b730C946A8A8AC9DcF90100", "storageGasOracle": "0x71775B071F77F1ce52Ece810ce084451a3045FFe", "interchainGasPaymaster": "0x6f2756380FD49228ae25Aa7F2817993cB74Ecc56", "aggregationHook": "0xe3147d5618f5e2e100690B50ec923009a4cde14A", "protocolFee": "0x13AC3349Cb159fE86A22cf42DdA803D9f7309DB5", "mailbox": "0xfFAEF09B3cd11D9b20d1a19bECca54EEC2884766", "merkleTreeHook": "0x4917a9746A7B6E0A57159cCb7F5a6744247f2d0d", - "validatorAnnounce": "0xE6105C59480a1B7DD3E4f28153aFdbE12F4CfCD9" + "validatorAnnounce": "0xE6105C59480a1B7DD3E4f28153aFdbE12F4CfCD9", + "fallbackRoutingHook": "0x17Dc724B7a2F09141C13b8AC33B396073785c2BC" }, "fuji": { "merkleRootMultisigIsmFactory": "0x93F50Ac4E5663DAAb03508008d592f6260964f62", @@ -120,12 +120,12 @@ "proxyAdmin": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", "mailbox": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", "validatorAnnounce": "0x4f7179A691F8a684f56cF7Fed65171877d30739a", - "defaultIsm": "0x2d6891ac730E14521Ea0C45A00d3Eb62f2e432df", "merkleTreeHook": "0x9ff6ac3dAf63103620BBf76136eA1AFf43c2F612", "storageGasOracle": "0x9305dE34306886d615B096Bdf23b94a978f6a6c0", "interchainGasPaymaster": "0x6895d3916B94b386fAA6ec9276756e16dAe7480E", "aggregationHook": "0x8E9b4006171c6B75111823e7545Ee5400CEce0B3", - "protocolFee": "0xEbA64c8a9b4a61a9210d5fe7E4375380999C821b" + "protocolFee": "0xEbA64c8a9b4a61a9210d5fe7E4375380999C821b", + "fallbackRoutingHook": "0xc684f7F50DB4b2563218512e021fBdd0BeD6b57E" }, "bsctestnet": { "merkleRootMultisigIsmFactory": "0x3E235B90197E1D6b5DB5ad5aD49f2c1ED6406382", @@ -134,14 +134,14 @@ "aggregationHookFactory": "0xa1145B39F1c7Ef9aA593BC1DB1634b00CC020942", "routingIsmFactory": "0xea12ECFD1f241da323e93F12b4ed936403990190", "proxyAdmin": "0xb12282d2E838Aa5f2A4F9Ee5f624a77b7199A078", - "defaultIsm": "0xEf7cacD303D1886b3dE396B45a184d16f39248E0", "storageGasOracle": "0x124EBCBC018A5D4Efe639f02ED86f95cdC3f6498", "interchainGasPaymaster": "0x0dD20e410bdB95404f71c5a4e7Fa67B892A5f949", "aggregationHook": "0x3d675bB93250Ab7603F40cbb9194bae210784627", "protocolFee": "0x3eF0a63B8976b838704Bcc93C78C56b6653E5a39", "mailbox": "0xF9F6F5646F478d5ab4e20B0F910C92F1CCC9Cc6D", "merkleTreeHook": "0xc6cbF39A747f5E28d1bDc8D9dfDAb2960Abd5A8f", - "validatorAnnounce": "0xf09701B0a93210113D175461b6135a96773B5465" + "validatorAnnounce": "0xf09701B0a93210113D175461b6135a96773B5465", + "fallbackRoutingHook": "0x2670ED2EC08cAd135307556685a96bD4c16b007b" }, "goerli": { "merkleRootMultisigIsmFactory": "0x8e43aCfb338B137A3befd9b92BfD84E128adE0B8", @@ -150,14 +150,14 @@ "aggregationHookFactory": "0x6bc243963f80AEa80948e8538bB114d4122DD9c5", "routingIsmFactory": "0xd16c3f34d6A2e62185aC61f76F83D3AA1E969018", "proxyAdmin": "0x0EdB3604D230963ecE9d83963164CFe2fDef576B", - "defaultIsm": "0x8BbdB0023ef47992b3E83E2B1B290D72A7477EfE", "storageGasOracle": "0xeC34c715ee6d050b2172E8aF650Db779561266C1", "interchainGasPaymaster": "0x0cD26594ea6c6526927C0F5225AC09F6288e7140", "aggregationHook": "0x2dF77b3efe9B8f9aEDf7bFC86f40B048178d8116", "protocolFee": "0x9293B8dAcA7933765de499C992B0Fa86Bb104b0f", "merkleTreeHook": "0x28c294C61D3dE053462d2Cfa5d5f8c8D70605A59", "mailbox": "0x49cfd6Ef774AcAb14814D699e3F7eE36Fdfba932", - "validatorAnnounce": "0x3c182AD9cA8A71bc107Ef440C2667E8360e1158E" + "validatorAnnounce": "0x3c182AD9cA8A71bc107Ef440C2667E8360e1158E", + "fallbackRoutingHook": "0xd9E546CBB9577dC6346EdB40b24E86aE52487ab8" }, "moonbasealpha": { "merkleRootMultisigIsmFactory": "0xA59Ba0A8D4ea5A5DC9c8B0101ba7E6eE6C3399A4", @@ -167,13 +167,13 @@ "routingIsmFactory": "0x385C7f179168f5Da92c72E17AE8EF50F3874077f", "proxyAdmin": "0xb241991527F1C21adE14F55589E5940aC4852Fa0", "mailbox": "0x76189acFA212298d7022624a4633411eE0d2f26F", - "defaultIsm": "0x367241b198C29C6a8B2aa0c9D8350B6F81C2Abb3", "merkleTreeHook": "0x155B1CD2f7Cbc58d403B9BE341FaB6CD77425175", "storageGasOracle": "0x62fA20dE68Dbe425f0bc474b12235a4F8449E608", "interchainGasPaymaster": "0x92F05669A354a032A84FcfABfD13beE1aBc5bFd0", "aggregationHook": "0xaA9d918C49Cea0D2a877252aFb7976B6e3A48623", "protocolFee": "0xe2A73F106902983452713F24Bd019F6eb8712986", - "validatorAnnounce": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416" + "validatorAnnounce": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", + "fallbackRoutingHook": "0xf666A33C451E8371907aD22dd545E1678fCa1582" }, "mumbai": { "merkleRootMultisigIsmFactory": "0xda0780ed3eE577EfE0B856E00f983bF231603307", @@ -181,7 +181,6 @@ "aggregationIsmFactory": "0x54b0d9AB6a99E9C9425D20fa4D9eE9dbf067e886", "aggregationHookFactory": "0x54CA9De95B37365909364672D363D2ecFC4e1Af4", "routingIsmFactory": "0x276C07098879f44F6C4a6ab91B6AAca6a56AD4B1", - "defaultIsm": "0xCbDc6B43fcC9465E18E0eE925170f6F2893625b8", "merkleTreeHook": "0x9AF85731EDd41E2E50F81Ef8a0A69D2fB836EDf9", "proxyAdmin": "0xa99aD6B1c10E92DB8d3510f1865A6d2Ab43EAd58", "storageGasOracle": "0xBEd8Fd6d5c6cBd878479C25f4725C7c842a43821", @@ -189,6 +188,7 @@ "aggregationHook": "0xD546273418733AcEC8c7A67EfB881c9Ea83851bf", "protocolFee": "0x244d1F7e30Be144A87602905baBF86630e8f39DC", "mailbox": "0x2d1889fe5B092CD988972261434F7E5f26041115", - "validatorAnnounce": "0x99303EFF09332cDd93E8BC8b2F07b2416e4501e5" + "validatorAnnounce": "0x99303EFF09332cDd93E8BC8b2F07b2416e4501e5", + "fallbackRoutingHook": "0x31191BA83143b4745745389fEe64990c65F36829" } } diff --git a/typescript/sdk/src/consts/multisigIsm.ts b/typescript/sdk/src/consts/multisigIsm.ts index 3bcda6a5c6..e6c9608e24 100644 --- a/typescript/sdk/src/consts/multisigIsm.ts +++ b/typescript/sdk/src/consts/multisigIsm.ts @@ -4,106 +4,104 @@ import { ChainMap } from '../types'; export const defaultMultisigIsmConfigs: ChainMap = { // ----------------- Mainnets ----------------- celo: { - threshold: 4, + threshold: 2, validators: [ - '0x1f20274b1210046769d48174c2f0e7c25ca7d5c5', // abacus - '0x3bc014bafa43f93d534aed34f750997cdffcf007', // dsrv - '0xd79d506d741fa735938f7b7847a926e34a6fe6b0', // everstake - '0xe4a258bc61e65914c2a477b2a8a433ab4ebdf44b', // zee prime - '0x6aea63b0be4679c1385c26a92a3ff8aa6a8379f2', // staked - '0xc0085e1a49bcc69e534272adb82c74c0e007e1ca', // zkv + '0x63478422679303c3e4fc611b771fa4a707ef7f4a', + '0x2f4e808744df049d8acc050628f7bdd8265807f9', + '0x7bf30afcb6a7d92146d5a910ea4c154fba38d25e', ], }, ethereum: { - threshold: 4, + threshold: 2, validators: [ - '0x4c327ccb881a7542be77500b2833dc84c839e7b7', // abacus - '0x84cb373148ef9112b277e68acf676fefa9a9a9a0', // dsrv - '0x0d860c2b28bec3af4fd3a5997283e460ff6f2789', // everstake - '0xd4c1211f0eefb97a846c4e6d6589832e52fc03db', // zee prime - '0x600c90404d5c9df885404d2cc5350c9b314ea3a2', // staked - '0x892DC66F5B2f8C438E03f6323394e34A9C24F2D6', // zkv + '0x03c842db86a6a3e524d4a6615390c1ea8e2b9541', + '0x4346776b10f5e0d9995d884b7a1dbaee4e24c016', + '0x749d6e7ad949e522c92181dc77f7bbc1c5d71506', ], }, avalanche: { - threshold: 4, + threshold: 2, validators: [ - '0xa7aa52623fe3d78c343008c95894be669e218b8d', // abacus - '0xb6004433fb04f643e2d48ae765c0e7f890f0bc0c', // dsrv - '0xa07e213e0985b21a6128e6c22ab5fb73948b0cc2', // everstake - '0x73853ed9a5f6f2e4c521970a94d43469e3cdaea6', // zee prime - '0xbd2e136cda02ba627ca882e49b184cbe976081c8', // staked - '0x1418126f944a44dad9edbab32294a8c890e7a9e3', // zkv + '0x3fb8263859843bffb02950c492d492cae169f4cf', + '0xe58c63ad669b946e7c8211299f22679deecc9c83', + '0x6c754f1e9cd8287088b46a7c807303d55d728b49', ], }, polygon: { - threshold: 4, + threshold: 2, validators: [ - '0x59a001c3451e7f9f3b4759ea215382c1e9aa5fc1', // abacus - '0x009fb042d28944017177920c1d40da02bfebf474', // dsrv - '0xba4b13e23705a5919c1901150d9697e8ffb3ea71', // everstake - '0x2faa4071b718972f9b4beec1d8cbaa4eb6cca6c6', // zee prime - '0x5ae9b0f833dfe09ef455562a1f603f1634504dd6', // staked - '0x6a163d312f7352a95c9b81dca15078d5bf77a442', // zkv + '0x12ecb319c7f4e8ac5eb5226662aeb8528c5cefac', + '0x8dd8f8d34b5ecaa5f66de24b01acd7b8461c3916', + '0xdbf3666de031bea43ec35822e8c33b9a9c610322', ], }, bsc: { - threshold: 4, + threshold: 2, validators: [ - '0xcc84b1eb711e5076b2755cf4ad1d2b42c458a45e', // abacus - '0xefe34eae2bca1846b895d2d0762ec21796aa196a', // dsrv - '0x662674e80e189b0861d6835c287693f50ee0c2ff', // everstake - '0x8a0f59075af466841808c529624807656309c9da', // zee prime - '0xdd2ff046ccd748a456b4757a73d47f165469669f', // staked - '0x034c4924c30ec4aa1b7f3ad58548988f0971e1bf', // zkv + '0x570af9b7b36568c8877eebba6c6727aa9dab7268', + '0x7bf928d5d262365d31d64eaa24755d48c3cae313', + '0x03047213365800f065356b4a2fe97c3c3a52296a', ], }, arbitrum: { - threshold: 4, + threshold: 2, validators: [ - '0xbcb815f38d481a5eba4d7ac4c9e74d9d0fc2a7e7', // abacus - '0xd839424e2e5ace0a81152298dc2b1e3bb3c7fb20', // dsrv - '0xb8085c954b75b7088bcce69e61d12fcef797cd8d', // everstake - '0x9856dcb10fd6e5407fa74b5ab1d3b96cc193e9b7', // zee prime - '0x505dff4e0827aa5065f5e001db888e0569d46490', // staked - '0x25c6779d4610f940bf2488732e10bcffb9d36f81', // ZKV + '0x4d966438fe9e2b1e7124c87bbb90cb4f0f6c59a1', + '0x6333e110b8a261cab28acb43030bcde59f26978a', + '0x3369e12edd52570806f126eb50be269ba5e65843', ], }, optimism: { - threshold: 4, + threshold: 2, validators: [ - '0x9f2296d5cfc6b5176adc7716c7596898ded13d35', // abacus - '0x9c10bbe8efa03a8f49dfdb5c549258e3a8dca097', // dsrv - '0x62144d4a52a0a0335ea5bb84392ef9912461d9dd', // everstake - '0xaff4718d5d637466ad07441ee3b7c4af8e328dbd', // zee prime - '0xc64d1efeab8ae222bc889fe669f75d21b23005d9', // staked - '0xfa174eb2b4921bb652bc1ada3e8b00e7e280bf3c', // ZKV + '0x20349eadc6c72e94ce38268b96692b1a5c20de4f', + '0x04d040cee072272789e2d1f29aef73b3ad098db5', + '0x779a17e035018396724a6dec8a59bda1b5adf738', ], }, moonbeam: { - threshold: 3, + threshold: 2, validators: [ - '0x237243d32d10e3bdbbf8dbcccc98ad44c1c172ea', // abacus - '0x9509c8cf0a06955f27342262af501b74874e98fb', // dsrv - '0xb7113c999e4d587b162dd1a28c73f3f51c6bdcdc', // everstake - '0x26725501597d47352a23cd26f122709f69ad53bc', // staked + '0x2225e2f4e9221049456da93b71d2de41f3b6b2a8', + '0x4fe067bb455358e295bfcfb92519a6f9de94b98e', + '0xcc4a78aa162482bea43313cd836ba7b560b44fc4', ], }, gnosis: { - threshold: 3, + threshold: 2, + validators: [ + '0xd4df66a859585678f2ea8357161d896be19cc1ca', + '0x06a833508579f8b59d756b3a1e72451fc70840c3', + '0xb93a72cee19402553c9dd7fed2461aebd04e2454', + ], + }, + // solana: { + // threshold: 0, + // validators: [ + // ], + // }, + base: { + threshold: 2, + validators: [ + '0xb9453d675e0fa3c178a17b4ce1ad5b1a279b3af9', + '0x4512985a574cb127b2af2d4bb676876ce804e3f8', + '0xb144bb2f599a5af095bc30367856f27ea8a8adc7', + ], + }, + scroll: { + threshold: 2, validators: [ - '0xd0529ec8df08d0d63c0f023786bfa81e4bb51fd6', // abacus - '0x8a72ff8571c53c62c7ca02e8c97a443cd5674383', // dsrv - '0x4075c2f6bd6d9562067cfe551d49c2bcafa7d692', // everstake - '0xa18580444eaeb1c5957e7b66a6bf84b6519f904d', // staked + '0xad557170a9f2f21c35e03de07cb30dcbcc3dff63', + '0xb37fe43a9f47b7024c2d5ae22526cc66b5261533', + '0x7210fa0a6be39a75cb14d682ebfb37e2b53ecbe5', ], }, - solana: { + polygonzkevm: { threshold: 2, validators: [ - '0x3cd1a081f38874bbb075bf10b62adcb858db864c', // abacus - '0x2b0c45f6111ae1c1684d4287792e3bd6ebd1abcc', // ZKV - '0x7b9ec253a8ba38994457eb9dbe386938d545351a', // everstake + '0x86f2a44592bb98da766e880cfd70d3bbb295e61a', + '0xc84076030bdabaabb9e61161d833dd84b700afda', + '0x6a1da2e0b7ae26aaece1377c0a4dbe25b85fa3ca', ], }, // ----------------- Testnets ----------------- diff --git a/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts b/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts index c466cac291..44d2e1d1d0 100644 --- a/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts +++ b/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts @@ -9,7 +9,7 @@ import { TestChains } from '../consts/chains'; import { HyperlaneContractsMap } from '../contracts/types'; import { HyperlaneProxyFactoryDeployer } from '../deploy/HyperlaneProxyFactoryDeployer'; import { HyperlaneIsmFactory } from '../ism/HyperlaneIsmFactory'; -import { AggregationIsmConfig, ModuleType } from '../ism/types'; +import { AggregationIsmConfig, IsmType } from '../ism/types'; import { MultiProvider } from '../providers/MultiProvider'; import { testCoreConfig } from '../test/testUtils'; import { ChainMap } from '../types'; @@ -95,7 +95,7 @@ describe('core', async () => { coreConfig, (_, config) => { const ismConfig: AggregationIsmConfig = { - type: ModuleType.AGGREGATION, + type: IsmType.AGGREGATION, modules: [testIsm, testIsm], threshold: 2, }; diff --git a/typescript/sdk/src/core/HyperlaneCoreDeployer.ts b/typescript/sdk/src/core/HyperlaneCoreDeployer.ts index acb811b237..a1ee914563 100644 --- a/typescript/sdk/src/core/HyperlaneCoreDeployer.ts +++ b/typescript/sdk/src/core/HyperlaneCoreDeployer.ts @@ -90,9 +90,16 @@ export class HyperlaneCoreDeployer extends HyperlaneDeployer< // configure mailbox try { + this.logger('Initializing mailbox'); await this.multiProvider.handleTx( chain, - mailbox.initialize(config.owner, defaultIsm, defaultHook, requiredHook), + mailbox.initialize( + config.owner, + defaultIsm, + defaultHook, + requiredHook, + this.multiProvider.getTransactionOverrides(chain), + ), ); } catch (e: any) { if (!e.message.includes('already initialized')) { @@ -155,7 +162,7 @@ export class HyperlaneCoreDeployer extends HyperlaneDeployer< ); this.addDeployedContracts( chain, - hooks, + this.hookDeployer.deployedContracts[chain], this.hookDeployer.verificationInputs[chain], ); return hooks[config.type].address; diff --git a/typescript/sdk/src/core/MultiProtocolCore.test.ts b/typescript/sdk/src/core/MultiProtocolCore.test.ts index 5c21e842d7..57ee54bcea 100644 --- a/typescript/sdk/src/core/MultiProtocolCore.test.ts +++ b/typescript/sdk/src/core/MultiProtocolCore.test.ts @@ -37,7 +37,8 @@ describe('MultiProtocolCore', () => { }); }); - describe('checks delivery', () => { + // TODO: update for v3 + describe.skip('checks delivery', () => { it('to EVM', async () => { const multiProvider = new MultiProtocolProvider(); const core = MultiProtocolCore.fromEnvironment('mainnet', multiProvider); diff --git a/typescript/sdk/src/deploy/HyperlaneDeployer.ts b/typescript/sdk/src/deploy/HyperlaneDeployer.ts index a438a71f3a..22552dd383 100644 --- a/typescript/sdk/src/deploy/HyperlaneDeployer.ts +++ b/typescript/sdk/src/deploy/HyperlaneDeployer.ts @@ -237,15 +237,20 @@ export abstract class HyperlaneDeployer< setHook: (contract: C, hook: Address) => Promise, ): Promise { const configuredHook = await getHook(contract); - if (targetHook !== configuredHook) { + if (!eqAddress(targetHook, configuredHook)) { await this.runIfOwner(chain, contract, async () => { - this.logger(`Set hook on ${chain}`); + this.logger( + `Set hook on ${chain} to ${targetHook}, currently is ${configuredHook}`, + ); await this.multiProvider.sendTransaction( chain, setHook(contract, targetHook), ); - if (targetHook !== (await getHook(contract))) { - throw new Error(`Set hook failed on ${chain}`); + const actualHook = await getHook(contract); + if (!eqAddress(targetHook, actualHook)) { + throw new Error( + `Set hook failed on ${chain}, wanted ${targetHook}, got ${actualHook}`, + ); } }); } diff --git a/typescript/sdk/src/gas/HyperlaneIgp.ts b/typescript/sdk/src/gas/HyperlaneIgp.ts index 0f7c0e46ef..344035e174 100644 --- a/typescript/sdk/src/gas/HyperlaneIgp.ts +++ b/typescript/sdk/src/gas/HyperlaneIgp.ts @@ -24,6 +24,7 @@ export class HyperlaneIgp extends HyperlaneApp { if (!envAddresses) { throw new Error(`No addresses found for ${env}`); } + /// @ts-ignore return HyperlaneIgp.fromAddressesMap(envAddresses, multiProvider); } diff --git a/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts b/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts index c8b6d85fd3..f7c09d36d3 100644 --- a/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts +++ b/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts @@ -52,6 +52,7 @@ export class HyperlaneIgpDeployer extends HyperlaneDeployer< !eqAddress(currentGasConfig.gasOracle, storageGasOracle.address) || !currentGasConfig.gasOverhead.eq(newGasOverhead) ) { + this.logger(`Setting gas params for ${remote} to ${newGasOverhead}`); gasParamsToSet.push({ remoteDomain: remoteId, config: { @@ -66,7 +67,10 @@ export class HyperlaneIgpDeployer extends HyperlaneDeployer< await this.runIfOwner(chain, igp, async () => this.multiProvider.handleTx( chain, - igp.setDestinationGasConfigs(gasParamsToSet), + igp.setDestinationGasConfigs( + gasParamsToSet, + this.multiProvider.getTransactionOverrides(chain), + ), ), ); } diff --git a/typescript/sdk/src/hook/HyperlaneHookDeployer.ts b/typescript/sdk/src/hook/HyperlaneHookDeployer.ts index 796c2b8b4b..28a159ba0d 100644 --- a/typescript/sdk/src/hook/HyperlaneHookDeployer.ts +++ b/typescript/sdk/src/hook/HyperlaneHookDeployer.ts @@ -1,9 +1,16 @@ import debug from 'debug'; +import { ethers } from 'ethers'; import { + DomainRoutingHook, + FallbackDomainRoutingHook, + IL1CrossDomainMessenger__factory, + OPStackHook, + OPStackIsm, StaticAggregationHook__factory, StaticProtocolFee, } from '@hyperlane-xyz/core'; +import { Address, addressToBytes32 } from '@hyperlane-xyz/utils'; import { HyperlaneContracts } from '../contracts/types'; import { CoreAddresses } from '../core/contracts'; @@ -11,15 +18,19 @@ import { HyperlaneDeployer } from '../deploy/HyperlaneDeployer'; import { HyperlaneIgpDeployer } from '../gas/HyperlaneIgpDeployer'; import { IgpFactories } from '../gas/contracts'; import { HyperlaneIsmFactory } from '../ism/HyperlaneIsmFactory'; +import { IsmType, OpStackIsmConfig } from '../ism/types'; import { MultiProvider } from '../providers/MultiProvider'; import { ChainMap, ChainName } from '../types'; import { HookFactories, hookFactories } from './contracts'; import { AggregationHookConfig, + DomainRoutingHookConfig, + FallbackRoutingHookConfig, HookConfig, HookType, IgpHookConfig, + OpStackHookConfig, ProtocolFeeHookConfig, } from './types'; @@ -49,29 +60,38 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< coreAddresses = this.core[chain], ): Promise> { // other simple hooks can go here + let hook; if (config.type === HookType.MERKLE_TREE) { const mailbox = coreAddresses.mailbox; if (!mailbox) { throw new Error(`Mailbox address is required for ${config.type}`); } - const hook = await this.deployContract(chain, config.type, [mailbox]); + hook = await this.deployContract(chain, config.type, [mailbox]); return { [config.type]: hook } as any; } else if (config.type === HookType.INTERCHAIN_GAS_PAYMASTER) { return this.deployIgp(chain, config, coreAddresses) as any; } else if (config.type === HookType.AGGREGATION) { - return this.deployAggregation(chain, config, coreAddresses); + return this.deployAggregation(chain, config, coreAddresses); // deploy from factory } else if (config.type === HookType.PROTOCOL_FEE) { - const hook = await this.deployProtocolFee(chain, config); - return { [config.type]: hook } as any; + hook = await this.deployProtocolFee(chain, config); + } else if (config.type === HookType.OP_STACK) { + hook = await this.deployOpStack(chain, config, coreAddresses); + } else if ( + config.type === HookType.ROUTING || + config.type === HookType.FALLBACK_ROUTING + ) { + hook = await this.deployRouting(chain, config, coreAddresses); } - - throw new Error(`Unexpected hook type: ${JSON.stringify(config)}`); + const deployedContracts = { [config.type]: hook } as any; + this.addDeployedContracts(chain, deployedContracts); + return deployedContracts; } async deployProtocolFee( chain: ChainName, config: ProtocolFeeHookConfig, ): Promise { + this.logger('Deploying StaticProtocolFeeHook for %s', chain); return this.deployContract(chain, HookType.PROTOCOL_FEE, [ config.maxProtocolFee, config.protocolFee, @@ -85,6 +105,7 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< config: IgpHookConfig, coreAddresses = this.core[chain], ): Promise> { + this.logger('Deploying IGP as hook for %s', chain); if (coreAddresses.proxyAdmin) { this.igpDeployer.writeCache( chain, @@ -107,6 +128,7 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< config: AggregationHookConfig, coreAddresses = this.core[chain], ): Promise> { + this.logger('Deploying AggregationHook for %s', chain); const aggregatedHooks: string[] = []; let hooks: any = {}; const output: any = {}; @@ -121,11 +143,7 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< output[hookConfig.type] = subhooks[hookConfig.type].address; } this.logger( - `Deploying static address set as aggregationHook comprising of ${JSON.stringify( - output, - null, - 4, - )}`, + `Deploying aggregation hook of ${config.hooks.map((h) => h.type)}`, ); const address = await this.ismFactory.deployStaticAddressSet( chain, @@ -136,6 +154,144 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< address, this.multiProvider.getSignerOrProvider(chain), ); + this.addDeployedContracts(chain, hooks); return hooks; } + + async deployOpStack( + chain: ChainName, + config: OpStackHookConfig, + coreAddresses = this.core[chain], + ): Promise { + this.logger( + 'Deploying OPStackHook for %s to %s', + chain, + config.destinationChain, + ); + const mailbox = coreAddresses.mailbox; + if (!mailbox) { + throw new Error(`Mailbox address is required for ${config.type}`); + } + // fetch l2 messenger address from l1 messenger + const l1Messenger = IL1CrossDomainMessenger__factory.connect( + config.nativeBridge, + this.multiProvider.getSignerOrProvider(chain), + ); + const l2Messenger: Address = await l1Messenger.OTHER_MESSENGER(); + // deploy opstack ism + const ismConfig: OpStackIsmConfig = { + type: IsmType.OP_STACK, + origin: chain, + nativeBridge: l2Messenger, + }; + const opstackIsm = (await this.ismFactory.deploy( + config.destinationChain, + ismConfig, + chain, + )) as OPStackIsm; + // deploy opstack hook + const hook = await this.deployContract(chain, HookType.OP_STACK, [ + mailbox, + this.multiProvider.getDomainId(config.destinationChain), + addressToBytes32(opstackIsm.address), + config.nativeBridge, + ]); + const overrides = this.multiProvider.getTransactionOverrides(chain); + // set authorized hook on opstack ism + const authorizedHook = await opstackIsm.authorizedHook(); + if (authorizedHook === addressToBytes32(hook.address)) { + this.logger('Authorized hook already set on ism %s', opstackIsm.address); + return hook; + } else if ( + authorizedHook !== addressToBytes32(ethers.constants.AddressZero) + ) { + this.logger( + 'Authorized hook mismatch on ism %s, expected %s, got %s', + opstackIsm.address, + addressToBytes32(hook.address), + authorizedHook, + ); + throw new Error('Authorized hook mismatch'); + } + // check if mismatch and redeploy hook + this.logger( + 'Setting authorized hook %s on ism % on destination %s', + hook.address, + opstackIsm.address, + config.destinationChain, + ); + await this.multiProvider.handleTx( + config.destinationChain, + opstackIsm.setAuthorizedHook(addressToBytes32(hook.address), overrides), + ); + + return hook; + } + + async deployRouting( + chain: ChainName, + config: DomainRoutingHookConfig | FallbackRoutingHookConfig, + coreAddresses = this.core[chain], + ): Promise { + const mailbox = coreAddresses?.mailbox; + if (!mailbox) { + throw new Error(`Mailbox address is required for ${config.type}`); + } + + let routingHook: DomainRoutingHook | FallbackDomainRoutingHook; + switch (config.type) { + case HookType.ROUTING: { + this.logger('Deploying DomainRoutingHook for %s', chain); + routingHook = await this.deployContract(chain, HookType.ROUTING, [ + mailbox, + config.owner, + ]); + break; + } + case HookType.FALLBACK_ROUTING: { + this.logger('Deploying FallbackDomainRoutingHook for %s', chain); + const fallbackHook = await this.deployContracts( + chain, + config.fallback, + coreAddresses, + ); + routingHook = await this.deployContract( + chain, + HookType.FALLBACK_ROUTING, + [mailbox, config.owner, fallbackHook[config.fallback.type].address], + ); + break; + } + default: + throw new Error(`Unexpected hook type: ${config}`); + } + + const routingConfigs: DomainRoutingHook.HookConfigStruct[] = []; + for (const [dest, hookConfig] of Object.entries(config.domains)) { + const destDomain = this.multiProvider.getDomainId(dest); + if (typeof hookConfig === 'string') { + routingConfigs.push({ + destination: destDomain, + hook: hookConfig, + }); + } else { + const hook = await this.deployContracts( + chain, + hookConfig, + coreAddresses, + ); + routingConfigs.push({ + destination: destDomain, + hook: hook[hookConfig.type].address, + }); + } + } + + await this.multiProvider.handleTx( + chain, + routingHook.setHooks(routingConfigs), + ); + + return routingHook; + } } diff --git a/typescript/sdk/src/hook/contracts.ts b/typescript/sdk/src/hook/contracts.ts index 9e5782d6ec..aa0651584d 100644 --- a/typescript/sdk/src/hook/contracts.ts +++ b/typescript/sdk/src/hook/contracts.ts @@ -1,6 +1,9 @@ import { + DomainRoutingHook__factory, + FallbackDomainRoutingHook__factory, InterchainGasPaymaster__factory, MerkleTreeHook__factory, + OPStackHook__factory, StaticAggregationHook__factory, StaticProtocolFee__factory, } from '@hyperlane-xyz/core'; @@ -12,6 +15,9 @@ export const hookFactories = { [HookType.PROTOCOL_FEE]: new StaticProtocolFee__factory(), [HookType.INTERCHAIN_GAS_PAYMASTER]: new InterchainGasPaymaster__factory(), // unused [HookType.AGGREGATION]: new StaticAggregationHook__factory(), // unused + [HookType.OP_STACK]: new OPStackHook__factory(), + [HookType.ROUTING]: new DomainRoutingHook__factory(), + [HookType.FALLBACK_ROUTING]: new FallbackDomainRoutingHook__factory(), }; export type HookFactories = typeof hookFactories; diff --git a/typescript/sdk/src/hook/types.ts b/typescript/sdk/src/hook/types.ts index 72d7a435c5..a0e60a88b7 100644 --- a/typescript/sdk/src/hook/types.ts +++ b/typescript/sdk/src/hook/types.ts @@ -3,12 +3,16 @@ import { BigNumber } from 'ethers'; import { Address } from '@hyperlane-xyz/utils'; import { IgpConfig } from '../gas/types'; +import { ChainMap, ChainName } from '../types'; export enum HookType { MERKLE_TREE = 'merkleTreeHook', INTERCHAIN_GAS_PAYMASTER = 'interchainGasPaymaster', AGGREGATION = 'aggregationHook', PROTOCOL_FEE = 'protocolFee', + OP_STACK = 'opStackHook', + ROUTING = 'domainRoutingHook', + FALLBACK_ROUTING = 'fallbackRoutingHook', } export type MerkleTreeHookConfig = { @@ -32,8 +36,31 @@ export type ProtocolFeeHookConfig = { owner: Address; }; +export type OpStackHookConfig = { + type: HookType.OP_STACK; + nativeBridge: Address; + destinationChain: ChainName; +}; + +type RoutingHookConfig = { + owner: Address; + domains: ChainMap; +}; + +export type DomainRoutingHookConfig = RoutingHookConfig & { + type: HookType.ROUTING; +}; + +export type FallbackRoutingHookConfig = RoutingHookConfig & { + type: HookType.FALLBACK_ROUTING; + fallback: HookConfig; +}; + export type HookConfig = | MerkleTreeHookConfig | AggregationHookConfig | IgpHookConfig - | ProtocolFeeHookConfig; + | ProtocolFeeHookConfig + | OpStackHookConfig + | DomainRoutingHookConfig + | FallbackRoutingHookConfig; diff --git a/typescript/sdk/src/index.ts b/typescript/sdk/src/index.ts index 95da574d2d..33f5cffa01 100644 --- a/typescript/sdk/src/index.ts +++ b/typescript/sdk/src/index.ts @@ -112,10 +112,13 @@ export { export { HyperlaneHookDeployer } from './hook/HyperlaneHookDeployer'; export { AggregationHookConfig, + DomainRoutingHookConfig, + FallbackRoutingHookConfig, HookConfig, HookType, IgpHookConfig, MerkleTreeHookConfig, + OpStackHookConfig, ProtocolFeeHookConfig, } from './hook/types'; export { @@ -127,9 +130,11 @@ export { AggregationIsmConfig, DeployedIsm, IsmConfig, + IsmType, ModuleType, MultisigConfig, MultisigIsmConfig, + OpStackIsmConfig, RoutingIsmConfig, } from './ism/types'; export { diff --git a/typescript/sdk/src/ism/HyperlaneIsmFactory.hardhat-test.ts b/typescript/sdk/src/ism/HyperlaneIsmFactory.hardhat-test.ts index cf12f7ee63..cdb0ba9edc 100644 --- a/typescript/sdk/src/ism/HyperlaneIsmFactory.hardhat-test.ts +++ b/typescript/sdk/src/ism/HyperlaneIsmFactory.hardhat-test.ts @@ -15,6 +15,7 @@ import { import { AggregationIsmConfig, IsmConfig, + IsmType, ModuleType, MultisigIsmConfig, RoutingIsmConfig, @@ -33,7 +34,7 @@ const randomMultisigIsmConfig = (m: number, n: number): MultisigIsmConfig => { const emptyArray = new Array(n).fill(0); const validators = emptyArray.map(() => randomAddress()); return { - type: ModuleType.MERKLE_ROOT_MULTISIG, + type: IsmType.MERKLE_ROOT_MULTISIG, validators, threshold: m, }; @@ -47,7 +48,7 @@ const randomIsmConfig = (depth = 0, maxDepth = 2): IsmConfig => { return randomMultisigIsmConfig(randomInt(n, 1), n); } else if (moduleType === ModuleType.ROUTING) { const config: RoutingIsmConfig = { - type: ModuleType.ROUTING, + type: IsmType.ROUTING, owner: randomAddress(), domains: Object.fromEntries( TestChains.map((c) => [c, randomIsmConfig(depth + 1)]), @@ -60,7 +61,7 @@ const randomIsmConfig = (depth = 0, maxDepth = 2): IsmConfig => { .fill(0) .map(() => randomIsmConfig(depth + 1)); const config: AggregationIsmConfig = { - type: ModuleType.AGGREGATION, + type: IsmType.AGGREGATION, threshold: randomInt(n, 1), modules, }; diff --git a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts index 4556f89c59..0e1502fdd2 100644 --- a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts +++ b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts @@ -1,5 +1,7 @@ import { debug } from 'debug'; import { ethers } from 'ethers'; +import fs from 'fs'; +import path from 'path'; import { DomainRoutingIsm__factory, @@ -7,6 +9,7 @@ import { IInterchainSecurityModule__factory, IMultisigIsm__factory, IRoutingIsm__factory, + OPStackIsm__factory, StaticAddressSetFactory, StaticAggregationIsm__factory, StaticThresholdAddressSetFactory, @@ -15,6 +18,7 @@ import { import { Address, eqAddress, formatMessage, warn } from '@hyperlane-xyz/utils'; import { HyperlaneApp } from '../app/HyperlaneApp'; +import { chainMetadata } from '../consts/chainMetadata'; import { HyperlaneEnvironment, hyperlaneEnvironments, @@ -28,10 +32,14 @@ import { FactoryFactories, factoryFactories } from './contracts'; import { AggregationIsmConfig, DeployedIsm, + DeployedIsmType, IsmConfig, + IsmType, ModuleType, MultisigIsmConfig, + OpStackIsmConfig, RoutingIsmConfig, + ismTypeToModuleType, } from './types'; export class HyperlaneIsmFactory extends HyperlaneApp { @@ -48,6 +56,7 @@ export class HyperlaneIsmFactory extends HyperlaneApp { if (!envAddresses) { throw new Error(`No addresses found for ${env}`); } + /// @ts-ignore return HyperlaneIsmFactory.fromAddressesMap(envAddresses, multiProvider); } @@ -67,59 +76,52 @@ export class HyperlaneIsmFactory extends HyperlaneApp { ); } - async deploy( + async deploy( chain: ChainName, - config: IsmConfig, + config: C, origin?: ChainName, ): Promise { - let contract: DeployedIsm; if (typeof config === 'string') { - // TODO: return the appropriate ISM type + // @ts-ignore return IInterchainSecurityModule__factory.connect( config, this.multiProvider.getSignerOrProvider(chain), ); } - if ( - config.type === ModuleType.MERKLE_ROOT_MULTISIG || - config.type === ModuleType.MESSAGE_ID_MULTISIG - ) { - switch (config.type) { - case ModuleType.MERKLE_ROOT_MULTISIG: - this.logger( - `Deploying Merkle Root Multisig ISM to ${chain} for verifying ${origin}`, - ); - break; - case ModuleType.MESSAGE_ID_MULTISIG: - this.logger( - `Deploying Message ID Multisig ISM to ${chain} for verifying ${origin}`, - ); - break; - } - contract = await this.deployMultisigIsm(chain, config); - } else if (config.type === ModuleType.ROUTING) { - this.logger( - `Deploying Routing ISM to ${chain} for verifying ${Object.keys( - config.domains, - )}`, - ); - contract = await this.deployRoutingIsm(chain, config); - } else if (config.type === ModuleType.AGGREGATION) { - this.logger(`Deploying Aggregation ISM to ${chain}`); - contract = await this.deployAggregationIsm(chain, config, origin); - } else if (config.type === ModuleType.NULL) { - this.logger(`Deploying Test ISM to ${chain}`); - contract = await this.multiProvider.handleDeploy( - chain, - new TestIsm__factory(), - [], - ); - } else { - throw new Error(`Unsupported ISM type`); + const ismType = config.type; + this.logger( + `Deploying ${ismType} to ${chain} ${ + origin ? `(for verifying ${origin})` : '' + }`, + ); + + let contract: DeployedIsmType[typeof ismType]; + switch (ismType) { + case IsmType.MESSAGE_ID_MULTISIG: + case IsmType.MERKLE_ROOT_MULTISIG: + contract = await this.deployMultisigIsm(chain, config); + break; + case IsmType.ROUTING: + contract = await this.deployRoutingIsm(chain, config); + break; + case IsmType.AGGREGATION: + contract = await this.deployAggregationIsm(chain, config, origin); + break; + case IsmType.OP_STACK: + contract = await this.deployOpStackIsm(chain, config); + break; + case IsmType.TEST_ISM: + contract = await this.multiProvider.handleDeploy( + chain, + new TestIsm__factory(), + [], + ); + break; + default: + throw new Error(`Unsupported ISM type ${ismType}`); } - const moduleType = ModuleType[config.type]; if (!this.deployedIsms[chain]) { this.deployedIsms[chain] = {}; } @@ -129,10 +131,10 @@ export class HyperlaneIsmFactory extends HyperlaneApp { if (!this.deployedIsms[chain][origin]) { this.deployedIsms[chain][origin] = {}; } - this.deployedIsms[chain][origin][moduleType] = contract; + this.deployedIsms[chain][origin][ismType] = contract; } else { // otherwise store the entry directly - this.deployedIsms[chain][moduleType] = contract; + this.deployedIsms[chain][ismType] = contract; } return contract; @@ -141,7 +143,7 @@ export class HyperlaneIsmFactory extends HyperlaneApp { private async deployMultisigIsm(chain: ChainName, config: MultisigIsmConfig) { const signer = this.multiProvider.getSigner(chain); const multisigIsmFactory = - config.type === ModuleType.MERKLE_ROOT_MULTISIG + config.type === IsmType.MERKLE_ROOT_MULTISIG ? this.getContracts(chain).merkleRootMultisigIsmFactory : this.getContracts(chain).messageIdMultisigIsmFactory; @@ -211,7 +213,8 @@ export class HyperlaneIsmFactory extends HyperlaneApp { this.getContracts(chain).aggregationIsmFactory; const addresses: Address[] = []; for (const module of config.modules) { - addresses.push((await this.deploy(chain, module, origin)).address); + const submodule = await this.deploy(chain, module, origin); + addresses.push(submodule.address); } const address = await this.deployStaticAddressSet( chain, @@ -222,6 +225,23 @@ export class HyperlaneIsmFactory extends HyperlaneApp { return IAggregationIsm__factory.connect(address, signer); } + private async deployOpStackIsm(chain: ChainName, config: OpStackIsmConfig) { + const recoveredIsm = getDeployedIsms(config.origin, chain, config.type); + if (recoveredIsm) { + this.logger('Recovered OpStackIsm from deployedIsms'); + return OPStackIsm__factory.connect( + recoveredIsm, + this.multiProvider.getSignerOrProvider(chain), + ); + } else { + return await this.multiProvider.handleDeploy( + chain, + new OPStackIsm__factory(), + [config.nativeBridge], + ); + } + } + async deployStaticAddressSet( chain: ChainName, factory: StaticThresholdAddressSetFactory | StaticAddressSetFactory, @@ -338,17 +358,19 @@ export async function moduleCanCertainlyVerify( } else { // destModule is an IsmConfig switch (destModule.type) { - case ModuleType.MERKLE_ROOT_MULTISIG: - case ModuleType.MESSAGE_ID_MULTISIG: + case IsmType.MERKLE_ROOT_MULTISIG: + case IsmType.MESSAGE_ID_MULTISIG: return destModule.threshold > 0; - case ModuleType.ROUTING: - return moduleCanCertainlyVerify( + case IsmType.ROUTING: { + const checking = moduleCanCertainlyVerify( destModule.domains[destination], multiProvider, origin, destination, ); - case ModuleType.AGGREGATION: { + return checking; + } + case IsmType.AGGREGATION: { let verified = 0; for (const subModule of destModule.modules) { const canVerify = await moduleCanCertainlyVerify( @@ -363,9 +385,13 @@ export async function moduleCanCertainlyVerify( } return verified >= destModule.threshold; } - case ModuleType.NULL: { + case IsmType.OP_STACK: + return destModule.nativeBridge !== ethers.constants.AddressZero; + case IsmType.TEST_ISM: { return true; } + default: + throw new Error(`Unsupported module type: ${(destModule as any).type}`); } } } @@ -394,10 +420,10 @@ export async function moduleMatchesConfig( provider, ); const actualType = await module.moduleType(); - if (actualType !== config.type) return false; + if (actualType !== ismTypeToModuleType(config.type)) return false; let matches = true; switch (config.type) { - case ModuleType.MERKLE_ROOT_MULTISIG: { + case IsmType.MERKLE_ROOT_MULTISIG: { // A MerkleRootMultisigIsm matches if validators and threshold match the config const expectedAddress = await contracts.merkleRootMultisigIsmFactory.getAddress( @@ -407,7 +433,7 @@ export async function moduleMatchesConfig( matches = eqAddress(expectedAddress, module.address); break; } - case ModuleType.MESSAGE_ID_MULTISIG: { + case IsmType.MESSAGE_ID_MULTISIG: { // A MessageIdMultisigIsm matches if validators and threshold match the config const expectedAddress = await contracts.messageIdMultisigIsmFactory.getAddress( @@ -417,7 +443,7 @@ export async function moduleMatchesConfig( matches = eqAddress(expectedAddress, module.address); break; } - case ModuleType.ROUTING: { + case IsmType.ROUTING: { // A RoutingIsm matches if: // 1. The set of domains in the config equals those on-chain // 2. The modules for each domain match the config @@ -447,7 +473,7 @@ export async function moduleMatchesConfig( } break; } - case ModuleType.AGGREGATION: { + case IsmType.AGGREGATION: { // An AggregationIsm matches if: // 1. The threshold matches the config // 2. There is a bijection between on and off-chain configured modules @@ -483,7 +509,13 @@ export async function moduleMatchesConfig( } break; } - case ModuleType.NULL: { + case IsmType.OP_STACK: { + const opStackIsm = OPStackIsm__factory.connect(moduleAddress, provider); + const type = await opStackIsm.moduleType(); + matches = matches && type === ModuleType.NULL; + break; + } + case IsmType.TEST_ISM: { // This is just a TestISM matches = true; break; @@ -510,11 +542,11 @@ export function collectValidators( let validators: string[] = []; if ( - config.type === ModuleType.MERKLE_ROOT_MULTISIG || - config.type === ModuleType.MESSAGE_ID_MULTISIG + config.type === IsmType.MERKLE_ROOT_MULTISIG || + config.type === IsmType.MESSAGE_ID_MULTISIG ) { validators = config.validators; - } else if (config.type === ModuleType.ROUTING) { + } else if (config.type === IsmType.ROUTING) { if (Object.keys(config.domains).includes(origin)) { const domainValidators = collectValidators( origin, @@ -522,14 +554,14 @@ export function collectValidators( ); validators = [...domainValidators]; } - } else if (config.type === ModuleType.AGGREGATION) { + } else if (config.type === IsmType.AGGREGATION) { const aggregatedValidators = config.modules.map((c) => collectValidators(origin, c), ); aggregatedValidators.forEach((set) => { validators = validators.concat([...set]); }); - } else if (config.type === ModuleType.NULL) { + } else if (config.type === IsmType.TEST_ISM) { // This is just a TestISM return new Set([]); } else { @@ -538,3 +570,23 @@ export function collectValidators( return new Set(validators); } + +// recover non-factory ISM deployments +export function getDeployedIsms( + origin: ChainName, + destination: ChainName, + ismType: string, +): Address | null { + // check if mainnet or testnet + const isTestnet = + chainMetadata[origin].isTestnet || chainMetadata[destination].isTestnet; + const file = isTestnet ? 'testnet.json' : 'mainnet.json'; + const addresses = fs.readFileSync( + path.resolve(__dirname, `../consts/environments/${file}`), + ); + const parsedAddresses = JSON.parse(addresses.toString()); + if (ismType in parsedAddresses[destination][origin]) { + return parsedAddresses[destination][origin].opStackIsm; + } + return null; +} diff --git a/typescript/sdk/src/ism/types.ts b/typescript/sdk/src/ism/types.ts index ed42fb83fe..1deeb74db5 100644 --- a/typescript/sdk/src/ism/types.ts +++ b/typescript/sdk/src/ism/types.ts @@ -1,25 +1,16 @@ import { IAggregationIsm, - IInterchainSecurityModule, IMultisigIsm, IRoutingIsm, - StaticMerkleRootMultisigIsm, - StaticMessageIdMultisigIsm, + OPStackIsm, TestIsm, } from '@hyperlane-xyz/core'; -import type { Address } from '@hyperlane-xyz/utils'; +import type { Address, ValueOf } from '@hyperlane-xyz/utils'; import { ChainMap } from '../types'; -export type DeployedIsm = - | IInterchainSecurityModule - | IMultisigIsm - | IAggregationIsm - | IRoutingIsm - | StaticMessageIdMultisigIsm - | StaticMerkleRootMultisigIsm - | TestIsm; - +// this enum should match the IInterchainSecurityModule.sol enum +// meant for the relayer export enum ModuleType { UNUSED, ROUTING, @@ -30,34 +21,81 @@ export enum ModuleType { NULL, } +// this enum can be adjusted as per deployments necessary +// meant for the deployer and checker +export enum IsmType { + OP_STACK = 'opStackIsm', + ROUTING = 'domainRoutingIsm', + AGGREGATION = 'staticAggregationIsm', + MERKLE_ROOT_MULTISIG = 'merkleRootMultisigIsm', + MESSAGE_ID_MULTISIG = 'messageIdMultisigIsm', + TEST_ISM = 'testIsm', +} + +// mapping betweent the two enums +export function ismTypeToModuleType(ismType: IsmType): ModuleType { + switch (ismType) { + case IsmType.OP_STACK: + return ModuleType.NULL; + case IsmType.ROUTING: + return ModuleType.ROUTING; + case IsmType.AGGREGATION: + return ModuleType.AGGREGATION; + case IsmType.MERKLE_ROOT_MULTISIG: + return ModuleType.MERKLE_ROOT_MULTISIG; + case IsmType.MESSAGE_ID_MULTISIG: + return ModuleType.MESSAGE_ID_MULTISIG; + case IsmType.TEST_ISM: + return ModuleType.NULL; + } +} + export type MultisigConfig = { validators: Array
; threshold: number; }; export type MultisigIsmConfig = MultisigConfig & { - type: ModuleType.MERKLE_ROOT_MULTISIG | ModuleType.MESSAGE_ID_MULTISIG; + type: IsmType.MERKLE_ROOT_MULTISIG | IsmType.MESSAGE_ID_MULTISIG; }; export type TestIsmConfig = { - type: ModuleType.NULL; + type: IsmType.TEST_ISM; }; export type RoutingIsmConfig = { - type: ModuleType.ROUTING; + type: IsmType.ROUTING; owner: Address; domains: ChainMap; }; export type AggregationIsmConfig = { - type: ModuleType.AGGREGATION; + type: IsmType.AGGREGATION; modules: Array; threshold: number; }; +export type OpStackIsmConfig = { + type: IsmType.OP_STACK; + origin: Address; + nativeBridge: Address; +}; + export type IsmConfig = | Address | RoutingIsmConfig | MultisigIsmConfig | AggregationIsmConfig + | OpStackIsmConfig | TestIsmConfig; + +export type DeployedIsmType = { + [IsmType.ROUTING]: IRoutingIsm; + [IsmType.AGGREGATION]: IAggregationIsm; + [IsmType.MERKLE_ROOT_MULTISIG]: IMultisigIsm; + [IsmType.MESSAGE_ID_MULTISIG]: IMultisigIsm; + [IsmType.OP_STACK]: OPStackIsm; + [IsmType.TEST_ISM]: TestIsm; +}; + +export type DeployedIsm = ValueOf; diff --git a/typescript/sdk/src/middleware/query/InterchainQuery.ts b/typescript/sdk/src/middleware/query/InterchainQuery.ts index 4ad646cb69..dc8712f82f 100644 --- a/typescript/sdk/src/middleware/query/InterchainQuery.ts +++ b/typescript/sdk/src/middleware/query/InterchainQuery.ts @@ -32,6 +32,7 @@ export class InterchainQuery extends RouterApp { if (!envAddresses) { throw new Error(`No addresses found for ${env}`); } + /// @ts-ignore return InterchainQuery.fromAddressesMap(envAddresses, multiProvider); } diff --git a/typescript/sdk/src/test/testUtils.ts b/typescript/sdk/src/test/testUtils.ts index d997429781..0ce5da89dc 100644 --- a/typescript/sdk/src/test/testUtils.ts +++ b/typescript/sdk/src/test/testUtils.ts @@ -14,7 +14,7 @@ import { CoinGeckoSimplePriceParams, } from '../gas/token-prices'; import { HookType } from '../hook/types'; -import { ModuleType } from '../ism/types'; +import { IsmType } from '../ism/types'; import { RouterConfig } from '../router/types'; import { ChainMap, ChainName } from '../types'; @@ -51,7 +51,7 @@ export function testCoreConfig( const chainConfig: CoreConfig = { owner, defaultIsm: { - type: ModuleType.NULL, + type: IsmType.TEST_ISM, }, defaultHook: { type: HookType.MERKLE_TREE,