multiversx-sdk-cli 9.4.1__tar.gz → 9.5.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/PKG-INFO +1 -1
  2. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_delegation.py +23 -5
  3. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_shared.py +2 -1
  4. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_transactions.py +3 -5
  5. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_wallet.py +1 -0
  6. multiversx_sdk_cli-9.5.1/multiversx_sdk_cli/custom_network_provider.py +36 -0
  7. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/delegation/staking_provider.py +18 -5
  8. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/errors.py +10 -0
  9. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/transactions.py +1 -4
  10. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/validators/validators_file.py +19 -7
  11. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/pyproject.toml +1 -1
  12. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/.gitignore +0 -0
  13. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/LICENSE +0 -0
  14. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/README.md +0 -0
  15. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/.vscode/settings.json +0 -0
  16. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/__init__.py +0 -0
  17. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/accounts.py +0 -0
  18. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli.py +0 -0
  19. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_accounts.py +0 -0
  20. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_config.py +0 -0
  21. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_contracts.py +0 -0
  22. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_data.py +0 -0
  23. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_deps.py +0 -0
  24. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_dns.py +0 -0
  25. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_ledger.py +0 -0
  26. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_localnet.py +0 -0
  27. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_output.py +0 -0
  28. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_password.py +0 -0
  29. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cli_validators.py +0 -0
  30. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/config.py +0 -0
  31. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/constants.py +0 -0
  32. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/contract_verification.py +0 -0
  33. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/contracts.py +0 -0
  34. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/cosign_transaction.py +0 -0
  35. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/delegation/__init__.py +0 -0
  36. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/dependencies/__init__.py +0 -0
  37. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/dependencies/install.py +0 -0
  38. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/dependencies/modules.py +0 -0
  39. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/dependencies/resolution.py +0 -0
  40. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/dependency_checker.py +0 -0
  41. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/dns.py +0 -0
  42. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/docker.py +0 -0
  43. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/downloader.py +0 -0
  44. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/guards.py +0 -0
  45. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/interfaces.py +0 -0
  46. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/ledger/__init__.py +0 -0
  47. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/ledger/config.py +0 -0
  48. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/ledger/ledger_app_handler.py +0 -0
  49. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/ledger/ledger_functions.py +0 -0
  50. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/__init__.py +0 -0
  51. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/config_default.py +0 -0
  52. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/config_general.py +0 -0
  53. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/config_networking.py +0 -0
  54. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/config_part.py +0 -0
  55. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/config_root.py +0 -0
  56. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/config_sharding.py +0 -0
  57. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/config_software.py +0 -0
  58. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/constants.py +0 -0
  59. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/genesis.py +0 -0
  60. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/genesis_json.py +0 -0
  61. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/genesis_smart_contracts_json.py +0 -0
  62. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/libraries.py +0 -0
  63. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/node.py +0 -0
  64. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/node_config_toml.py +0 -0
  65. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/nodes_setup_json.py +0 -0
  66. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/p2p_toml.py +0 -0
  67. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/seednode_p2pKey.pem +0 -0
  68. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/step_build_software.py +0 -0
  69. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/step_clean.py +0 -0
  70. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/step_config.py +0 -0
  71. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/step_new.py +0 -0
  72. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/step_prerequisites.py +0 -0
  73. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/step_start.py +0 -0
  74. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/localnet/wallets.py +0 -0
  75. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/myprocess.py +0 -0
  76. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/__init__.py +0 -0
  77. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/constants.py +0 -0
  78. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/core.py +0 -0
  79. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/interfaces.py +0 -0
  80. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/migrations.py +0 -0
  81. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/project_base.py +0 -0
  82. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/project_rust.py +0 -0
  83. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/__init__.py +0 -0
  84. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/data/__init__.py +0 -0
  85. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/data/common.py +0 -0
  86. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/data/extracted_feature.py +0 -0
  87. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/data/folder_report.py +0 -0
  88. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/data/project_report.py +0 -0
  89. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/data/report.py +0 -0
  90. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/data/wasm_report.py +0 -0
  91. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/do_report.py +0 -0
  92. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/features/__init__.py +0 -0
  93. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/features/features.py +0 -0
  94. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/features/report_option.py +0 -0
  95. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/features/size.py +0 -0
  96. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/features/twiggy_paths_check.py +0 -0
  97. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/format/__init__.py +0 -0
  98. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/format/change_type.py +0 -0
  99. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/format/format_options.py +0 -0
  100. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/report/report_creator.py +0 -0
  101. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/shared.py +0 -0
  102. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/projects/templates.py +0 -0
  103. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/sign_verify.py +0 -0
  104. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/simulation.py +0 -0
  105. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/utils.py +0 -0
  106. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/ux.py +0 -0
  107. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/validators/__init__.py +0 -0
  108. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/validators/core.py +0 -0
  109. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/version.py +0 -0
  110. {multiversx_sdk_cli-9.4.1 → multiversx_sdk_cli-9.5.1}/multiversx_sdk_cli/workstation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: multiversx-sdk-cli
