From 45dec23aac2aebdbc9653619d35ca011f51da068 Mon Sep 17 00:00:00 2001 From: -f Date: Mon, 13 Jan 2025 00:25:44 +0530 Subject: [PATCH] config routing --- .../src/ism/interchain_security_module.rs | 9 ++++ .../hyperlane-base/src/settings/chains.rs | 10 ++++- .../utils/run-locally/src/starknet/mod.rs | 17 +++++++- .../utils/run-locally/src/starknet/utils.rs | 42 ++++++++++++------- 4 files changed, 60 insertions(+), 18 deletions(-) diff --git a/rust/main/chains/hyperlane-starknet/src/ism/interchain_security_module.rs b/rust/main/chains/hyperlane-starknet/src/ism/interchain_security_module.rs index 233be161c9..c09a7a8629 100644 --- a/rust/main/chains/hyperlane-starknet/src/ism/interchain_security_module.rs +++ b/rust/main/chains/hyperlane-starknet/src/ism/interchain_security_module.rs @@ -145,11 +145,20 @@ impl InterchainSecurityModule for StarknetInterchainSecurityModule { message, ); + println!( + "StarknetISM dry_run_verify address {:?} with metadata {:?} with size {:?}", + self.contract.address, + metadata.iter().map(|b| *b as u128).collect::>(), + metadata.len() + ); + let response = tx .call() .await .map_err(Into::::into)?; + println!("StarknetISM dry_run_verify response {:?}", response); + // We can't simulate the `verify` call in Starknet because // it's not marked as an entrypoint. So we just use the query interface // and hardcode a gas value - this can be inefficient if one ISM is diff --git a/rust/main/hyperlane-base/src/settings/chains.rs b/rust/main/hyperlane-base/src/settings/chains.rs index 7e5c52ff6c..59996606ae 100644 --- a/rust/main/hyperlane-base/src/settings/chains.rs +++ b/rust/main/hyperlane-base/src/settings/chains.rs @@ -732,8 +732,14 @@ impl ChainConf { )?); Ok(ism as Box) } - ChainConnectionConf::Starknet(_) => { - Err(eyre!("Starknet does not support routing ISM yet")).context(ctx) + ChainConnectionConf::Starknet(conf) => { + let signer = self.starknet_signer().await.context(ctx)?; + let ism = Box::new(h_starknet::StarknetRoutingIsm::new( + conf, + &locator, + signer.unwrap(), + )?); + Ok(ism as Box) } } .context(ctx) diff --git a/rust/main/utils/run-locally/src/starknet/mod.rs b/rust/main/utils/run-locally/src/starknet/mod.rs index 18ded2c612..02680d6bd4 100644 --- a/rust/main/utils/run-locally/src/starknet/mod.rs +++ b/rust/main/utils/run-locally/src/starknet/mod.rs @@ -309,6 +309,8 @@ fn run_locally() { }) .collect::>(); + let domains = nodes.iter().map(|v| v.3).collect::>(); + let deployer = "0xb3ff441a68610b30fd5e2abbf3a1548eb6ba6f3559f2862bf2dc757e5828ca"; // 1st katana account let _linker = "validator"; let validator = &ValidatorConfig { @@ -335,8 +337,19 @@ fn run_locally() { let declarations = utils::declare_all(starknet_cli.clone(), sierra_classes.clone()).join(); - let deployments = - utils::deploy_all(starknet_cli, deployer.to_string(), declarations, domain); + let remotes = domains + .iter() + .filter(|v| *v != &domain) + .cloned() + .collect::>(); + + let deployments = utils::deploy_all( + starknet_cli, + deployer.to_string(), + declarations, + domain, + remotes, + ); (launch_resp, deployments, chain_id, metrics_port, domain) }) diff --git a/rust/main/utils/run-locally/src/starknet/utils.rs b/rust/main/utils/run-locally/src/starknet/utils.rs index e83bc480a7..3d48a308cc 100644 --- a/rust/main/utils/run-locally/src/starknet/utils.rs +++ b/rust/main/utils/run-locally/src/starknet/utils.rs @@ -119,18 +119,8 @@ pub(crate) fn deploy_all( deployer: String, declarations: DeclaredClasses, domain: u32, + remotes: Vec, ) -> Deployments { - // deploy ism - routing ism with empty routes - println!("Deploying routing ism"); - let ism_routing = cli.deploy(declarations.hpl_ism_routing, vec![deployer.clone()]); - - println!("Initializing routing ism"); - cli.invoke( - ism_routing.clone(), - "initialize", - vec!["0".to_string(), "0".to_string()], - ); - // deploy ism - multisig ism with no enrolled validators println!("Deploying message id multisig ism"); let ism_multisig = cli.deploy( @@ -156,9 +146,33 @@ pub(crate) fn deploy_all( "2".to_string(), ism_multisig.clone(), ism_pausable, - THRESHOLD.to_string(), + "2".to_string(), + ], + ); + + // deploy ism - routing ism + println!("Deploying routing ism"); + let default_ism = cli.deploy(declarations.hpl_ism_routing, vec![deployer.clone()]); + + println!( + "Initializing routing ism with for origin domains: {:?}", + remotes + ); + cli.invoke( + default_ism.clone(), + "initialize", + vec![ + remotes.len().to_string(), + remotes + .iter() + .map(|v| v.to_string()) + .collect::>() + .join(" "), + remotes.len().to_string(), + vec![default_ism.clone(); remotes.len()].join(" "), ], ); + // deploy mock hook println!("Deploying mock hook"); let mock_hook = cli.deploy(declarations.hpl_test_mock_hook, vec![]); @@ -191,7 +205,7 @@ pub(crate) fn deploy_all( println!("Deploying mock receiver"); let mock_receiver = cli.deploy( declarations.hpl_test_mock_msg_receiver, - vec![ism_multisig.clone()], + vec![default_ism.clone()], ); let mock_ism = cli.deploy(declarations.hpl_test_mock_ism, vec![]); @@ -219,7 +233,7 @@ pub(crate) fn deploy_all( Deployments { mailbox, - ism_routing, + ism_routing: default_ism, ism_multisig, ism_aggregate, hook_merkle,