Skip to content

Commit a0ca485

Browse files
committed
use sender from config file
1 parent aadd695 commit a0ca485

10 files changed

Lines changed: 293 additions & 26 deletions

File tree

multiversx_sdk_cli/args_validation.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,6 @@ def validate_gas_limit_args(args: Any):
2929
raise InvalidArgumentsError("--gas-limit must be provided")
3030

3131

32-
def ensure_wallet_args_are_provided(args: Any):
33-
signing_methods = [args.pem, args.keyfile, args.ledger]
34-
35-
if all(signing_methods):
36-
raise InvalidArgumentsError("Only one of --pem, --keyfile, or --ledger must be provided")
37-
38-
if not any(signing_methods):
39-
raise InvalidArgumentsError("One of --pem, --keyfile, or --ledger must be provided")
40-
41-
4232
def ensure_relayer_wallet_args_are_provided(args: Any):
4333
signing_methods = [args.relayer_pem, args.relayer_keyfile, args.relayer_ledger]
4434

multiversx_sdk_cli/cli_contracts.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
from multiversx_sdk_cli import cli_shared, utils
2020
from multiversx_sdk_cli.args_validation import (
21-
ensure_wallet_args_are_provided,
2221
validate_broadcast_args,
2322
validate_chain_id_args,
2423
validate_proxy_argument,
@@ -381,7 +380,6 @@ def deploy(args: Any):
381380
cli_shared.set_proxy_from_config_if_not_provided(args, cli_config)
382381

383382
validate_transaction_args(args)
384-
ensure_wallet_args_are_provided(args)
385383
validate_broadcast_args(args)
386384
validate_chain_id_args(args)
387385

@@ -433,7 +431,6 @@ def call(args: Any):
433431
cli_shared.set_proxy_from_config_if_not_provided(args, cli_config)
434432

435433
validate_transaction_args(args)
436-
ensure_wallet_args_are_provided(args)
437434
validate_broadcast_args(args)
438435
validate_chain_id_args(args)
439436

@@ -478,7 +475,6 @@ def upgrade(args: Any):
478475
cli_shared.set_proxy_from_config_if_not_provided(args, cli_config)
479476

480477
validate_transaction_args(args)
481-
ensure_wallet_args_are_provided(args)
482478
validate_broadcast_args(args)
483479
validate_chain_id_args(args)
484480

multiversx_sdk_cli/cli_delegation.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
from multiversx_sdk_cli import cli_shared, errors, utils
1414
from multiversx_sdk_cli.args_validation import (
15-
ensure_wallet_args_are_provided,
1615
validate_broadcast_args,
1716
validate_chain_id_args,
1817
validate_nonce_args,
@@ -390,7 +389,6 @@ def _add_common_arguments(args: list[str], sub: Any):
390389
def validate_arguments(args: Any):
391390
validate_nonce_args(args)
392391
validate_receiver_args(args)
393-
ensure_wallet_args_are_provided(args)
394392
validate_broadcast_args(args)
395393
validate_chain_id_args(args)
396394

multiversx_sdk_cli/cli_shared.py

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@
1717
Transaction,
1818
)
1919

20-
from multiversx_sdk_cli import config, errors, utils
20+
from multiversx_sdk_cli import config, utils
21+
from multiversx_sdk_cli.address import (
22+
get_active_address,
23+
read_address_config_file,
24+
resolve_address_config_path,
25+
)
2126
from multiversx_sdk_cli.cli_output import CLIOutputBuilder
2227
from multiversx_sdk_cli.cli_password import (
2328
load_guardian_password,
@@ -31,9 +36,13 @@
3136
)
3237
from multiversx_sdk_cli.env import MxpyEnv, get_address_hrp
3338
from multiversx_sdk_cli.errors import (
39+
AddressConfigFileError,
3440
ArgumentsNotProvidedError,
3541
BadUsage,
3642
IncorrectWalletError,
43+
InvalidAddressConfigValue,
44+
NoWalletProvided,
45+
UnknownAddressAliasError,
3746
)
3847
from multiversx_sdk_cli.guardian_relayer_data import GuardianRelayerData
3948
from multiversx_sdk_cli.interfaces import IAccount
@@ -155,6 +164,7 @@ def add_tx_args(
155164

156165

157166
def add_wallet_args(args: list[str], sub: Any):
167+
sub.add_argument("--sender", type=str, help="the alias of the wallet set in the address config")
158168
sub.add_argument(
159169
"--pem",
160170
required=False,
@@ -309,8 +319,64 @@ def prepare_account(args: Any):
309319
)
310320
elif args.ledger:
311321
return LedgerAccount(address_index=args.sender_wallet_index)
322+
elif args.sender:
323+
file_path = resolve_address_config_path()
324+
if not file_path.is_file():
325+
raise AddressConfigFileError("The address config file was not found")
326+
327+
file = read_address_config_file()
328+
if file == dict():
329+
raise AddressConfigFileError("Address config file is empty")
330+
331+
addresses: dict[str, Any] = file["addresses"]
332+
wallet = addresses.get(args.sender, None)
333+
if not wallet:
334+
raise UnknownAddressAliasError(args.sender)
335+
336+
logger.info(f"Using sender [{args.sender}] from address config.")
337+
return _load_wallet_from_address_config(wallet=wallet, hrp=hrp)
338+
else:
339+
active_address = get_active_address()
340+
if active_address == dict():
341+
logger.info("No default wallet found in address config.")
342+
raise NoWalletProvided()
343+
344+
alias_of_default_wallet = read_address_config_file().get("active", "")
345+
logger.info(f"Using sender [{alias_of_default_wallet}] from address config.")
346+
347+
return _load_wallet_from_address_config(wallet=active_address, hrp=hrp)
348+
349+
350+
def _load_wallet_from_address_config(wallet: dict[str, str], hrp: str) -> Account:
351+
kind = wallet.get("kind", None)
352+
if not kind:
353+
raise AddressConfigFileError("'kind' field must be set in the address config")
354+
355+
if kind not in ["pem", "keystore"]:
356+
raise InvalidAddressConfigValue("'kind' must be 'pem' or 'keystore'")
357+
358+
path = wallet.get("path", None)
359+
if not path:
360+
raise AddressConfigFileError("'path' field must be set in the address config")
361+
path = Path(path)
362+
363+
index = int(wallet.get("index", 0))
364+
365+
if kind == "pem":
366+
return Account.new_from_pem(file_path=path, index=index, hrp=hrp)
312367
else:
313-
raise errors.NoWalletProvided()
368+
password = wallet.get("password", "")
369+
password_path = wallet.get("passwordPath", None)
370+
371+
if not password and not password_path:
372+
raise AddressConfigFileError(
373+
"'password' or 'passwordPath' must be set in the address config for keystore wallets"
374+
)
375+
376+
if password_path:
377+
password = Path(password_path).read_text().splitlines()[0].strip()
378+
379+
return Account.new_from_keystore(file_path=path, password=password, address_index=index, hrp=hrp)
314380

315381

316382
def _get_address_hrp(args: Any) -> str:

multiversx_sdk_cli/cli_transactions.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from multiversx_sdk_cli import cli_shared, utils
1515
from multiversx_sdk_cli.args_validation import (
1616
ensure_relayer_wallet_args_are_provided,
17-
ensure_wallet_args_are_provided,
1817
validate_broadcast_args,
1918
validate_chain_id_args,
2019
validate_nonce_args,
@@ -120,7 +119,6 @@ def create_transaction(args: Any):
120119

121120
validate_nonce_args(args)
122121
validate_receiver_args(args)
123-
ensure_wallet_args_are_provided(args)
124122
validate_broadcast_args(args)
125123
validate_chain_id_args(args)
126124

multiversx_sdk_cli/cli_validators.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
from multiversx_sdk_cli import cli_shared, utils
77
from multiversx_sdk_cli.args_validation import (
8-
ensure_wallet_args_are_provided,
98
validate_broadcast_args,
109
validate_chain_id_args,
1110
validate_nonce_args,
@@ -149,7 +148,6 @@ def _add_nodes_arg(sub: Any):
149148
def validate_args(args: Any) -> None:
150149
validate_nonce_args(args)
151150
validate_receiver_args(args)
152-
ensure_wallet_args_are_provided(args)
153151
validate_broadcast_args(args)
154152
validate_chain_id_args(args)
155153

multiversx_sdk_cli/cli_wallet.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,13 @@ def wallet_new(args: Any):
180180
if format == WALLET_FORMAT_RAW_MNEMONIC:
181181
outfile.write_text(mnemonic.get_text())
182182
elif format == WALLET_FORMAT_KEYSTORE_MNEMONIC:
183-
password = getpass.getpass("Enter a new password (for keystore):")
183+
password = _request_password()
184+
184185
wallet = UserWallet.from_mnemonic(mnemonic.get_text(), password)
185186
wallet.save(outfile)
186187
elif format == WALLET_FORMAT_KEYSTORE_SECRET_KEY:
187-
password = getpass.getpass("Enter a new password (for keystore):")
188+
password = _request_password()
189+
188190
secret_key = mnemonic.derive_key()
189191
wallet = UserWallet.from_secret_key(secret_key, password)
190192
wallet.save(outfile, address_hrp)
@@ -200,6 +202,15 @@ def wallet_new(args: Any):
200202
logger.info(f"Wallet ({format}) saved: {outfile}")
201203

202204

205+
def _request_password() -> str:
206+
password = ""
207+
while not len(password):
208+
password = getpass.getpass("Enter a new password (for keystore):")
209+
if not len(password):
210+
logger.warning("No password provided")
211+
return password
212+
213+
203214
def _generate_mnemonic_with_shard_constraint(shard: int) -> Mnemonic:
204215
if shard not in CURRENT_SHARDS:
205216
raise BadUserInput(f"Wrong shard provided. Choose between {CURRENT_SHARDS}")

multiversx_sdk_cli/dns.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
from multiversx_sdk_cli import cli_shared
1212
from multiversx_sdk_cli.args_validation import (
13-
ensure_wallet_args_are_provided,
1413
validate_broadcast_args,
1514
validate_chain_id_args,
1615
validate_transaction_args,
@@ -62,7 +61,6 @@ def validate_name(name: str, shard_id: int, proxy: INetworkProvider):
6261

6362
def register(args: Any):
6463
validate_transaction_args(args)
65-
ensure_wallet_args_are_provided(args)
6664
validate_broadcast_args(args)
6765
validate_chain_id_args(args)
6866

multiversx_sdk_cli/errors.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,3 +196,8 @@ def __init__(self, name: str):
196196
class InvalidAddressConfigValue(KnownError):
197197
def __init__(self, message: str):
198198
super().__init__(message)
199+
200+
201+
class AddressConfigFileError(KnownError):
202+
def __init__(self, message: str):
203+
super().__init__(message)

0 commit comments

Comments
 (0)