Skip to content

Commit 5ceaed0

Browse files
committed
more refactoring
1 parent 17c5ff5 commit 5ceaed0

File tree

4 files changed

+212
-35
lines changed

4 files changed

+212
-35
lines changed

multiversx_sdk_cli/cli_delegation.py

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
validate_receiver_args,
2222
)
2323
from multiversx_sdk_cli.config import get_config_for_network_providers
24+
from multiversx_sdk_cli.constants import DEFAULT_TX_VERSION
2425
from multiversx_sdk_cli.guardian_relayer_data import GuardianRelayerData
2526
from multiversx_sdk_cli.interfaces import IAccount
2627
from multiversx_sdk_cli.signing_wrapper import SigningWrapper
@@ -440,6 +441,13 @@ def do_create_delegation_contract(args: Any):
440441
gas_limit=args.gas_limit,
441442
gas_price=args.gas_price,
442443
)
444+
_alter_version_and_options_if_provided(args, tx)
445+
cli_shared.set_options_for_hash_signing_if_needed(
446+
transaction=tx,
447+
sender=sender,
448+
guardian=guardian_and_relayer_data.guardian,
449+
relayer=guardian_and_relayer_data.relayer,
450+
)
443451

444452
_sign_transaction(tx, sender, guardian_and_relayer_data)
445453
cli_shared.send_or_simulate(tx, args)
@@ -485,6 +493,13 @@ def add_new_nodes(args: Any):
485493
gas_limit=args.gas_limit,
486494
gas_price=args.gas_price,
487495
)
496+
_alter_version_and_options_if_provided(args, tx)
497+
cli_shared.set_options_for_hash_signing_if_needed(
498+
transaction=tx,
499+
sender=sender,
500+
guardian=guardian_and_relayer_data.guardian,
501+
relayer=guardian_and_relayer_data.relayer,
502+
)
488503

489504
_sign_transaction(tx, sender, guardian_and_relayer_data)
490505
cli_shared.send_or_simulate(tx, args)
@@ -531,6 +546,13 @@ def remove_nodes(args: Any):
531546
gas_limit=args.gas_limit,
532547
gas_price=args.gas_price,
533548
)
549+
_alter_version_and_options_if_provided(args, tx)
550+
cli_shared.set_options_for_hash_signing_if_needed(
551+
transaction=tx,
552+
sender=sender,
553+
guardian=guardian_and_relayer_data.guardian,
554+
relayer=guardian_and_relayer_data.relayer,
555+
)
534556

535557
_sign_transaction(tx, sender, guardian_and_relayer_data)
536558
cli_shared.send_or_simulate(tx, args)
@@ -578,6 +600,13 @@ def stake_nodes(args: Any):
578600
gas_limit=args.gas_limit,
579601
gas_price=args.gas_price,
580602
)
603+
_alter_version_and_options_if_provided(args, tx)
604+
cli_shared.set_options_for_hash_signing_if_needed(
605+
transaction=tx,
606+
sender=sender,
607+
guardian=guardian_and_relayer_data.guardian,
608+
relayer=guardian_and_relayer_data.relayer,
609+
)
581610

582611
_sign_transaction(tx, sender, guardian_and_relayer_data)
583612
cli_shared.send_or_simulate(tx, args)
@@ -614,6 +643,13 @@ def unbond_nodes(args: Any):
614643
gas_limit=args.gas_limit,
615644
gas_price=args.gas_price,
616645
)
646+
_alter_version_and_options_if_provided(args, tx)
647+
cli_shared.set_options_for_hash_signing_if_needed(
648+
transaction=tx,
649+
sender=sender,
650+
guardian=guardian_and_relayer_data.guardian,
651+
relayer=guardian_and_relayer_data.relayer,
652+
)
617653

618654
_sign_transaction(tx, sender, guardian_and_relayer_data)
619655
cli_shared.send_or_simulate(tx, args)
@@ -642,6 +678,13 @@ def unstake_nodes(args: Any):
642678
gas_limit=args.gas_limit,
643679
gas_price=args.gas_price,
644680
)
681+
_alter_version_and_options_if_provided(args, tx)
682+
cli_shared.set_options_for_hash_signing_if_needed(
683+
transaction=tx,
684+
sender=sender,
685+
guardian=guardian_and_relayer_data.guardian,
686+
relayer=guardian_and_relayer_data.relayer,
687+
)
645688