3
- Version: 9.4.1
3
+ Version: 9.5.1
4
4
  Summary: MultiversX Smart Contracts Tools
5
5
  Project-URL: Homepage, https://github.com/multiversx/mx-sdk-py-cli
6
6
  Author: MultiversX
@@ -41,7 +41,8 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
41
41
  # remove nodes
42
42
  sub = cli_shared.add_command_subparser(subparsers, "staking-provider", "remove-nodes",
43
43
  "Remove nodes must be called by the contract owner")
44
- sub.add_argument("--bls-keys", required=True, help="a list with the bls keys of the nodes")
44
+ sub.add_argument("--bls-keys", help="a list with the bls keys of the nodes")
45
+ sub.add_argument("--validators-file", help="a JSON file describing the Nodes")
45
46
  sub.add_argument("--delegation-contract", required=True, help="address of the delegation contract")
46
47
  _add_common_arguments(args, sub)
47
48
  sub.set_defaults(func=remove_nodes)
@@ -49,7 +50,8 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
49
50
  # stake nodes
50
51
  sub = cli_shared.add_command_subparser(subparsers, "staking-provider", "stake-nodes",
51
52
  "Stake nodes must be called by the contract owner")
52
- sub.add_argument("--bls-keys", required=True, help="a list with the bls keys of the nodes")
53
+ sub.add_argument("--bls-keys", help="a list with the bls keys of the nodes")
54
+ sub.add_argument("--validators-file", help="a JSON file describing the Nodes")
53
55
  sub.add_argument("--delegation-contract", required=True, help="address of the delegation contract")
54
56
  _add_common_arguments(args, sub)
55
57
  sub.set_defaults(func=stake_nodes)
@@ -57,7 +59,8 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
57
59
  # unbond nodes
58
60
  sub = cli_shared.add_command_subparser(subparsers, "staking-provider", "unbond-nodes",
59
61
  "Unbond nodes must be called by the contract owner")
60
- sub.add_argument("--bls-keys", required=True, help="a list with the bls keys of the nodes")
62
+ sub.add_argument("--bls-keys", help="a list with the bls keys of the nodes")
63
+ sub.add_argument("--validators-file", help="a JSON file describing the Nodes")
61
64
  sub.add_argument("--delegation-contract", required=True, help="address of the delegation contract")
62
65
  _add_common_arguments(args, sub)
63
66
  sub.set_defaults(func=unbond_nodes)
@@ -65,7 +68,8 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
65
68
  # unstake nodes
66
69
  sub = cli_shared.add_command_subparser(subparsers, "staking-provider", "unstake-nodes",
67
70
  "Unstake nodes must be called by the contract owner")
68
- sub.add_argument("--bls-keys", required=True, help="a list with the bls keys of the nodes")
71
+ sub.add_argument("--bls-keys", help="a list with the bls keys of the nodes")
72
+ sub.add_argument("--validators-file", help="a JSON file describing the Nodes")
69
73
  sub.add_argument("--delegation-contract", required=True, help="address of the delegation contract")
