88from multiversx_sdk import (
99 Account ,
1010 Address ,
11+ ApiNetworkProvider ,
1112 LedgerAccount ,
1213 ProxyNetworkProvider ,
1314 Transaction ,
@@ -282,7 +283,7 @@ def parse_omit_fields_arg(args: Any) -> list[str]:
282283
283284
284285def prepare_account (args : Any ):
285- hrp = config . get_address_hrp ( )
286+ hrp = _get_address_hrp ( args )
286287
287288 if args .pem :
288289 return Account .new_from_pem (file_path = Path (args .pem ), index = args .sender_wallet_index , hrp = hrp )
@@ -302,8 +303,39 @@ def prepare_account(args: Any):
302303 raise errors .NoWalletProvided ()
303304
304305
306+ def _get_address_hrp (args : Any ) -> str :
307+ """If proxy is provided, fetch the hrp from the network, otherwise get the hrp from config"""
308+ hrp : str = ""
309+
310+ if hasattr (args , "proxy" ) and args .proxy :
311+ hrp = _get_hrp_from_proxy (args )
312+ elif hasattr (args , "api" ) and args .api :
313+ hrp = _get_hrp_from_api (args )
314+
315+ if hrp :
316+ return hrp
317+
318+ return config .get_address_hrp ()
319+
320+
321+ def _get_hrp_from_proxy (args : Any ) -> str :
322+ network_provider_config = config .get_config_for_network_providers ()
323+ proxy = ProxyNetworkProvider (url = args .proxy , config = network_provider_config )
324+ network_config = proxy .get_network_config ()
325+ hrp : str = network_config .raw .get ("erd_address_hrp" , "" )
326+ return hrp
327+
328+
329+ def _get_hrp_from_api (args : Any ) -> str :
330+ network_provider_config = config .get_config_for_network_providers ()
331+ proxy = ApiNetworkProvider (url = args .api , config = network_provider_config )
332+ network_config = proxy .get_network_config ()
333+ hrp : str = network_config .raw .get ("erd_address_hrp" , "" )
334+ return hrp
335+
336+
305337def load_guardian_account (args : Any ) -> Union [IAccount , None ]:
306- hrp = config . get_address_hrp ( )
338+ hrp = _get_address_hrp ( args )
307339
308340 if args .guardian_pem :
309341 return Account .new_from_pem (file_path = Path (args .guardian_pem ), index = args .guardian_wallet_index , hrp = hrp )
@@ -434,7 +466,7 @@ def _is_matching_address(account_address: Union[Address, None], args_address: Un
434466
435467
436468def load_relayer_account (args : Any ) -> Union [IAccount , None ]:
437- hrp = config . get_address_hrp ( )
469+ hrp = _get_address_hrp ( args )
438470
439471 if args .relayer_pem :
440472 return Account .new_from_pem (file_path = Path (args .relayer_pem ), index = args .relayer_wallet_index , hrp = hrp )
0 commit comments