multiversx-sdk-cli 11.1.1__tar.gz → 11.2.0__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 (89) hide show
  1. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/PKG-INFO +2 -2
  2. multiversx_sdk_cli-11.2.0/multiversx_sdk_cli/args_converter.py +69 -0
  3. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli.py +2 -0
  4. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_contracts.py +114 -74
  5. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_delegation.py +281 -142
  6. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_get.py +4 -4
  7. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_governance.py +79 -56
  8. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_multisig.py +316 -198
  9. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_shared.py +108 -8
  10. multiversx_sdk_cli-11.2.0/multiversx_sdk_cli/cli_tokens.py +2231 -0
  11. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_transactions.py +59 -29
  12. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_validators.py +141 -100
  13. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/constants.py +1 -0
  14. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/dns.py +13 -8
  15. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/errors.py +0 -2
  16. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/interfaces.py +1 -0
  17. multiversx_sdk_cli-11.2.0/multiversx_sdk_cli/signing_wrapper.py +69 -0
  18. multiversx_sdk_cli-11.2.0/multiversx_sdk_cli/transactions.py +40 -0
  19. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/pyproject.toml +2 -2
  20. multiversx_sdk_cli-11.1.1/multiversx_sdk_cli/base_transactions_controller.py +0 -172
  21. multiversx_sdk_cli-11.1.1/multiversx_sdk_cli/contracts.py +0 -221
  22. multiversx_sdk_cli-11.1.1/multiversx_sdk_cli/delegation.py +0 -806
  23. multiversx_sdk_cli-11.1.1/multiversx_sdk_cli/governance.py +0 -269
  24. multiversx_sdk_cli-11.1.1/multiversx_sdk_cli/multisig.py +0 -922
  25. multiversx_sdk_cli-11.1.1/multiversx_sdk_cli/transactions.py +0 -117
  26. multiversx_sdk_cli-11.1.1/multiversx_sdk_cli/validators.py +0 -539
  27. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/.gitignore +0 -0
  28. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/LICENSE +0 -0
  29. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/README.md +0 -0
  30. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/__init__.py +0 -0
  31. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/args_validation.py +0 -0
  32. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_config.py +0 -0
  33. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_config_env.py +0 -0
  34. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_config_wallet.py +0 -0
  35. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_data.py +0 -0
  36. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_deps.py +0 -0
  37. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_dns.py +0 -0
  38. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_faucet.py +0 -0
  39. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_ledger.py +0 -0
  40. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_localnet.py +0 -0
  41. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_output.py +0 -0
  42. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_password.py +0 -0
  43. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_validator_wallet.py +0 -0
  44. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cli_wallet.py +0 -0
  45. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/config.py +0 -0
  46. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/config_env.py +0 -0
  47. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/config_wallet.py +0 -0
  48. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/contract_verification.py +0 -0
  49. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/cosign_transaction.py +0 -0
  50. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/dependencies/__init__.py +0 -0
  51. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/dependencies/install.py +0 -0
  52. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/dependencies/modules.py +0 -0
  53. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/dependencies/resolution.py +0 -0
  54. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/docker.py +0 -0
  55. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/downloader.py +0 -0
  56. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/guardian_relayer_data.py +0 -0
  57. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/guards.py +0 -0
  58. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/__init__.py +0 -0
  59. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/config_default.py +0 -0
  60. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/config_general.py +0 -0
  61. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/config_networking.py +0 -0
  62. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/config_part.py +0 -0
  63. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/config_root.py +0 -0
  64. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/config_sharding.py +0 -0
  65. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/config_software.py +0 -0
  66. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/constants.py +0 -0
  67. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/genesis.py +0 -0
  68. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/genesis_json.py +0 -0
  69. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/genesis_smart_contracts_json.py +0 -0
  70. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/libraries.py +0 -0
  71. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/node.py +0 -0
  72. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/node_config_toml.py +0 -0
  73. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/nodes_setup_json.py +0 -0
  74. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/p2p_toml.py +0 -0
  75. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/seednode_p2pKey.pem +0 -0
  76. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/step_build_software.py +0 -0
  77. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/step_clean.py +0 -0
  78. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/step_config.py +0 -0
  79. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/step_new.py +0 -0
  80. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/step_prerequisites.py +0 -0
  81. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/step_start.py +0 -0
  82. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/localnet/wallets.py +0 -0
  83. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/myprocess.py +0 -0
  84. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/sign_verify.py +0 -0
  85. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/simulation.py +0 -0
  86. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/utils.py +0 -0
  87. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/ux.py +0 -0
  88. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/version.py +0 -0
  89. {multiversx_sdk_cli-11.1.1 → multiversx_sdk_cli-11.2.0}/multiversx_sdk_cli/workstation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multiversx-sdk-cli
