1- use clap:: { Parser , Subcommand } ;
1+ pub mod cli;
2+ pub mod helpers;
3+
4+ use crate :: cli:: { Cli , Commands , WalletAction } ;
5+ use clap:: Parser as _;
26use core:: compiler:: compile_contract;
3- use core:: { client, deployer} ;
4- use ethers:: providers:: { Http , Middleware , Provider } ;
7+ use core:: deployer;
8+ use core:: provider:: get_providers_with_endpoints;
9+ use ethers:: providers:: Middleware ;
510use ethers:: signers:: Signer ;
611use ethers:: types:: Address ;
7- use foundry_config:: Config ;
8- use rpassword:: prompt_password;
912use std:: process:: Command ;
1013
11- #[ derive( Parser ) ]
12- #[ command( name = "deploy-cli" ) ]
13- #[ command( about = "Deploy contracts and manage deployer" , long_about = None ) ]
14- struct Cli {
15- #[ arg( long) ]
16- chain : String ,
17-
18- #[ command( subcommand) ]
19- command : Commands ,
20- }
21- #[ derive( Subcommand ) ]
22- enum Commands {
23- Wallet {
24- #[ command( subcommand) ]
25- action : WalletAction ,
26- } ,
27- Deploy {
28- #[ arg( long) ]
29- path : String ,
30- #[ arg( long, hide = true ) ]
31- password : Option < String > ,
32- contract : String ,
33- } ,
34- Compile ,
35- }
36-
37- #[ derive( Subcommand ) ]
38- enum WalletAction {
39- New ,
40- Balance {
41- #[ arg( long) ]
42- path : String ,
43- #[ arg( long, hide = true ) ]
44- password : Option < String > ,
45- } ,
46- }
47-
48- async fn get_wallet_from_keystore (
49- path : & str ,
50- password : Option < String > ,
51- ) -> anyhow:: Result < ethers:: signers:: LocalWallet > {
52- let password = match password {
53- Some ( pass) => pass,
54- None => prompt_password ( "Enter password: " ) ?,
55- } ;
56- client:: wallet_from_keystore ( path, & password) . await
57- }
58-
59- fn get_provider ( chain_alias : & str ) -> anyhow:: Result < Provider < Http > > {
60- let config = Config :: load ( ) ;
61-
62- let rpc_url: String = config
63- . get_rpc_url_with_alias ( chain_alias)
64- . ok_or_else ( || anyhow:: anyhow!( "Error trying to get RPC URL from config" ) ) ?
65- . map_err ( |e| anyhow:: anyhow!( "Error getting RPC URL: {}" , e) ) ?
66- . into_owned ( ) ;
67-
68- Provider :: < Http > :: try_from ( rpc_url)
69- . map_err ( |e| anyhow:: anyhow!( "Error instantiating provider: {}" , e) )
70- }
71-
7214#[ tokio:: main]
7315async fn main ( ) -> anyhow:: Result < ( ) > {
7416 dotenvy:: dotenv ( ) . ok ( ) ;
7517
7618 let cli = Cli :: parse ( ) ;
7719 let chain = cli. chain ;
78- let provider = get_provider ( chain. as_str ( ) ) . expect ( "Provider setup failed" ) ;
20+
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+ } ;
7930
8031 match cli. command {
8132 Commands :: Wallet { action } => match action {
@@ -96,9 +47,16 @@ async fn main() -> anyhow::Result<()> {
9647 ) ;
9748 }
9849 WalletAction :: Balance { path, password } => {
99- let wallet = get_wallet_from_keystore ( path. as_str ( ) , password) . await ?;
50+ let wallet = helpers:: get_wallet_from_keystore (
51+ path. as_str ( ) ,
52+ Some ( rpc_info. clone ( ) . provider ) ,
53+ password,
54+ )
55+ . await ?;
56+
10057 let addr: Address = wallet. address ( ) ;
101- let balance = provider. get_balance ( addr, None ) . await ?;
58+ let balance = rpc_info. provider . get_balance ( addr, None ) . await ?;
59+
10260 println ! (
10361 "Deployer: {:?}\n Balance: {} ETH" ,
10462 addr,
@@ -111,8 +69,13 @@ async fn main() -> anyhow::Result<()> {
11169 password,
11270 contract,
11371 } => {
114- let wallet = get_wallet_from_keystore ( path. as_str ( ) , password) . await ?;
115- let addr = deployer:: deploy_contract ( & contract, provider, wallet) . await ?;
72+ let wallet = helpers:: get_wallet_from_keystore (
73+ path. as_str ( ) ,
74+ Some ( rpc_info. provider . clone ( ) ) ,
75+ password,
76+ )
77+ . await ?;
78+ let addr = deployer:: deploy_oapp_contract ( rpc_info, wallet) . await ?;
11679 println ! ( "Deployed `{}` at {:?}\n " , contract, addr) ;
11780 }
11881 Commands :: Compile => {
0 commit comments