70
74
  _add_common_arguments(args, sub)
71
75
  sub.set_defaults(func=unstake_nodes)
@@ -73,7 +77,8 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
73
77
  # unjail nodes
74
78
  sub = cli_shared.add_command_subparser(subparsers, "staking-provider", "unjail-nodes",
75
79
  "Unjail nodes must be called by the contract owner")
76
- sub.add_argument("--bls-keys", required=True, help="a list with the bls keys of the nodes")
80
+ sub.add_argument("--bls-keys", help="a list with the bls keys of the nodes")
81
+ sub.add_argument("--validators-file", help="a JSON file describing the Nodes")
77
82
  sub.add_argument("--delegation-contract", required=True, help="address of the delegation contract")
78
83
  _add_common_arguments(args, sub)
79
84
  sub.set_defaults(func=unjail_nodes)
@@ -182,6 +187,7 @@ def add_new_nodes(args: Any):
182
187
 
183
188
 
184
189
  def remove_nodes(args: Any):
190
+ _check_if_either_bls_keys_or_validators_file_are_provided(args)
185
191
  cli_shared.check_guardian_and_options_args(args)
186
192
  cli_shared.check_broadcast_args(args)
187
193
  cli_shared.prepare_chain_id_in_args(args)
@@ -196,6 +202,7 @@ def remove_nodes(args: Any):
196
202
 
197
203
 
198
204
  def stake_nodes(args: Any):
205
+ _check_if_either_bls_keys_or_validators_file_are_provided(args)
199
206
  cli_shared.check_guardian_and_options_args(args)
200
207
  cli_shared.check_broadcast_args(args)
201
208
  cli_shared.prepare_chain_id_in_args(args)
@@ -209,7 +216,16 @@ def stake_nodes(args: Any):
209
216
  cli_shared.send_or_simulate(tx, args)
210
217
 
211
218
 
219
+ def _check_if_either_bls_keys_or_validators_file_are_provided(args: Any):
220
+ bls_keys = args.bls_keys
221
+ validators_file = args.validators_file
222
+
223
+ if not bls_keys and not validators_file:
224
+ raise errors.BadUsage("No bls keys or validators file provided. Use either `--bls-keys` or `--validators-file`")
225
+
226
+
212
227
  def unbond_nodes(args: Any):
228
+ _check_if_either_bls_keys_or_validators_file_are_provided(args)
213
229
  cli_shared.check_guardian_and_options_args(args)
214
230
  cli_shared.check_broadcast_args(args)
215
231
  cli_shared.prepare_chain_id_in_args(args)
@@ -224,6 +240,7 @@ def unbond_nodes(args: Any):
224
240
 
225
241
 
226
242
  def unstake_nodes(args: Any):
243
+ _check_if_either_bls_keys_or_validators_file_are_provided(args)
227
244
  cli_shared.check_guardian_and_options_args(args)
228
245
  cli_shared.check_broadcast_args(args)
229
246
  cli_shared.prepare_chain_id_in_args(args)
@@ -238,6 +255,7 @@ def unstake_nodes(args: Any):
238
255
 
239
256
 
240
257
  def unjail_nodes(args: Any):
258
+ _check_if_either_bls_keys_or_validators_file_are_provided(args)
241
259
  cli_shared.check_guardian_and_options_args(args)
242
260
  cli_shared.check_broadcast_args(args)
243
261
  cli_shared.prepare_chain_id_in_args(args)
@@ -16,6 +16,7 @@ from multiversx_sdk_cli.cli_password import (load_guardian_password,
16
16
  load_password)
17
17
  from multiversx_sdk_cli.constants import (DEFAULT_TX_VERSION,
18
18
  TRANSACTION_OPTIONS_TX_GUARDED)
19
+ from multiversx_sdk_cli.custom_network_provider import CustomNetworkProvider
19
20
  from multiversx_sdk_cli.errors import ArgumentsNotProvidedError