3
- Version: 11.1.1
3
+ Version: 11.2.0
4
4
  Summary: MultiversX Smart Contracts Tools
5
5
  Project-URL: Homepage, https://github.com/multiversx/mx-sdk-py-cli
6
6
  Author: MultiversX
@@ -13,7 +13,7 @@ Classifier: Programming Language :: Python :: 3
13
13
  Requires-Python: >=3.10
14
14
  Requires-Dist: argcomplete==3.2.2
15
15
  Requires-Dist: ledgercomm[hid]
16
- Requires-Dist: multiversx-sdk[ledger]==2.0.1
16
+ Requires-Dist: multiversx-sdk[ledger]==2.2.0
17
17
  Requires-Dist: requests<3.0.0,>=2.32.0
18
18
  Requires-Dist: rich==13.3.4
19
19
  Requires-Dist: toml>=0.10.2
@@ -0,0 +1,69 @@
1
+ import logging
2
+ from typing import Any
3
+
4
+ from multiversx_sdk import Address
5
+ from multiversx_sdk.abi import (
6
+ AddressValue,
7
+ BigUIntValue,
8
+ BoolValue,
9
+ BytesValue,
10
+ StringValue,
11
+ )
12
+
13
+ from multiversx_sdk_cli.config_env import get_address_hrp
14
+ from multiversx_sdk_cli.constants import (
15
+ ADDRESS_PREFIX,
16
+ FALSE_STR_LOWER,
17
+ HEX_PREFIX,
18
+ MAINCHAIN_ADDRESS_HRP,
19
+ STR_PREFIX,
20
+ TRUE_STR_LOWER,
21
+ )
22
+ from multiversx_sdk_cli.errors import BadUserInput
23
+
24
+ logger = logging.getLogger("args_converter")
25
+
26
+
27
+ def convert_args_to_typed_values(arguments: list[str]) -> list[Any]:
28
+ args: list[Any] = []
29
+
30
+ for arg in arguments:
31
+ if arg.startswith(HEX_PREFIX):
32
+ args.append(BytesValue(_hex_to_bytes(arg)))
33
+ elif arg.isnumeric():
34
+ args.append(BigUIntValue(int(arg)))
35
+ elif arg.startswith(ADDRESS_PREFIX):
36
+ args.append(AddressValue.new_from_address(Address.new_from_bech32(arg[len(ADDRESS_PREFIX) :])))
37
+ elif arg.startswith(MAINCHAIN_ADDRESS_HRP):
38
+ # this flow will be removed in the future
39
+ logger.warning(
40
+ "Address argument has no prefix. This flow will be removed in the future. Please provide each address using the `addr:` prefix. (e.g. --arguments addr:erd1...)"
41
+ )
42
+ args.append(AddressValue.new_from_address(Address.new_from_bech32(arg)))
43
+ elif arg.startswith(get_address_hrp()):
44
+ args.append(AddressValue.new_from_address(Address.new_from_bech32(arg)))
45
+ elif arg.lower() == FALSE_STR_LOWER:
46
+ args.append(BoolValue(False))
47
+ elif arg.lower() == TRUE_STR_LOWER:
48
+ args.append(BoolValue(True))
49
+ elif arg.startswith(STR_PREFIX):
50
+ args.append(StringValue(arg[len(STR_PREFIX) :]))
51
+ else:
52
+ raise BadUserInput(
53
+ f"Unknown argument type for argument: `{arg}`. Use `mxpy contract <sub-command> --help` to check all supported arguments"
54
+ )
55
+
56
+ return args
57
+
58
+
59
+ def _hex_to_bytes(arg: str):
60
+ argument = arg[len(HEX_PREFIX) :]
61
+ argument = argument.upper()
62
+ argument = _ensure_even_length(argument)
63
+ return bytes.fromhex(argument)
64
+
65
+
66
+ def _ensure_even_length(string: str) -> str:
67
+ if len(string) % 2 == 1:
68
+ return "0" + string
69
+ return string
@@ -23,6 +23,7 @@ import multiversx_sdk_cli.cli_governance
23
23
  import multiversx_sdk_cli.cli_ledger