646689
_sign_transaction(tx, sender, guardian_and_relayer_data)
647690
cli_shared.send_or_simulate(tx, args)
@@ -650,6 +693,8 @@ def unstake_nodes(args: Any):
650693
def unjail_nodes(args: Any):
651694
_check_if_either_bls_keys_or_validators_file_are_provided(args)
652695
validate_arguments(args)
696+
if not args.value or int(args.value) <= 0:
697+
raise errors.BadUsage("Value must be provided for unjailing nodes")
653698

654699
sender = cli_shared.prepare_sender(args)
655700
guardian_and_relayer_data = cli_shared.get_guardian_and_relayer_data(
@@ -671,13 +716,22 @@ def unjail_nodes(args: Any):
671716
gas_limit=args.gas_limit,
672717
gas_price=args.gas_price,
673718
)
719+
_alter_version_and_options_if_provided(args, tx)
720+
cli_shared.set_options_for_hash_signing_if_needed(
721+
transaction=tx,
722+
sender=sender,
723+
guardian=guardian_and_relayer_data.guardian,
724+
relayer=guardian_and_relayer_data.relayer,
725+
)
674726

675727
_sign_transaction(tx, sender, guardian_and_relayer_data)
676728
cli_shared.send_or_simulate(tx, args)
677729

678730

679731
def delegate(args: Any):
680732
validate_arguments(args)
733+
if not args.value or int(args.value) <= 0:
734+
raise errors.BadUsage("Value must be provided for delegating")
681735

682736
sender = cli_shared.prepare_sender(args)
683737
guardian_and_relayer_data = cli_shared.get_guardian_and_relayer_data(
@@ -696,6 +750,13 @@ def delegate(args: Any):
696750
gas_limit=args.gas_limit,
697751
gas_price=args.gas_price,
698752
)
753+
_alter_version_and_options_if_provided(args, tx)
754+
cli_shared.set_options_for_hash_signing_if_needed(
755+
transaction=tx,
756+
sender=sender,
757+
guardian=guardian_and_relayer_data.guardian,
758+
relayer=guardian_and_relayer_data.relayer,
759+
)
699760

700761
_sign_transaction(tx, sender, guardian_and_relayer_data)
701762
cli_shared.send_or_simulate(tx, args)
@@ -720,6 +781,13 @@ def claim_rewards(args: Any):
720781
gas_limit=args.gas_limit,
721782
gas_price=args.gas_price,
722783
)
784+
_alter_version_and_options_if_provided(args, tx)
785+
cli_shared.set_options_for_hash_signing_if_needed(
786+
transaction=tx,
787+
sender=sender,
788+
guardian=guardian_and_relayer_data.guardian,
789+
relayer=guardian_and_relayer_data.relayer,
790+
)
723791

724792
_sign_transaction(tx, sender, guardian_and_relayer_data)
725793
cli_shared.send_or_simulate(tx, args)
@@ -744,13 +812,22 @@ def redelegate_rewards(args: Any):
744812
gas_limit=args.gas_limit,
745813
gas_price=args.gas_price,
746814
)
815+
_alter_version_and_options_if_provided(args, tx)
816+
cli_shared.set_options_for_hash_signing_if_needed(
817+
transaction=tx,
818+
sender=sender,
819+
guardian=guardian_and_relayer_data.guardian,
820+
relayer=guardian_and_relayer_data.relayer,
821+
)
747822

748823
_sign_transaction(tx, sender, guardian_and_relayer_data)
749824
cli_shared.send_or_simulate(tx, args)
750825

751826

752827
def undelegate(args: Any):
753828
validate_arguments(args)
829+
if not args.value or int(args.value) <= 0:
830+
raise errors.BadUsage("Value must be provided for undelegating")
754831

755832
sender = cli_shared.prepare_sender(args)
756833
guardian_and_relayer_data = cli_shared.get_guardian_and_relayer_data(
@@ -769,6 +846,13 @@ def undelegate(args: Any):
769846
gas_limit=args.gas_limit,
770847
gas_price=args.gas_price,
771848
)
849+
_alter_version_and_options_if_provided(args, tx)
850+
cli_shared.set_options_for_hash_signing_if_needed(
851+
transaction=tx,
852+
sender=sender,
853+
guardian=guardian_and_relayer_data.guardian,
854+
relayer=guardian_and_relayer_data.relayer,
855+
)
772856

