@@ -3,13 +3,15 @@ pub mod helpers;
33
44use crate :: cli:: { Cli , Commands , WalletAction } ;
55use clap:: Parser as _;
6+ use core:: chain:: SupportedChain ;
67use core:: compiler:: compile_contract;
7- use core:: layer_zero:: deploy_on_chains;
8- use core:: provider:: get_providers_with_endpoints ;
8+ use core:: layer_zero:: { deploy_on_chains, setup_peer_connections } ;
9+ use core:: provider:: build_chain_clients ;
910use ethers:: providers:: Middleware ;
1011use ethers:: signers:: Signer ;
1112use ethers:: types:: Address ;
1213use std:: process:: Command ;
14+ use std:: str:: FromStr ;
1315
1416#[ tokio:: main]
1517async fn main ( ) -> anyhow:: Result < ( ) > {
@@ -18,18 +20,6 @@ async fn main() -> anyhow::Result<()> {
1820 let cli = Cli :: parse ( ) ;
1921 let chain = cli. chain ;
2022
21- let providers = match get_providers_with_endpoints ( ) {
22- Ok ( providers) => providers,
23- Err ( e) => return Err ( e) ,
24- } ;
25-
26- let rpc_info = match providers. get ( chain. as_str ( ) ) {
27- Some ( rpc_info) => rpc_info. clone ( ) ,
28- None => return Err ( anyhow:: anyhow!( "Chain '{}' not found" , chain) ) ,
29- } ;
30-
31- println ! ( "{:?}" , rpc_info) ;
32-
3323 match cli. command {
3424 Commands :: Wallet { action } => match action {
3525 WalletAction :: New => {
@@ -49,15 +39,14 @@ async fn main() -> anyhow::Result<()> {
4939 ) ;
5040 }
5141 WalletAction :: Balance { path, password } => {
52- let wallet = helpers:: get_wallet_from_keystore (
53- path. as_str ( ) ,
54- Some ( rpc_info. clone ( ) . provider ) ,
55- password,
56- )
57- . await ?;
42+ let wallet =
43+ helpers:: get_wallet_from_keystore ( path. as_str ( ) , None , password) . await ?;
5844
5945 let addr: Address = wallet. address ( ) ;
60- let balance = rpc_info. provider . get_balance ( addr, None ) . await ?;
46+ let chain_object = SupportedChain :: from_str ( & chain) . unwrap ( ) ;
47+ let clients = build_chain_clients ( & wallet) . await ?;
48+ let provider = clients. get ( & chain_object) . unwrap ( ) . provider ( ) ;
49+ let balance = provider. get_balance ( addr, None ) . await ?;
6150
6251 println ! (
6352 "Deployer: {:?}\n Balance: {} ETH" ,
@@ -71,15 +60,47 @@ async fn main() -> anyhow::Result<()> {
7160 password,
7261 chainlist,
7362 } => {
74- let wallet = helpers:: get_wallet_from_keystore (
75- path. as_str ( ) ,
76- Some ( rpc_info. provider . clone ( ) ) ,
77- password,
78- )
79- . await ?;
80- //let addr = deployer::deploy_oapp_contract(rpc_info, wallet).await?;
81- deploy_on_chains ( & chainlist, & wallet) . await ?;
82- // println!("Deployed `{}` at {:?}\n", contract, addr);
63+ let wallet = helpers:: get_wallet_from_keystore ( path. as_str ( ) , None , password) . await ?;
64+
65+ let supported_chains = chainlist
66+ . iter ( )
67+ . map ( |chain_str| {
68+ chain_str
69+ . parse :: < core:: chain:: SupportedChain > ( )
70+ . expect ( "Invalid chain" )
71+ } )
72+ . collect :: < Vec < core:: chain:: SupportedChain > > ( ) ;
73+
74+ let deployed = deploy_on_chains ( & supported_chains, & wallet) . await ?;
75+ for ( chain, addr) in supported_chains. iter ( ) . zip ( deployed. iter ( ) ) {
76+ println ! ( "Chain {}: Deployed contract at address: {:?}" , chain, addr) ;
77+ }
78+
79+ // TODO make this optional
80+ setup_peer_connections ( & wallet, & deployed) . await ?;
81+ // Send cross-chain message from each chain to every other chain
82+ println ! ( "Sending cross-chain messages..." ) ;
83+ for ( src_idx, src_chain) in supported_chains. iter ( ) . enumerate ( ) {
84+ for ( dst_idx, dst_chain) in supported_chains. iter ( ) . enumerate ( ) {
85+ if src_idx != dst_idx {
86+ let message = format ! ( "Hi {} from {}" , dst_chain, src_chain) ;
87+ match core:: layer_zero:: send_cross_chain_message (
88+ & wallet, & deployed, src_chain, dst_chain, message,
89+ )
90+ . await
91+ {
92+ Ok ( _) => println ! (
93+ "Successfully sent message from {} to {}" ,
94+ src_chain, dst_chain
95+ ) ,
96+ Err ( e) => println ! (
97+ "Failed to send message from {} to {}: {}" ,
98+ src_chain, dst_chain, e
99+ ) ,
100+ }
101+ }
102+ }
103+ }
83104 }
84105 Commands :: Compile => {
85106 println ! ( "Compiling contract..." ) ;
0 commit comments