24
24
  import multiversx_sdk_cli.cli_localnet
25
25
  import multiversx_sdk_cli.cli_multisig
26
+ import multiversx_sdk_cli.cli_tokens
26
27
  import multiversx_sdk_cli.cli_transactions
27
28
  import multiversx_sdk_cli.cli_validator_wallet
28
29
  import multiversx_sdk_cli.cli_validators
@@ -142,6 +143,7 @@ See:
142
143
  commands.append(multiversx_sdk_cli.cli_governance.setup_parser(args, subparsers))
143
144
  commands.append(multiversx_sdk_cli.cli_config_env.setup_parser(subparsers))
144
145
  commands.append(multiversx_sdk_cli.cli_get.setup_parser(subparsers))
146
+ commands.append(multiversx_sdk_cli.cli_tokens.setup_parser(args, subparsers))
145
147
 
146
148
  parser.epilog = """
147
149
  ----------------------
@@ -11,12 +11,13 @@ from multiversx_sdk import (
11
11
  AddressComputer,
12
12
  Message,
13
13
  ProxyNetworkProvider,
14
+ SmartContractController,
14
15
  Transaction,
15
- TransactionsFactoryConfig,
16
16
  )
17
17
  from multiversx_sdk.abi import Abi
18
18
 
19
19
  from multiversx_sdk_cli import cli_shared, utils
20
+ from multiversx_sdk_cli.args_converter import convert_args_to_typed_values
20
21
  from multiversx_sdk_cli.args_validation import (
21
22
  validate_broadcast_args,
22
23
  validate_chain_id_args,
@@ -28,9 +29,8 @@ from multiversx_sdk_cli.config import get_config_for_network_providers
28
29
  from multiversx_sdk_cli.config_env import MxpyEnv
29
30
  from multiversx_sdk_cli.constants import NUMBER_OF_SHARDS
30
31
  from multiversx_sdk_cli.contract_verification import trigger_contract_verification
31
- from multiversx_sdk_cli.contracts import SmartContract
32
32
  from multiversx_sdk_cli.docker import is_docker_installed, run_docker
33
- from multiversx_sdk_cli.errors import DockerMissingError
33
+ from multiversx_sdk_cli.errors import BadUsage, DockerMissingError, QueryContractError
34
34
  from multiversx_sdk_cli.ux import show_warning
35
35
 
36
36
  logger = logging.getLogger("cli.contracts")
@@ -295,6 +295,7 @@ def _add_arguments_arg(sub: Any):
295
295
  sub.add_argument(
296
296
  "--arguments",
297
297
  nargs="+",
298
+ default=[],
298
299
  help="arguments for the contract transaction, as [number, bech32-address, ascii string, "
299
300
  "boolean] or hex-encoded. E.g. --arguments 42 0x64 1000 0xabba str:TOK-a1c2ef true addr:erd1[..]",
300
301
  )
@@ -315,6 +316,27 @@ After installing, use the `sc-meta all build` command. To learn more about `sc-m
315
316
  show_warning(message)
316
317
 
317
318
 
319
+ def _initialize_controller(args: Any) -> SmartContractController:
320
+ chain_id = cli_shared.get_chain_id(args.proxy, args.chain)
321
+ config = get_config_for_network_providers()
322
+ proxy_url = args.proxy if args.proxy else ""
323
+ proxy = ProxyNetworkProvider(url=proxy_url, config=config)
324
+ abi = Abi.load(Path(args.abi)) if args.abi else None
325
+ gas_estimator = cli_shared.initialize_gas_limit_estimator(args)
326
+
327
+ return SmartContractController(
328
+ chain_id=chain_id,
329
+ network_provider=proxy,
330
+ abi=abi,
331
+ gas_limit_estimator=gas_estimator,
332
+ )
333
+
334
+
335
+ def _ensure_args_for_gas_estimation(args: Any):
336
+ if not args.proxy and not args.gas_limit:
337
+ raise BadUsage("To estimate the gas limit, you need to provide `--proxy` or set a value using `--gas-limit`")
338
+
339
+
318
340
  def deploy(args: Any):
319
341
  logger.debug("deploy")
320
342
 
@@ -322,37 +344,33 @@ def deploy(args: Any):
322
344
  validate_broadcast_args(args)
323
345
  validate_chain_id_args(args)
324
346
 
347
+ _ensure_args_for_gas_estimation(args)
348
+
325
349
  sender = cli_shared.prepare_sender(args)
326
350
  guardian_and_relayer_data = cli_shared.get_guardian_and_relayer_data(
327
351
  sender=sender.address.to_bech32(),
328
352
  args=args,
329
353
  )
330
354
 
331
- chain_id = cli_shared.get_chain_id(args.proxy, args.chain)
332
- config = TransactionsFactoryConfig(chain_id)
333
-
334
- abi = Abi.load(Path(args.abi)) if args.abi else None
335
- gas_estimator = cli_shared.initialize_gas_limit_estimator(args)
336
- contract = SmartContract(config, abi, gas_estimator)
337
-
338
355
  arguments, should_prepare_args = _get_contract_arguments(args)
356
+ if should_prepare_args:
357
+ arguments = convert_args_to_typed_values(arguments)
339
358
 
340
- tx = contract.prepare_deploy_transaction(
341
- owner=sender,
359
+ controller = _initialize_controller(args)
360
+ tx = controller.create_transaction_for_deploy(
361
+ sender=sender,
362
+ nonce=sender.nonce,
342
363
  bytecode=Path(args.bytecode),
343
364
  arguments=arguments,
344
- should_prepare_args=should_prepare_args,
345
- upgradeable=args.metadata_upgradeable,
346
- readable=args.metadata_readable,
347
- payable=args.metadata_payable,
348
- payable_by_sc=args.metadata_payable_by_sc,
365
+ native_transfer_amount=int(args.value),
366
+ is_upgradeable=args.metadata_upgradeable,
367
+ is_readable=args.metadata_readable,
368
+ is_payable=args.metadata_payable,
369
+ is_payable_by_sc=args.metadata_payable_by_sc,
370
+ guardian=guardian_and_relayer_data.guardian_address,
371
+ relayer=guardian_and_relayer_data.relayer_address,
349
372
  gas_limit=args.gas_limit,
350
- gas_price=int(args.gas_price),
351
- value=int(args.value),
352
- nonce=sender.nonce,
353
- version=int(args.version),
354
- options=int(args.options),
355
- guardian_and_relayer_data=guardian_and_relayer_data,
373
+ gas_price=args.gas_price,
356
374
  )
357
375
 
358
376
  address_computer = AddressComputer(NUMBER_OF_SHARDS)
@@ -361,8 +379,18 @@ def deploy(args: Any):
361
379
  logger.info("Contract address: %s", contract_address.to_bech32())
362
380
 
363
381
  cli_config = MxpyEnv.from_active_env()
364
- utils.log_explorer_contract_address(args.chain, contract_address.to_bech32(), cli_config.explorer_url)
382
+ utils.log_explorer_contract_address(
383
+ chain=cli_shared.get_chain_id(args.proxy, args.chain),
384
+ address=contract_address.to_bech32(),
385
+ explorer_url=cli_config.explorer_url,
386
+ )
365
387
 
388
+ cli_shared.alter_transaction_and_sign_again_if_needed(
389
+ args=args,
390
+ tx=tx,
391
+ sender=sender,
392
+ guardian_and_relayer_data=guardian_and_relayer_data,
393
+ )
366
394
  _send_or_simulate(tx, contract_address, args)
367
395
 
368
396
 
@@ -373,42 +401,45 @@ def call(args: Any):
373
401
  validate_broadcast_args(args)
374
402
  validate_chain_id_args(args)
375
403
 
404
+ _ensure_args_for_gas_estimation(args)
405
+
376
406
  sender = cli_shared.prepare_sender(args)
377
407
  guardian_and_relayer_data = cli_shared.get_guardian_and_relayer_data(
378
408
  sender=sender.address.to_bech32(),
379
409
  args=args,
380
410
  )
381
411
 
382
- chain_id = cli_shared.get_chain_id(args.proxy, args.chain)
383
- config = TransactionsFactoryConfig(chain_id)
384
-
385
- abi = Abi.load(Path(args.abi)) if args.abi else None
386
- gas_estimator = cli_shared.initialize_gas_limit_estimator(args)
387
- contract = SmartContract(config, abi, gas_estimator)
388
-
389
412
  arguments, should_prepare_args = _get_contract_arguments(args)
390
- contract_address = Address.new_from_bech32(args.contract)
413
+ if should_prepare_args:
414
+ arguments = convert_args_to_typed_values(arguments)
391
415
 
392
- token_transfers = None
416
+ token_transfers = []
393
417
  if args.token_transfers:
394
418
  token_transfers = cli_shared.prepare_token_transfers(args.token_transfers)
395
419
 
396
- tx = contract.prepare_execute_transaction(
397
- caller=sender,
420
+ contract_address = Address.new_from_bech32(args.contract)
421
+ controller = _initialize_controller(args)
422
+
423
+ tx = controller.create_transaction_for_execute(
424
+ sender=sender,
425
+ nonce=sender.nonce,
398
426
  contract=contract_address,
399
427
  function=args.function,
400
428
  arguments=arguments,
401
- should_prepare_args=should_prepare_args,
402
- gas_limit=args.gas_limit,
403
- gas_price=int(args.gas_price),
404
- value=int(args.value),
429
+ native_transfer_amount=int(args.value),
405
430
  token_transfers=token_transfers,
406
- nonce=sender.nonce,
407
- version=int(args.version),
408
- options=int(args.options),
409
- guardian_and_relayer_data=guardian_and_relayer_data,
431
+ guardian=guardian_and_relayer_data.guardian_address,
432
+ relayer=guardian_and_relayer_data.relayer_address,
433
+ gas_limit=args.gas_limit,
434
+ gas_price=args.gas_price,
410
435
  )
411
436
 
437
+ cli_shared.alter_transaction_and_sign_again_if_needed(
438
+ args=args,
439
+ tx=tx,
440
+ sender=sender,
441
+ guardian_and_relayer_data=guardian_and_relayer_data,
442
+ )
412
443
  _send_or_simulate(tx, contract_address, args)
413
444
 
414
445
 
@@ -419,41 +450,44 @@ def upgrade(args: Any):
419
450
  validate_broadcast_args(args)
420
451
  validate_chain_id_args(args)
421
452
 
453
+ _ensure_args_for_gas_estimation(args)
454
+
422
455
  sender = cli_shared.prepare_sender(args)
423
456
  guardian_and_relayer_data = cli_shared.get_guardian_and_relayer_data(
424
457
  sender=sender.address.to_bech32(),
425
458
  args=args,
426
459
  )
427
460
 
428
- chain_id = cli_shared.get_chain_id(args.proxy, args.chain)
429
- config = TransactionsFactoryConfig(chain_id)
430
-
431
- abi = Abi.load(Path(args.abi)) if args.abi else None
432
- gas_estimator = cli_shared.initialize_gas_limit_estimator(args)
433
- contract = SmartContract(config, abi, gas_estimator)
434
-
435
461
  arguments, should_prepare_args = _get_contract_arguments(args)
462
+ if should_prepare_args:
463
+ arguments = convert_args_to_typed_values(arguments)
464
+
436
465
  contract_address = Address.new_from_bech32(args.contract)
466
+ controller = _initialize_controller(args)
437
467
 
438
- tx = contract.prepare_upgrade_transaction(
439
- owner=sender,
468
+ tx = controller.create_transaction_for_upgrade(
469
+ sender=sender,
470
+ nonce=sender.nonce,
440
471
  contract=contract_address,
441
472
  bytecode=Path(args.bytecode),
442
473
  arguments=arguments,
443
- should_prepare_args=should_prepare_args,
444
- upgradeable=args.metadata_upgradeable,
445
- readable=args.metadata_readable,
446
- payable=args.metadata_payable,
447
- payable_by_sc=args.metadata_payable_by_sc,
474
+ native_transfer_amount=int(args.value),
475
+ is_upgradeable=args.metadata_upgradeable,
476
+ is_readable=args.metadata_readable,
477
+ is_payable=args.metadata_payable,
478
+ is_payable_by_sc=args.metadata_payable_by_sc,
479
+ guardian=guardian_and_relayer_data.guardian_address,
480
+ relayer=guardian_and_relayer_data.relayer_address,
448
481
  gas_limit=args.gas_limit,
449
- gas_price=int(args.gas_price),
450
- value=int(args.value),
451
- nonce=sender.nonce,
452
- version=int(args.version),
453
- options=int(args.options),
454
- guardian_and_relayer_data=guardian_and_relayer_data,
482
+ gas_price=args.gas_price,
455
483
  )
456
484
 
485
+ cli_shared.alter_transaction_and_sign_again_if_needed(
486
+ args=args,
487
+ tx=tx,
488
+ sender=sender,
489
+ guardian_and_relayer_data=guardian_and_relayer_data,
490
+ )
457
491
  _send_or_simulate(tx, contract_address, args)
458
492
 
459
493
 
@@ -462,26 +496,32 @@ def query(args: Any):
462
496
 
463
497
  validate_proxy_argument(args)
464
498
 
465
- # we don't need chainID to query a contract; we use the provided proxy
466
- factory_config = TransactionsFactoryConfig("")
467
499
  abi = Abi.load(Path(args.abi)) if args.abi else None
468
- contract = SmartContract(factory_config, abi)
500
+ contract_address = Address.new_from_bech32(args.contract)
501
+ function = args.function
469
502
 
470
503
  arguments, should_prepare_args = _get_contract_arguments(args)
471
- contract_address = Address.new_from_bech32(args.contract)
504
+ if should_prepare_args:
505
+ arguments = convert_args_to_typed_values(arguments)
472
506
 
473
507
  network_provider_config = get_config_for_network_providers()
474
508
  proxy = ProxyNetworkProvider(url=args.proxy, config=network_provider_config)
475
- function = args.function
476
509
 
477
- result = contract.query_contract(
478
- contract_address=contract_address,
479
- proxy=proxy,
480
- function=function,
481
- arguments=arguments,
482
- should_prepare_args=should_prepare_args,
510
+ controller = SmartContractController(
511
+ chain_id="",
512
+ network_provider=proxy,
513
+ abi=abi,
483
514
  )
484
515
 
516
+ try:
517
+ result = controller.query(
518
+ contract=contract_address,
519
+ function=function,
520
+ arguments=arguments,
521
+ )
522
+ except Exception as e:
523
+ raise QueryContractError("Couldn't query contract: ", e)
524
+
485
525
  utils.dump_out_json(result)
486
526
 
487
527