773857
_sign_transaction(tx, sender, guardian_and_relayer_data)
774858
cli_shared.send_or_simulate(tx, args)
@@ -793,6 +877,13 @@ def withdraw(args: Any):
793877
gas_limit=args.gas_limit,
794878
gas_price=args.gas_price,
795879
)
880+
_alter_version_and_options_if_provided(args, tx)
881+
cli_shared.set_options_for_hash_signing_if_needed(
882+
transaction=tx,
883+
sender=sender,
884+
guardian=guardian_and_relayer_data.guardian,
885+
relayer=guardian_and_relayer_data.relayer,
886+
)
796887

797888
_sign_transaction(tx, sender, guardian_and_relayer_data)
798889
cli_shared.send_or_simulate(tx, args)
@@ -818,6 +909,13 @@ def change_service_fee(args: Any):
818909
gas_limit=args.gas_limit,
819910
gas_price=args.gas_price,
820911
)
912+
_alter_version_and_options_if_provided(args, tx)
913+
cli_shared.set_options_for_hash_signing_if_needed(
914+
transaction=tx,
915+
sender=sender,
916+
guardian=guardian_and_relayer_data.guardian,
917+
relayer=guardian_and_relayer_data.relayer,
918+
)
821919

822920
_sign_transaction(tx, sender, guardian_and_relayer_data)
823921
cli_shared.send_or_simulate(tx, args)
@@ -843,6 +941,13 @@ def modify_delegation_cap(args: Any):
843941
gas_limit=args.gas_limit,
844942
gas_price=args.gas_price,
845943
)
944+
_alter_version_and_options_if_provided(args, tx)
945+
cli_shared.set_options_for_hash_signing_if_needed(
946+
transaction=tx,
947+
sender=sender,
948+
guardian=guardian_and_relayer_data.guardian,
949+
relayer=guardian_and_relayer_data.relayer,
950+
)
846951

847952
_sign_transaction(tx, sender, guardian_and_relayer_data)
848953
cli_shared.send_or_simulate(tx, args)
@@ -885,6 +990,13 @@ def automatic_activation(args: Any):
885990
else:
886991
raise errors.BadUsage("Both set and unset automatic activation are False")
887992

993+
_alter_version_and_options_if_provided(args, tx)
994+
cli_shared.set_options_for_hash_signing_if_needed(
995+
transaction=tx,
996+
sender=sender,
997+
guardian=guardian_and_relayer_data.guardian,
998+
relayer=guardian_and_relayer_data.relayer,
999+
)
8881000
_sign_transaction(tx, sender, guardian_and_relayer_data)
8891001
cli_shared.send_or_simulate(tx, args)
8901002

@@ -925,6 +1037,13 @@ def redelegate_cap(args: Any):
9251037
else:
9261038
raise errors.BadUsage("Either set or unset should be True")
9271039

1040+
_alter_version_and_options_if_provided(args, tx)
1041+
cli_shared.set_options_for_hash_signing_if_needed(
1042+
transaction=tx,
1043+
sender=sender,
1044+
guardian=guardian_and_relayer_data.guardian,
1045+
relayer=guardian_and_relayer_data.relayer,
1046+
)
9281047
_sign_transaction(tx, sender, guardian_and_relayer_data)
9291048
cli_shared.send_or_simulate(tx, args)
9301049

@@ -951,6 +1070,13 @@ def set_metadata(args: Any):
9511070
gas_limit=args.gas_limit,
9521071
gas_price=args.gas_price,
9531072
)
1073+
_alter_version_and_options_if_provided(args, tx)
1074+
cli_shared.set_options_for_hash_signing_if_needed(
1075+
transaction=tx,
1076+
sender=sender,
1077+
guardian=guardian_and_relayer_data.guardian,
1078+
relayer=guardian_and_relayer_data.relayer,
1079+
)
9541080

9551081
_sign_transaction(tx, sender, guardian_and_relayer_data)
9561082
cli_shared.send_or_simulate(tx, args)
@@ -979,6 +1105,21 @@ def make_new_contract_from_validator_data(args: Any):
9791105
gas_limit=args.gas_limit,
9801106
gas_price=args.gas_price,
9811107
)
1108+
_alter_version_and_options_if_provided(args, tx)
1109+
cli_shared.set_options_for_hash_signing_if_needed(
1110+
transaction=tx,
1111+
sender=sender,
1112+
guardian=guardian_and_relayer_data.guardian,
1113+
relayer=guardian_and_relayer_data.relayer,
1114+
)
9821115

