55import sys
66from argparse import FileType
77from functools import cache
8+ from getpass import getpass
89from pathlib import Path
910from typing import Any , Optional , Text , Union , cast
1011
2122)
2223
2324from multiversx_sdk_cli import config , utils
24- from multiversx_sdk_cli .address import (
25+ from multiversx_sdk_cli .address_config import (
2526 get_active_address ,
2627 read_address_config_file ,
2728 resolve_address_config_path ,
4748 LedgerError ,
4849 NoWalletProvided ,
4950 UnknownAddressAliasError ,
51+ WalletError ,
5052)
5153from multiversx_sdk_cli .guardian_relayer_data import GuardianRelayerData
5254from multiversx_sdk_cli .interfaces import IAccount
@@ -181,7 +183,7 @@ def add_wallet_args(args: list[str], sub: Any):
181183 )
182184 sub .add_argument (
183185 "--passfile" ,
184- help = "🔑 a file containing keyfile's password, if keyfile provided. If not provided , you'll be prompted to enter the password." ,
186+ help = "DEPRECATED, do not use it anymore. Instead , you'll be prompted to enter the password." ,
185187 )
186188 sub .add_argument (
187189 "--ledger" ,
@@ -225,7 +227,7 @@ def add_guardian_wallet_args(args: list[str], sub: Any):
225227 )
226228 sub .add_argument (
227229 "--guardian-passfile" ,
228- help = "🔑 a file containing keyfile's password, if keyfile provided. If not provided , you'll be prompted to enter the password." ,
230+ help = "DEPRECATED, do not use it anymore. Instead , you'll be prompted to enter the password." ,
229231 )
230232 sub .add_argument (
231233 "--guardian-ledger" ,
@@ -246,7 +248,7 @@ def add_relayed_v3_wallet_args(args: list[str], sub: Any):
246248 sub .add_argument ("--relayer-keyfile" , help = "🔑 a JSON keyfile, if PEM not provided" )
247249 sub .add_argument (
248250 "--relayer-passfile" ,
249- help = "🔑 a file containing keyfile's password, if keyfile provided. If not provided , you'll be prompted to enter the password." ,
251+ help = "DEPRECATED, do not use it anymore. Instead , you'll be prompted to enter the password." ,
250252 )
251253 sub .add_argument (
252254 "--relayer-ledger" ,
@@ -357,12 +359,10 @@ def prepare_account(args: Any):
357359 password = load_password (args )
358360 index = args .sender_wallet_index if args .sender_wallet_index != 0 else None
359361
360- return Account .new_from_keystore (
361- file_path = Path (args .keyfile ),
362- password = password ,
363- address_index = index ,
364- hrp = hrp ,
365- )
362+ try :
363+ return Account .new_from_keystore (Path (args .keyfile ), password = password , address_index = index , hrp = hrp )
364+ except Exception as e :
365+ raise WalletError (str (e ))
366366 elif args .ledger :
367367 try :
368368 return LedgerAccount (address_index = args .sender_wallet_index )
@@ -377,11 +377,11 @@ def prepare_account(args: Any):
377377def load_wallet_by_alias (alias : str , hrp : str ) -> Account :
378378 file_path = resolve_address_config_path ()
379379 if not file_path .is_file ():
380- raise AddressConfigFileError ("The address config file was not found" )
380+ raise AddressConfigFileError ("The address config file was not found. " )
381381
382382 file = read_address_config_file ()
383383 if file == dict ():
384- raise AddressConfigFileError ("Address config file is empty" )
384+ raise AddressConfigFileError ("Address config file is empty. " )
385385
386386 addresses : dict [str , Any ] = file ["addresses" ]
387387 wallet = addresses .get (alias , None )
@@ -407,33 +407,28 @@ def load_default_wallet(hrp: str) -> Account:
407407def _load_wallet_from_address_config (wallet : dict [str , str ], hrp : str ) -> Account :
408408 kind = wallet .get ("kind" , None )
409409 if not kind :
410- raise AddressConfigFileError ("'kind' field must be set in the address config" )
410+ raise AddressConfigFileError ("'kind' field must be set in the address config. " )
411411
412412 if kind not in ["pem" , "keystore" ]:
413413 raise InvalidAddressConfigValue ("'kind' must be 'pem' or 'keystore'" )
414414
415- path = wallet .get ("path" , None )
416- if not path :
417- raise AddressConfigFileError ("'path' field must be set in the address config" )
418- path = Path (path )
415+ wallet_path = wallet .get ("path" , None )
416+ if not wallet_path :
417+ raise AddressConfigFileError ("'path' field must be set in the address config. " )
418+ path = Path (wallet_path )
419419
420420 index = int (wallet .get ("index" , 0 ))
421421
422422 if kind == "pem" :
423423 return Account .new_from_pem (file_path = path , index = index , hrp = hrp )
424424 else :
425- password = wallet .get ("password" , "" )
426- password_path = wallet .get ("passwordPath" , None )
427-
428- if not password and not password_path :
429- raise AddressConfigFileError (
430- "'password' or 'passwordPath' must be set in the address config for keystore wallets"
431- )
432-
433- if password_path :
434- password = Path (password_path ).read_text ().splitlines ()[0 ].strip ()
435-
436- return Account .new_from_keystore (file_path = path , password = password , address_index = index , hrp = hrp )
425+ logger .info ("Using keystore wallet." )
426+ password = getpass ("Please enter the wallet password: " )
427+ logger .info (f"Loading keystore wallet from path: { path } " )
428+ try :
429+ return Account .new_from_keystore (file_path = path , password = password , address_index = index , hrp = hrp )
430+ except Exception as e :
431+ raise WalletError (str (e ))
437432
438433
439434def _get_address_hrp (args : Any ) -> str :
@@ -480,12 +475,15 @@ def load_guardian_account(args: Any) -> Union[IAccount, None]:
480475 password = load_guardian_password (args )
481476 index = args .guardian_wallet_index if args .guardian_wallet_index != 0 else None
482477
483- return Account .new_from_keystore (
484- file_path = Path (args .guardian_keyfile ),
485- password = password ,
486- address_index = index ,
487- hrp = hrp ,
488- )
478+ try :
479+ return Account .new_from_keystore (
480+ Path (args .guardian_keyfile ),
481+ password = password ,
482+ address_index = index ,
483+ hrp = hrp ,
484+ )
485+ except Exception as e :
486+ raise WalletError (str (e ))
489487 elif args .guardian_ledger :
490488 try :
491489 return LedgerAccount (address_index = args .guardian_wallet_index )
@@ -614,12 +612,15 @@ def load_relayer_account(args: Any) -> Union[IAccount, None]:
614612 password = load_relayer_password (args )
615613 index = args .relayer_wallet_index if args .relayer_wallet_index != 0 else None
616614
617- return Account .new_from_keystore (
618- file_path = Path (args .relayer_keyfile ),
619- password = password ,
620- address_index = index ,
621- hrp = hrp ,
622- )
615+ try :
616+ return Account .new_from_keystore (
617+ Path (args .relayer_keyfile ),
618+ password = password ,
619+ address_index = index ,
620+ hrp = hrp ,
621+ )
622+ except Exception as e :
623+ raise WalletError (str (e ))
623624 elif args .relayer_ledger :
624625 try :
625626 return LedgerAccount (address_index = args .relayer_wallet_index )
0 commit comments