20
21
  from multiversx_sdk_cli.interfaces import ITransaction
21
22
  from multiversx_sdk_cli.ledger.ledger_functions import do_get_ledger_address
@@ -249,7 +250,7 @@ def check_options_for_guarded_tx(options: int):
249
250
 
250
251
 
251
252
  def send_or_simulate(tx: ITransaction, args: Any, dump_output: bool = True) -> CLIOutputBuilder:
252
- proxy = ProxyNetworkProvider(args.proxy)
253
+ proxy = CustomNetworkProvider(args.proxy)
253
254
 
254
255
  is_set_wait_result = hasattr(args, "wait_result") and args.wait_result
255
256
  is_set_send = hasattr(args, "send") and args.send
@@ -1,12 +1,10 @@
1
1
  from pathlib import Path
2
2
  from typing import Any, List
3
3
 
4
- from multiversx_sdk_network_providers.proxy_network_provider import \
5
- ProxyNetworkProvider
6
-
7
4
  from multiversx_sdk_cli import cli_shared, utils
8
5
  from multiversx_sdk_cli.cli_output import CLIOutputBuilder
9
6
  from multiversx_sdk_cli.cosign_transaction import cosign_transaction
7
+ from multiversx_sdk_cli.custom_network_provider import CustomNetworkProvider
10
8
  from multiversx_sdk_cli.errors import NoWalletProvided