9831116
_sign_transaction(tx, sender, guardian_and_relayer_data)
9841117
cli_shared.send_or_simulate(tx, args)
1118+
1119+
1120+
def _alter_version_and_options_if_provided(args: Any, transaction: Transaction):
1121+
if args.options:
1122+
transaction.options = args.options
1123+
1124+
if args.version != DEFAULT_TX_VERSION:
1125+
transaction.version = args.version

multiversx_sdk_cli/cli_shared.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
TokenComputer,
2121
TokenTransfer,
2222
Transaction,
23+
TransactionComputer,
2324
)
2425

2526
from multiversx_sdk_cli import config, utils
@@ -837,3 +838,27 @@ def initialize_gas_limit_estimator(args: Any) -> Union[GasLimitEstimator, None]:
837838
network_provider_config = config.get_config_for_network_providers()
838839
proxy = ProxyNetworkProvider(url=args.proxy, config=network_provider_config)
839840
return GasLimitEstimator(network_provider=proxy, gas_multiplier=multiplier)
841+
842+
843+
def set_options_for_hash_signing_if_needed(
844+
transaction: Transaction,
845+
sender: Union[IAccount, None],
846+
guardian: Union[IAccount, None],
847+
relayer: Union[IAccount, None],
848+
):
849+
transaction_computer = TransactionComputer()
850+
851+
if isinstance(sender, LedgerAccount) or isinstance(guardian, LedgerAccount) or isinstance(relayer, LedgerAccount):
852+
transaction_computer.apply_options_for_hash_signing(transaction)
853+
return
854+
855+
if sender and sender.use_hash_signing:
856+
transaction_computer.apply_options_for_hash_signing(transaction)
857+
return
858+
859+
if guardian and guardian.use_hash_signing:
860+
transaction_computer.apply_options_for_hash_signing(transaction)
861+
return
862+
863+
if relayer and relayer.use_hash_signing:
864+
transaction_computer.apply_options_for_hash_signing(transaction)

multiversx_sdk_cli/signing_wrapper.py

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Optional, Union
22

3-
from multiversx_sdk import LedgerAccount, Transaction, TransactionComputer
3+
from multiversx_sdk import Transaction, TransactionComputer
44

55
from multiversx_sdk_cli.cosign_transaction import cosign_transaction
66
from multiversx_sdk_cli.errors import TransactionSigningError
@@ -19,15 +19,11 @@ def sign_transaction(
1919
guardian_and_relayer: GuardianRelayerData = GuardianRelayerData(),
2020
):
2121
"""Signs the transaction using the sender's account and, if required, additionally signs with the guardian's and relayer's accounts. Ensures the appropriate transaction options are set as needed."""
22-
self._set_options_for_guarded_transaction_if_needed(transaction)
23-
2422
guardian = guardian_and_relayer.guardian
2523
relayer = guardian_and_relayer.relayer
2624
guardian_service_url = guardian_and_relayer.guardian_service_url
2725
guardian_2fa_code = guardian_and_relayer.guardian_2fa_code
2826

29-
self._set_options_for_hash_signing_if_needed(transaction, sender, guardian, relayer)
30-
3127
if sender:
3228
try:
3329
transaction.signature = sender.sign_transaction(transaction)
@@ -47,34 +43,6 @@ def _set_options_for_guarded_transaction_if_needed(self, transaction: Transactio
4743
transaction_computer = TransactionComputer()
4844
transaction_computer.apply_guardian(transaction, transaction.guardian)
4945

50-
def _set_options_for_hash_signing_if_needed(
51-
self,
52-
transaction: Transaction,
53-
sender: Union[IAccount, None],
54-
guardian: Union[IAccount, None],
55-
relayer: Union[IAccount, None],
56-
):
57-
transaction_computer = TransactionComputer()
58-
59-
if (
60-
isinstance(sender, LedgerAccount)
61-
or isinstance(guardian, LedgerAccount)
62-
or isinstance(relayer, LedgerAccount)
63-
):
64-
transaction_computer.apply_options_for_hash_signing(transaction)
65-
return
66-
67-
if sender and sender.use_hash_signing:
68-
transaction_computer.apply_options_for_hash_signing(transaction)
69-
return
70-
71-
if guardian and guardian.use_hash_signing:
72-
transaction_computer.apply_options_for_hash_signing(transaction)
73-
return
74-
75-
if relayer and relayer.use_hash_signing:
76-
transaction_computer.apply_options_for_hash_signing(transaction)
77-
7846
def _sign_guarded_transaction_if_guardian(
7947
self,
8048
transaction: Transaction,

0 commit comments

Comments
 (0)