11
9
  from multiversx_sdk_cli.transactions import (compute_relayed_v1_data,
12
10
  do_prepare_transaction,
@@ -88,9 +86,9 @@ def send_transaction(args: Any):
88
86
 
89
87
  tx = load_transaction_from_file(args.infile)
90
88
  output = CLIOutputBuilder()
89
+ proxy = CustomNetworkProvider(args.proxy)
91
90
 
92
91
  try:
93
- proxy = ProxyNetworkProvider(args.proxy)
94
92
  tx_hash = proxy.send_transaction(tx)
95
93
  output.set_emitted_transaction_hash(tx_hash)
96
94
  finally:
@@ -101,7 +99,7 @@ def send_transaction(args: Any):
101
99
  def get_transaction(args: Any):
102
100
  args = utils.as_object(args)
103
101
  omit_fields = cli_shared.parse_omit_fields_arg(args)
104
- proxy = ProxyNetworkProvider(args.proxy)
102
+ proxy = CustomNetworkProvider(args.proxy)
105
103
 
106
104
  transaction = proxy.get_transaction(args.hash, True)
107
105
  output = CLIOutputBuilder().set_transaction_on_network(transaction, omit_fields).build()
@@ -112,6 +112,7 @@ def wallet_new(args: Any):
112
112
 
113
113
  mnemonic = Mnemonic.generate()
114
114
  print(f"Mnemonic: {mnemonic.get_text()}")
115
+ print(f"Wallet address: {mnemonic.derive_key().generate_public_key().to_address(address_hrp).to_bech32()}")
115
116
 
116
117
  if format is None:
117
118
  return
@@ -0,0 +1,36 @@
1
+ from typing import Any, Dict, Optional, Protocol
2
+
3
+ from multiversx_sdk_network_providers import GenericError, ProxyNetworkProvider
4
+
5
+ from multiversx_sdk_cli.errors import ProxyError
6
+ from multiversx_sdk_cli.interfaces import ISimulateResponse, ITransaction
7
+
8
+
9
+ class ITransactionOnNetwork(Protocol):
10
+ hash: str
11
+ is_completed: Optional[bool]
12
+
13
+ def to_dictionary(self) -> Dict[str, Any]:
14
+ ...
15
+
16
+
17
+ class CustomNetworkProvider:
18
+ def __init__(self, url: str) -> None:
19
+ self._provider = ProxyNetworkProvider(url)
20
+
21
+ def send_transaction(self, transaction: ITransaction) -> str:
22
+ try:
23
+ hash = self._provider.send_transaction(transaction)
24
+ return hash
25
+ except GenericError as ge:
26
+ url = ge.url
27
+ message = ge.data.get("error", "")
28
+ data = ge.data.get("data", "")
29
+ code = ge.data.get("code", "")
30
+ raise ProxyError(message, url, data, code)
31
+
32
+ def get_transaction(self, tx_hash: str, with_process_status: Optional[bool] = False) -> ITransactionOnNetwork:
33
+ return self._provider.get_transaction(tx_hash, with_process_status)
34
+
35
+ def simulate_transaction(self, transaction: ITransaction) -> ISimulateResponse:
36
+ return self._provider.simulate_transaction(transaction)
@@ -82,7 +82,8 @@ class DelegationOperations:
82
82
 
83
83
  def prepare_transaction_for_removing_nodes(self, owner: IAccount, args: Any) -> ITransaction:
84
84
  delegation_contract = Address.new_from_bech32(args.delegation_contract)
85
- public_keys = self._parse_public_bls_keys(args.bls_keys)
85
+
86
+ public_keys = self._load_validators_public_keys(args)
86
87
 
87
88
  tx = self._factory.create_transaction_for_removing_nodes(
88
89
  sender=owner.address,
@@ -102,7 +103,8 @@ class DelegationOperations:
102
103
 
103
104
  def prepare_transaction_for_staking_nodes(self, owner: IAccount, args: Any) -> ITransaction:
104
105
  delegation_contract = Address.new_from_bech32(args.delegation_contract)
105
- public_keys = self._parse_public_bls_keys(args.bls_keys)
106
+
107
+ public_keys = self._load_validators_public_keys(args)
106
108
 
107
109
  tx = self._factory.create_transaction_for_staking_nodes(
108
110
  sender=owner.address,
@@ -122,7 +124,8 @@ class DelegationOperations:
122
124
 
123
125
  def prepare_transaction_for_unbonding_nodes(self, owner: IAccount, args: Any) -> ITransaction:
124
126
  delegation_contract = Address.new_from_bech32(args.delegation_contract)
125
- public_keys = self._parse_public_bls_keys(args.bls_keys)
127
+
128
+ public_keys = self._load_validators_public_keys(args)
126
129
 
127
130
  tx = self._factory.create_transaction_for_unbonding_nodes(
128
131
  sender=owner.address,
@@ -142,7 +145,8 @@ class DelegationOperations:
142
145
 
143
146
  def prepare_transaction_for_unstaking_nodes(self, owner: IAccount, args: Any) -> ITransaction:
144
147
  delegation_contract = Address.new_from_bech32(args.delegation_contract)
145
- public_keys = self._parse_public_bls_keys(args.bls_keys)
148
+
149
+ public_keys = self._load_validators_public_keys(args)
146
150
 
147
151
  tx = self._factory.create_transaction_for_unstaking_nodes(
148
152
  sender=owner.address,
@@ -162,7 +166,8 @@ class DelegationOperations:
162
166
 
163
167
  def prepare_transaction_for_unjailing_nodes(self, owner: IAccount, args: Any) -> ITransaction:
164
168
  delegation_contract = Address.new_from_bech32(args.delegation_contract)
165
- public_keys = self._parse_public_bls_keys(args.bls_keys)
169
+
170
+ public_keys = self._load_validators_public_keys(args)
166
171
 
167
172
  tx = self._factory.create_transaction_for_unjailing_nodes(
168
173
  sender=owner.address,
@@ -293,6 +298,14 @@ class DelegationOperations:
293
298
 
294
299
  return tx
295
300
 
301
+ def _load_validators_public_keys(self, args: Any) -> List[ValidatorPublicKey]:
302
+ if args.bls_keys:
303
+ return self._parse_public_bls_keys(args.bls_keys)
304
+
305
+ validators_file_path = Path(args.validators_file).expanduser()
306
+ validators_file = ValidatorsFile(validators_file_path)
307
+ return validators_file.load_public_keys()
308
+
296
309
  def _parse_public_bls_keys(self, public_bls_keys: str) -> List[ValidatorPublicKey]:
297
310
  keys = public_bls_keys.split(",")
298
311
  validator_public_keys: List[ValidatorPublicKey] = []
@@ -198,3 +198,13 @@ class GuardianServiceError(KnownError):
198
198
  class ArgumentsNotProvidedError(KnownError):
199
199
  def __init__(self, message: str):
200
200
  super().__init__(message)
201
+
202
+
203
+ class ProxyError(KnownError):
204
+ def __init__(self, message: str, url: str, data: str, code: str):
205
+ inner = {
206
+ "url": url,
207
+ "data": data,
208
+ "code": code
209
+ }
210
+ super().__init__(message, inner)
@@ -2,7 +2,7 @@ import base64
2
2
  import json
3
3
  import logging
4
4
  import time
5
- from typing import Any, Dict, Optional, Protocol, Sequence, TextIO, Tuple
5
+ from typing import Any, Dict, Optional, Protocol, TextIO
6
6
 
7
7
  from multiversx_sdk_core import Address, Transaction, TransactionPayload
8
8
 
@@ -30,9 +30,6 @@ class INetworkProvider(Protocol):
30
30
  def send_transaction(self, transaction: ITransaction) -> str:
31
31
  ...
32
32
 
33
- def send_transactions(self, transactions: Sequence[ITransaction]) -> Tuple[int, str]:
34
- ...
35
-
36
33
  def get_transaction(self, tx_hash: str, with_process_status: Optional[bool] = False) -> ITransactionOnNetwork:
37
34
  ...
38
35
 
@@ -1,8 +1,9 @@
1
1
  import json
2
2
  from pathlib import Path
3
- from typing import List
3
+ from typing import Dict, List
4
4
 
5
5
  from multiversx_sdk_wallet import ValidatorSigner
6
+ from multiversx_sdk_wallet.validator_keys import ValidatorPublicKey
6
7
  from multiversx_sdk_wallet.validator_pem import ValidatorPEM
7
8
 
8
9
  from multiversx_sdk_cli import guards
@@ -23,17 +24,28 @@ class ValidatorsFile:
23
24
  def load_signers(self) -> List[ValidatorSigner]:
24
25
  signers: List[ValidatorSigner] = []
25
26
  for validator in self.get_validators_list():
26
- # Get path of "pemFile", make it absolute
27
- validator_pem = Path(validator.get("pemFile")).expanduser()
28
- validator_pem = validator_pem if validator_pem.is_absolute() else self.validators_file_path.parent / validator_pem
29
-
30
- pem_file = ValidatorPEM.from_file(validator_pem)
31
-
27
+ pem_file = self._load_validator_pem(validator)
32
28
  validator_signer = ValidatorSigner(pem_file.secret_key)
33
29
  signers.append(validator_signer)
34
30
 
35
31
  return signers
36
32
 
33
+ def load_public_keys(self) -> List[ValidatorPublicKey]:
34
+ public_keys: List[ValidatorPublicKey] = []
35
+
36
+ for validator in self.get_validators_list():
37
+ pem_file = self._load_validator_pem(validator)
38
+ public_keys.append(pem_file.secret_key.generate_public_key())
39
+
40
+ return public_keys
41
+
42
+ def _load_validator_pem(self, validator: Dict[str, str]) -> ValidatorPEM:
43
+ # Get path of "pemFile", make it absolute
44
+ validator_pem = Path(validator.get("pemFile", "")).expanduser()
45
+ validator_pem = validator_pem if validator_pem.is_absolute() else self.validators_file_path.parent / validator_pem
46
+
47
+ return ValidatorPEM.from_file(validator_pem)
48
+
37
49
  def _read_json_file_validators(self):
38
50
  val_file = self.validators_file_path.expanduser()
39
51
  guards.is_file(val_file)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "multiversx-sdk-cli"
7
- version = "9.4.1"
7
+ version = "9.5.1"
8
8
  authors = [
9
9
  { name="MultiversX" },
10
10
  ]