multiversx-sdk-cli 7.0.0b0__tar.gz → 7.1.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.
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/PKG-INFO +4 -4
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_contracts.py +38 -29
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_delegation.py +13 -12
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_dns.py +1 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_password.py +8 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_shared.py +73 -20
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_transactions.py +46 -1
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_validators.py +1 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/contract_verification.py +19 -14
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/contracts.py +16 -2
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cosign_transaction.py +2 -2
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/dependencies/modules.py +5 -1
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/dns.py +1 -1
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/transactions.py +51 -14
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/pyproject.toml +4 -4
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/.gitignore +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/LICENSE +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/README.md +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/.vscode/settings.json +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/__init__.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/accounts.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_accounts.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_block.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_config.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_data.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_deps.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_ledger.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_localnet.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_network.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_output.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_wallet.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/config.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/constants.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/delegation/__init__.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/delegation/staking_provider.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/dependencies/__init__.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/dependencies/install.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/dependencies/resolution.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/diskcache.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/docker.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/downloader.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/errors.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/guards.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/interfaces.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/ledger/__init__.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/ledger/config.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/ledger/ledger_app_handler.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/ledger/ledger_functions.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/__init__.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/config_default.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/config_general.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/config_networking.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/config_part.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/config_root.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/config_sharding.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/config_software.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/constants.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/genesis.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/genesis_json.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/genesis_smart_contracts_json.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/libraries.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/node.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/node_config_toml.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/nodes_setup_json.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/p2p_toml.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/seednode_p2pKey.pem +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/step_build_software.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/step_clean.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/step_config.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/step_new.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/step_prerequisites.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/step_start.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/localnet/wallets.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/myprocess.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/__init__.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/constants.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/core.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/interfaces.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/migrations.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/project_base.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/project_clang.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/project_cpp.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/project_rust.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/project_sol.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/__init__.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/data/__init__.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/data/common.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/data/extracted_feature.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/data/folder_report.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/data/project_report.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/data/report.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/data/wasm_report.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/do_report.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/features/__init__.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/features/features.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/features/report_option.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/features/size.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/features/twiggy_paths_check.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/format/__init__.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/format/change_type.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/format/format_options.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/report/report_creator.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/shared.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/templates.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/templates_config.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/projects/templates_repository.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/simulation.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/utils.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/ux.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/validators/__init__.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/validators/core.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/validators/validators_file.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/version.py +0 -0
- {multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/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: 7.0
|
|
3
|
+
Version: 7.1.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
|
|
@@ -12,9 +12,9 @@ Classifier: Operating System :: OS Independent
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
13
|
Requires-Python: >=3.8
|
|
14
14
|
Requires-Dist: ledgercomm[hid]
|
|
15
|
-
Requires-Dist: multiversx-sdk-core>=0.
|
|
16
|
-
Requires-Dist: multiversx-sdk-network-providers
|
|
17
|
-
Requires-Dist: multiversx-sdk-wallet
|
|
15
|
+
Requires-Dist: multiversx-sdk-core>=0.5.0
|
|
16
|
+
Requires-Dist: multiversx-sdk-network-providers>=0.11.0
|
|
17
|
+
Requires-Dist: multiversx-sdk-wallet>=0.7.0
|
|
18
18
|
Requires-Dist: prettytable
|
|
19
19
|
Requires-Dist: requests
|
|
20
20
|
Requires-Dist: requests-cache
|
|
@@ -14,8 +14,7 @@ from multiversx_sdk_cli.contract_verification import \
|
|
|
14
14
|
trigger_contract_verification
|
|
15
15
|
from multiversx_sdk_cli.contracts import CodeMetadata, SmartContract
|
|
16
16
|
from multiversx_sdk_cli.docker import is_docker_installed, run_docker
|
|
17
|
-
from multiversx_sdk_cli.errors import DockerMissingError
|
|
18
|
-
from multiversx_sdk_cli.projects import load_project
|
|
17
|
+
from multiversx_sdk_cli.errors import DockerMissingError, NoWalletProvided
|
|
19
18
|
from multiversx_sdk_cli.projects.core import get_project_paths_recursively
|
|
20
19
|
from multiversx_sdk_cli.transactions import Transaction
|
|
21
20
|
from multiversx_sdk_cli.cosign_transaction import cosign_transaction
|
|
@@ -71,7 +70,7 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
|
|
|
71
70
|
|
|
72
71
|
output_description = CLIOutputBuilder.describe(with_contract=True, with_transaction_on_network=True, with_simulation=True)
|
|
73
72
|
sub = cli_shared.add_command_subparser(subparsers, "contract", "deploy", f"Deploy a Smart Contract.{output_description}")
|
|
74
|
-
|
|
73
|
+
_add_bytecode_arg(sub)
|
|
75
74
|
_add_metadata_arg(sub)
|
|
76
75
|
cli_shared.add_outfile_arg(sub)
|
|
77
76
|
cli_shared.add_wallet_args(args, sub)
|
|
@@ -83,6 +82,7 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
|
|
|
83
82
|
sub.add_argument("--timeout", default=100, help="max num of seconds to wait for result"
|
|
84
83
|
" - only valid if --wait-result is set")
|
|
85
84
|
cli_shared.add_broadcast_args(sub)
|
|
85
|
+
cli_shared.add_guardian_wallet_args(args, sub)
|
|
86
86
|
|
|
87
87
|
sub.set_defaults(func=deploy)
|
|
88
88
|
|
|
@@ -100,6 +100,7 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
|
|
|
100
100
|
sub.add_argument("--timeout", default=100, help="max num of seconds to wait for result"
|
|
101
101
|
" - only valid if --wait-result is set")
|
|
102
102
|
cli_shared.add_broadcast_args(sub, relay=True)
|
|
103
|
+
cli_shared.add_guardian_wallet_args(args, sub)
|
|
103
104
|
|
|
104
105
|
sub.set_defaults(func=call)
|
|
105
106
|
|
|
@@ -107,7 +108,7 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
|
|
|
107
108
|
f"Upgrade a previously-deployed Smart Contract.{output_description}")
|
|
108
109
|
_add_contract_arg(sub)
|
|
109
110
|
cli_shared.add_outfile_arg(sub)
|
|
110
|
-
|
|
111
|
+
_add_bytecode_arg(sub)
|
|
111
112
|
_add_metadata_arg(sub)
|
|
112
113
|
cli_shared.add_wallet_args(args, sub)
|
|
113
114
|
cli_shared.add_proxy_arg(sub)
|
|
@@ -118,6 +119,7 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
|
|
|
118
119
|
sub.add_argument("--timeout", default=100, help="max num of seconds to wait for result"
|
|
119
120
|
" - only valid if --wait-result is set")
|
|
120
121
|
cli_shared.add_broadcast_args(sub)
|
|
122
|
+
cli_shared.add_guardian_wallet_args(args, sub)
|
|
121
123
|
|
|
122
124
|
sub.set_defaults(func=upgrade)
|
|
123
125
|
|
|
@@ -147,6 +149,7 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
|
|
|
147
149
|
help="the url of the service that validates the contract",
|
|
148
150
|
)
|
|
149
151
|
sub.add_argument("--docker-image", required=True, help="the docker image used for the build")
|
|
152
|
+
sub.add_argument("--contract-variant", required=False, default=None, help="in case of a multicontract, specify the contract variant you want to verify")
|
|
150
153
|
cli_shared.add_wallet_args(args, sub)
|
|
151
154
|
sub.set_defaults(func=verify)
|
|
152
155
|
|
|
@@ -191,12 +194,9 @@ def _add_recursive_arg(sub: Any):
|
|
|
191
194
|
sub.add_argument("-r", "--recursive", dest="recursive", action="store_true", help="locate projects recursively")
|
|
192
195
|
|
|
193
196
|
|
|
194
|
-
def
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
help="🗀 the project directory (default: current directory)")
|
|
198
|
-
group.add_argument("--bytecode", type=str,
|
|
199
|
-
help="the file containing the WASM bytecode")
|
|
197
|
+
def _add_bytecode_arg(sub: Any):
|
|
198
|
+
sub.add_argument("--bytecode", type=str, required=True,
|
|
199
|
+
help="the file containing the WASM bytecode")
|
|
200
200
|
|
|
201
201
|
|
|
202
202
|
def _add_contract_arg(sub: Any):
|
|
@@ -285,7 +285,7 @@ def run_tests(args: Any):
|
|
|
285
285
|
|
|
286
286
|
def deploy(args: Any):
|
|
287
287
|
logger.debug("deploy")
|
|
288
|
-
cli_shared.
|
|
288
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
289
289
|
cli_shared.check_broadcast_args(args)
|
|
290
290
|
|
|
291
291
|
arguments = args.arguments
|
|
@@ -299,9 +299,7 @@ def deploy(args: Any):
|
|
|
299
299
|
sender = _prepare_sender(args)
|
|
300
300
|
|
|
301
301
|
tx = contract.deploy(sender, arguments, gas_price, gas_limit, value, chain, version, args.guardian, args.options)
|
|
302
|
-
|
|
303
|
-
if args.guardian:
|
|
304
|
-
tx = cosign_transaction(tx, args.guardian_service_url, args.guardian_2fa_code)
|
|
302
|
+
tx = _sign_guarded_tx(args, tx)
|
|
305
303
|
|
|
306
304
|
logger.info("Contract address: %s", contract.address)
|
|
307
305
|
utils.log_explorer_contract_address(chain, contract.address)
|
|
@@ -310,12 +308,7 @@ def deploy(args: Any):
|
|
|
310
308
|
|
|
311
309
|
|
|
312
310
|
def _prepare_contract(args: Any) -> SmartContract:
|
|
313
|
-
|
|
314
|
-
bytecode = utils.read_binary_file(Path(args.bytecode)).hex()
|
|
315
|
-
else:
|
|
316
|
-
project_path = Path(args.project)
|
|
317
|
-
project = load_project(project_path)
|
|
318
|
-
bytecode = project.get_bytecode()
|
|
311
|
+
bytecode = utils.read_binary_file(Path(args.bytecode)).hex()
|
|
319
312
|
|
|
320
313
|
metadata = CodeMetadata(upgradeable=args.metadata_upgradeable, readable=args.metadata_readable,
|
|
321
314
|
payable=args.metadata_payable, payable_by_sc=args.metadata_payable_by_sc)
|
|
@@ -360,9 +353,28 @@ def _prepare_signer(args: Any) -> Account:
|
|
|
360
353
|
return sender
|
|
361
354
|
|
|
362
355
|
|
|
356
|
+
def _sign_guarded_tx(args: Any, tx: Transaction) -> Transaction:
|
|
357
|
+
signature = tx.signature
|
|
358
|
+
tx.signature = ""
|
|
359
|
+
|
|
360
|
+
try:
|
|
361
|
+
guardian_account = cli_shared.prepare_guardian_account(args)
|
|
362
|
+
except NoWalletProvided:
|
|
363
|
+
guardian_account = None
|
|
364
|
+
|
|
365
|
+
if guardian_account:
|
|
366
|
+
tx.guardianSignature = guardian_account.sign_transaction(tx)
|
|
367
|
+
elif args.guardian:
|
|
368
|
+
tx = cosign_transaction(tx, args.guardian_service_url, args.guardian_2fa_code) # type: ignore
|
|
369
|
+
|
|
370
|
+
tx.signature = signature
|
|
371
|
+
|
|
372
|
+
return tx
|
|
373
|
+
|
|
374
|
+
|
|
363
375
|
def call(args: Any):
|
|
364
376
|
logger.debug("call")
|
|
365
|
-
cli_shared.
|
|
377
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
366
378
|
cli_shared.check_broadcast_args(args)
|
|
367
379
|
|
|
368
380
|
contract_address = args.contract
|
|
@@ -378,9 +390,7 @@ def call(args: Any):
|
|
|
378
390
|
sender = _prepare_sender(args)
|
|
379
391
|
|
|
380
392
|
tx = contract.execute(sender, function, arguments, gas_price, gas_limit, value, chain, version, args.guardian, args.options)
|
|
381
|
-
|
|
382
|
-
if args.guardian:
|
|
383
|
-
tx = cosign_transaction(tx, args.guardian_service_url, args.guardian_2fa_code)
|
|
393
|
+
tx = _sign_guarded_tx(args, tx)
|
|
384
394
|
|
|
385
395
|
_send_or_simulate(tx, contract, args)
|
|
386
396
|
|
|
@@ -401,10 +411,8 @@ def upgrade(args: Any):
|
|
|
401
411
|
contract.address = Address(contract_address)
|
|
402
412
|
sender = _prepare_sender(args)
|
|
403
413
|
|
|
404
|
-
tx = contract.upgrade(sender, arguments, gas_price, gas_limit, value, chain, version, args.
|
|
405
|
-
|
|
406
|
-
if args.guardian:
|
|
407
|
-
tx = cosign_transaction(tx, args.guardian_service_url, args.guardian_2fa_code)
|
|
414
|
+
tx = contract.upgrade(sender, arguments, gas_price, gas_limit, value, chain, version, args.guardian, args.options)
|
|
415
|
+
tx = _sign_guarded_tx(args, tx)
|
|
408
416
|
|
|
409
417
|
_send_or_simulate(tx, contract, args)
|
|
410
418
|
|
|
@@ -435,9 +443,10 @@ def verify(args: Any) -> None:
|
|
|
435
443
|
|
|
436
444
|
owner = _prepare_signer(args)
|
|
437
445
|
docker_image = args.docker_image
|
|
446
|
+
contract_variant = args.contract_variant
|
|
438
447
|
|
|
439
448
|
trigger_contract_verification(
|
|
440
|
-
packaged_src, owner, contract, verifier_url, docker_image
|
|
449
|
+
packaged_src, owner, contract, verifier_url, docker_image, contract_variant
|
|
441
450
|
)
|
|
442
451
|
logger.info("Contract verification request completed!")
|
|
443
452
|
|
{multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_delegation.py
RENAMED
|
@@ -134,10 +134,11 @@ def _add_common_arguments(args: List[str], sub: Any):
|
|
|
134
134
|
cli_shared.add_tx_args(args, sub, with_receiver=False, with_data=False, with_estimate_gas=True, with_guardian=True)
|
|
135
135
|
cli_shared.add_broadcast_args(sub, relay=False)
|
|
136
136
|
cli_shared.add_outfile_arg(sub, what="signed transaction, hash")
|
|
137
|
+
cli_shared.add_guardian_wallet_args(args, sub)
|
|
137
138
|
|
|
138
139
|
|
|
139
140
|
def do_create_delegation_contract(args: Any):
|
|
140
|
-
cli_shared.
|
|
141
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
141
142
|
cli_shared.check_broadcast_args(args)
|
|
142
143
|
cli_shared.prepare_nonce_in_args(args)
|
|
143
144
|
staking_provider.prepare_args_for_create_new_staking_contract(args)
|
|
@@ -161,7 +162,7 @@ def get_contract_address_by_deploy_tx_hash(args: Any):
|
|
|
161
162
|
|
|
162
163
|
|
|
163
164
|
def add_new_nodes(args: Any):
|
|
164
|
-
cli_shared.
|
|
165
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
165
166
|
cli_shared.check_broadcast_args(args)
|
|
166
167
|
cli_shared.prepare_nonce_in_args(args)
|
|
167
168
|
staking_provider.prepare_args_for_add_nodes(args)
|
|
@@ -171,7 +172,7 @@ def add_new_nodes(args: Any):
|
|
|
171
172
|
|
|
172
173
|
|
|
173
174
|
def remove_nodes(args: Any):
|
|
174
|
-
cli_shared.
|
|
175
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
175
176
|
cli_shared.check_broadcast_args(args)
|
|
176
177
|
cli_shared.prepare_nonce_in_args(args)
|
|
177
178
|
staking_provider.prepare_args_for_remove_nodes(args)
|
|
@@ -181,7 +182,7 @@ def remove_nodes(args: Any):
|
|
|
181
182
|
|
|
182
183
|
|
|
183
184
|
def stake_nodes(args: Any):
|
|
184
|
-
cli_shared.
|
|
185
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
185
186
|
cli_shared.check_broadcast_args(args)
|
|
186
187
|
cli_shared.prepare_nonce_in_args(args)
|
|
187
188
|
staking_provider.prepare_args_for_stake_nodes(args)
|
|
@@ -191,7 +192,7 @@ def stake_nodes(args: Any):
|
|
|
191
192
|
|
|
192
193
|
|
|
193
194
|
def unbond_nodes(args: Any):
|
|
194
|
-
cli_shared.
|
|
195
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
195
196
|
cli_shared.check_broadcast_args(args)
|
|
196
197
|
cli_shared.prepare_nonce_in_args(args)
|
|
197
198
|
staking_provider.prepare_args_for_unbond_nodes(args)
|
|
@@ -201,7 +202,7 @@ def unbond_nodes(args: Any):
|
|
|
201
202
|
|
|
202
203
|
|
|
203
204
|
def unstake_nodes(args: Any):
|
|
204
|
-
cli_shared.
|
|
205
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
205
206
|
cli_shared.check_broadcast_args(args)
|
|
206
207
|
cli_shared.prepare_nonce_in_args(args)
|
|
207
208
|
staking_provider.prepare_args_for_unstake_nodes(args)
|
|
@@ -211,7 +212,7 @@ def unstake_nodes(args: Any):
|
|
|
211
212
|
|
|
212
213
|
|
|
213
214
|
def unjail_nodes(args: Any):
|
|
214
|
-
cli_shared.
|
|
215
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
215
216
|
cli_shared.check_broadcast_args(args)
|
|
216
217
|
cli_shared.prepare_nonce_in_args(args)
|
|
217
218
|
staking_provider.prepare_args_for_unjail_nodes(args)
|
|
@@ -221,7 +222,7 @@ def unjail_nodes(args: Any):
|
|
|
221
222
|
|
|
222
223
|
|
|
223
224
|
def change_service_fee(args: Any):
|
|
224
|
-
cli_shared.
|
|
225
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
225
226
|
cli_shared.check_broadcast_args(args)
|
|
226
227
|
cli_shared.prepare_nonce_in_args(args)
|
|
227
228
|
staking_provider.prepare_args_change_service_fee(args)
|
|
@@ -231,7 +232,7 @@ def change_service_fee(args: Any):
|
|
|
231
232
|
|
|
232
233
|
|
|
233
234
|
def modify_delegation_cap(args: Any):
|
|
234
|
-
cli_shared.
|
|
235
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
235
236
|
cli_shared.check_broadcast_args(args)
|
|
236
237
|
cli_shared.prepare_nonce_in_args(args)
|
|
237
238
|
staking_provider.prepare_args_modify_delegation_cap(args)
|
|
@@ -241,7 +242,7 @@ def modify_delegation_cap(args: Any):
|
|
|
241
242
|
|
|
242
243
|
|
|
243
244
|
def automatic_activation(args: Any):
|
|
244
|
-
cli_shared.
|
|
245
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
245
246
|
cli_shared.check_broadcast_args(args)
|
|
246
247
|
cli_shared.prepare_nonce_in_args(args)
|
|
247
248
|
staking_provider.prepare_args_automatic_activation(args)
|
|
@@ -251,7 +252,7 @@ def automatic_activation(args: Any):
|
|
|
251
252
|
|
|
252
253
|
|
|
253
254
|
def redelegate_cap(args: Any):
|
|
254
|
-
cli_shared.
|
|
255
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
255
256
|
cli_shared.check_broadcast_args(args)
|
|
256
257
|
cli_shared.prepare_nonce_in_args(args)
|
|
257
258
|
staking_provider.prepare_args_redelegate_cap(args)
|
|
@@ -261,7 +262,7 @@ def redelegate_cap(args: Any):
|
|
|
261
262
|
|
|
262
263
|
|
|
263
264
|
def set_metadata(args: Any):
|
|
264
|
-
cli_shared.
|
|
265
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
265
266
|
cli_shared.check_broadcast_args(args)
|
|
266
267
|
cli_shared.prepare_nonce_in_args(args)
|
|
267
268
|
staking_provider.prepare_args_set_metadata(args)
|
|
@@ -18,6 +18,7 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
|
|
|
18
18
|
cli_shared.add_wallet_args(args, sub)
|
|
19
19
|
cli_shared.add_proxy_arg(sub)
|
|
20
20
|
cli_shared.add_tx_args(args, sub, with_receiver=False, with_data=False, with_guardian=True)
|
|
21
|
+
cli_shared.add_guardian_wallet_args(args, sub)
|
|
21
22
|
sub.add_argument("--name", help="the name to register")
|
|
22
23
|
sub.set_defaults(func=register)
|
|
23
24
|
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
from getpass import getpass
|
|
3
3
|
|
|
4
|
+
|
|
4
5
|
def load_password(args: Any):
|
|
5
6
|
if args.passfile:
|
|
6
7
|
with open(args.passfile) as pass_file:
|
|
7
8
|
return pass_file.read().strip()
|
|
8
9
|
return getpass("Keyfile's password: ")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def load_guardian_password(args: Any):
|
|
13
|
+
if args.guardian_passfile:
|
|
14
|
+
with open(args.guardian_passfile) as pass_file:
|
|
15
|
+
return pass_file.read().strip()
|
|
16
|
+
return getpass("Keyfile's password: ")
|
|
@@ -10,7 +10,7 @@ from multiversx_sdk_network_providers.proxy_network_provider import \
|
|
|
10
10
|
from multiversx_sdk_cli import config, errors, utils
|
|
11
11
|
from multiversx_sdk_cli.accounts import Account
|
|
12
12
|
from multiversx_sdk_cli.cli_output import CLIOutputBuilder
|
|
13
|
-
from multiversx_sdk_cli.cli_password import load_password
|
|
13
|
+
from multiversx_sdk_cli.cli_password import load_password, load_guardian_password
|
|
14
14
|
from multiversx_sdk_cli.ledger.ledger_functions import do_get_ledger_address
|
|
15
15
|
from multiversx_sdk_cli.simulation import Simulator
|
|
16
16
|
from multiversx_sdk_cli.transactions import Transaction
|
|
@@ -79,13 +79,17 @@ def add_tx_args(args: List[str], sub: Any, with_nonce: bool = True, with_receive
|
|
|
79
79
|
sub.add_argument("--version", type=int, default=config.get_tx_version(), help="the transaction version (default: %(default)s)")
|
|
80
80
|
|
|
81
81
|
if with_guardian:
|
|
82
|
-
sub
|
|
83
|
-
sub.add_argument("--guardian-service-url", type=str, help="the url of the guardian service")
|
|
84
|
-
sub.add_argument("--guardian-2fa-code", type=str, help="the 2fa code for the guardian")
|
|
82
|
+
add_guardian_args(sub)
|
|
85
83
|
|
|
86
84
|
sub.add_argument("--options", type=int, default=0, help="the transaction options (default: 0)")
|
|
87
85
|
|
|
88
86
|
|
|
87
|
+
def add_guardian_args(sub: Any):
|
|
88
|
+
sub.add_argument("--guardian", type=str, help="the address of the guradian")
|
|
89
|
+
sub.add_argument("--guardian-service-url", type=str, help="the url of the guardian service")
|
|
90
|
+
sub.add_argument("--guardian-2fa-code", type=str, help="the 2fa code for the guardian")
|
|
91
|
+
|
|
92
|
+
|
|
89
93
|
def add_wallet_args(args: List[str], sub: Any):
|
|
90
94
|
sub.add_argument("--pem", required=check_if_sign_method_required(args, "--pem"), help="🔑 the PEM file, if keyfile not provided")
|
|
91
95
|
sub.add_argument("--pem-index", default=0, help="🔑 the index in the PEM file (default: %(default)s)")
|
|
@@ -97,6 +101,16 @@ def add_wallet_args(args: List[str], sub: Any):
|
|
|
97
101
|
sub.add_argument("--sender-username", required=False, help="🖄 the username of the sender")
|
|
98
102
|
|
|
99
103
|
|
|
104
|
+
def add_guardian_wallet_args(args: List[str], sub: Any):
|
|
105
|
+
sub.add_argument("--guardian-pem", required=check_if_sign_method_required(args, "--guardian-pem"), help="🔑 the PEM file, if keyfile not provided")
|
|
106
|
+
sub.add_argument("--guardian-pem-index", default=0, help="🔑 the index in the PEM file (default: %(default)s)")
|
|
107
|
+
sub.add_argument("--guardian-keyfile", required=check_if_sign_method_required(args, "--guardian-keyfile"), help="🔑 a JSON keyfile, if PEM not provided")
|
|
108
|
+
sub.add_argument("--guardian-passfile", help="🔑 a file containing keyfile's password, if keyfile provided")
|
|
109
|
+
sub.add_argument("--guardian-ledger", action="store_true", required=check_if_sign_method_required(args, "--guardian-ledger"), default=False, help="🔐 bool flag for signing transaction using ledger")
|
|
110
|
+
sub.add_argument("--guardian-ledger-account-index", type=int, default=0, help="🔐 the index of the account when using Ledger")
|
|
111
|
+
sub.add_argument("--guardian-ledger-address-index", type=int, default=0, help="🔐 the index of the address when using Ledger")
|
|
112
|
+
|
|
113
|
+
|
|
100
114
|
def add_proxy_arg(sub: Any):
|
|
101
115
|
sub.add_argument("--proxy", default=config.get_proxy(), help="🔗 the URL of the proxy (default: %(default)s)")
|
|
102
116
|
|
|
@@ -121,19 +135,39 @@ def parse_omit_fields_arg(args: Any) -> List[str]:
|
|
|
121
135
|
return cast(List[str], parsed)
|
|
122
136
|
|
|
123
137
|
|
|
138
|
+
def prepare_account(args: Any):
|
|
139
|
+
if args.pem:
|
|
140
|
+
account = Account(pem_file=args.pem, pem_index=args.pem_index)
|
|
141
|
+
elif args.keyfile:
|
|
142
|
+
password = load_password(args)
|
|
143
|
+
account = Account(key_file=args.keyfile, password=password)
|
|
144
|
+
elif args.ledger:
|
|
145
|
+
address = do_get_ledger_address(account_index=args.ledger_account_index, address_index=args.ledger_address_index)
|
|
146
|
+
account = Account(address=address)
|
|
147
|
+
else:
|
|
148
|
+
raise errors.NoWalletProvided()
|
|
149
|
+
|
|
150
|
+
return account
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def prepare_guardian_account(args: Any):
|
|
154
|
+
if args.guardian_pem:
|
|
155
|
+
account = Account(pem_file=args.guardian_pem, pem_index=args.guardian_pem_index)
|
|
156
|
+
elif args.guardian_keyfile:
|
|
157
|
+
password = load_guardian_password(args)
|
|
158
|
+
account = Account(key_file=args.guardian_keyfile, password=password)
|
|
159
|
+
elif args.guardian_ledger:
|
|
160
|
+
address = do_get_ledger_address(account_index=args.guardian_ledger_account_index, address_index=args.guardian_ledger_address_index)
|
|
161
|
+
account = Account(address=address)
|
|
162
|
+
else:
|
|
163
|
+
raise errors.NoWalletProvided()
|
|
164
|
+
|
|
165
|
+
return account
|
|
166
|
+
|
|
167
|
+
|
|
124
168
|
def prepare_nonce_in_args(args: Any):
|
|
125
169
|
if args.recall_nonce:
|
|
126
|
-
|
|
127
|
-
account = Account(pem_file=args.pem, pem_index=args.pem_index)
|
|
128
|
-
elif args.keyfile:
|
|
129
|
-
password = load_password(args)
|
|
130
|
-
account = Account(key_file=args.keyfile, password=password)
|
|
131
|
-
elif args.ledger:
|
|
132
|
-
address = do_get_ledger_address(account_index=args.ledger_account_index, address_index=args.ledger_address_index)
|
|
133
|
-
account = Account(address=address)
|
|
134
|
-
else:
|
|
135
|
-
raise errors.NoWalletProvided()
|
|
136
|
-
|
|
170
|
+
account = prepare_account(args)
|
|
137
171
|
account.sync_nonce(ProxyNetworkProvider(args.proxy))
|
|
138
172
|
args.nonce = account.nonce
|
|
139
173
|
|
|
@@ -154,13 +188,32 @@ def check_broadcast_args(args: Any):
|
|
|
154
188
|
raise errors.BadUsage("Cannot both 'simulate' and 'send' a transaction")
|
|
155
189
|
|
|
156
190
|
|
|
191
|
+
def check_guardian_and_options_args(args: Any):
|
|
192
|
+
check_guardian_args(args)
|
|
193
|
+
if args.guardian:
|
|
194
|
+
check_options_for_guarded_tx(args.options)
|
|
195
|
+
|
|
196
|
+
|
|
157
197
|
def check_guardian_args(args: Any):
|
|
158
|
-
if
|
|
159
|
-
if
|
|
160
|
-
raise errors.BadUsage("
|
|
198
|
+
if args.guardian:
|
|
199
|
+
if should_sign_with_cosigner_service(args) and should_sign_with_guardian_key(args):
|
|
200
|
+
raise errors.BadUsage("Guarded tx should be signed using either a cosigning service or a guardian key")
|
|
201
|
+
|
|
202
|
+
if not should_sign_with_cosigner_service(args) and not should_sign_with_guardian_key(args):
|
|
203
|
+
raise errors.BadUsage("Missing guardian signing arguments")
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def should_sign_with_cosigner_service(args: Any) -> bool:
|
|
207
|
+
return all([args.guardian_service_url, args.guardian_2fa_code])
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def should_sign_with_guardian_key(args: Any) -> bool:
|
|
211
|
+
return any([args.guardian_pem, args.guardian_keyfile, args.guardian_ledger])
|
|
212
|
+
|
|
161
213
|
|
|
162
|
-
|
|
163
|
-
|
|
214
|
+
def check_options_for_guarded_tx(options: int):
|
|
215
|
+
if not options & TRANSACTION_OPTIONS_TX_GUARDED == TRANSACTION_OPTIONS_TX_GUARDED:
|
|
216
|
+
raise errors.BadUsage("Invalid guarded transaction's options. The second least significant bit must be set.")
|
|
164
217
|
|
|
165
218
|
|
|
166
219
|
def send_or_simulate(tx: Transaction, args: Any, dump_output: bool = True) -> CLIOutputBuilder:
|
{multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_transactions.py
RENAMED
|
@@ -4,7 +4,9 @@ from typing import Any, List
|
|
|
4
4
|
from multiversx_sdk_cli import cli_shared, utils
|
|
5
5
|
from multiversx_sdk_cli.cli_output import CLIOutputBuilder
|
|
6
6
|
from multiversx_sdk_network_providers.proxy_network_provider import ProxyNetworkProvider
|
|
7
|
+
from multiversx_sdk_cli.errors import NoWalletProvided
|
|
7
8
|
from multiversx_sdk_cli.transactions import Transaction, do_prepare_transaction
|
|
9
|
+
from multiversx_sdk_cli.cosign_transaction import cosign_transaction
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
def setup_parser(args: List[str], subparsers: Any) -> Any:
|
|
@@ -16,6 +18,7 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
|
|
|
16
18
|
cli_shared.add_outfile_arg(sub, what="signed transaction, hash")
|
|
17
19
|
cli_shared.add_broadcast_args(sub, relay=True)
|
|
18
20
|
cli_shared.add_proxy_arg(sub)
|
|
21
|
+
cli_shared.add_guardian_wallet_args(args, sub)
|
|
19
22
|
sub.add_argument("--wait-result", action="store_true", default=False,
|
|
20
23
|
help="signal to wait for the transaction result - only valid if --send is set")
|
|
21
24
|
sub.add_argument("--timeout", default=100, help="max num of seconds to wait for result"
|
|
@@ -36,6 +39,16 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
|
|
|
36
39
|
cli_shared.add_omit_fields_arg(sub)
|
|
37
40
|
sub.set_defaults(func=get_transaction)
|
|
38
41
|
|
|
42
|
+
sub = cli_shared.add_command_subparser(subparsers, "tx", "sign", f"Sign a previously saved transaction.{CLIOutputBuilder.describe()}")
|
|
43
|
+
cli_shared.add_wallet_args(args, sub)
|
|
44
|
+
cli_shared.add_infile_arg(sub, what="a previously saved transaction")
|
|
45
|
+
cli_shared.add_outfile_arg(sub, what="the signed transaction")
|
|
46
|
+
cli_shared.add_broadcast_args(sub, relay=True)
|
|
47
|
+
cli_shared.add_proxy_arg(sub)
|
|
48
|
+
cli_shared.add_guardian_args(sub)
|
|
49
|
+
cli_shared.add_guardian_wallet_args(args, sub)
|
|
50
|
+
sub.set_defaults(func=sign_transaction)
|
|
51
|
+
|
|
39
52
|
parser.epilog = cli_shared.build_group_epilog(subparsers)
|
|
40
53
|
return subparsers
|
|
41
54
|
|
|
@@ -49,7 +62,7 @@ def _add_common_arguments(args: List[str], sub: Any):
|
|
|
49
62
|
def create_transaction(args: Any):
|
|
50
63
|
args = utils.as_object(args)
|
|
51
64
|
|
|
52
|
-
cli_shared.
|
|
65
|
+
cli_shared.check_guardian_and_options_args(args)
|
|
53
66
|
cli_shared.check_broadcast_args(args)
|
|
54
67
|
cli_shared.prepare_nonce_in_args(args)
|
|
55
68
|
|
|
@@ -85,3 +98,35 @@ def get_transaction(args: Any):
|
|
|
85
98
|
transaction = proxy.get_transaction(args.hash)
|
|
86
99
|
output = CLIOutputBuilder().set_transaction_on_network(transaction, omit_fields).build()
|
|
87
100
|
utils.dump_out_json(output)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def sign_transaction(args: Any):
|
|
104
|
+
args = utils.as_object(args)
|
|
105
|
+
|
|
106
|
+
cli_shared.check_guardian_args(args)
|
|
107
|
+
cli_shared.check_broadcast_args(args)
|
|
108
|
+
|
|
109
|
+
tx = Transaction.load_from_file(args.infile)
|
|
110
|
+
if args.guardian:
|
|
111
|
+
cli_shared.check_options_for_guarded_tx(tx.options)
|
|
112
|
+
|
|
113
|
+
# clear existing signatures, if any
|
|
114
|
+
tx.guardianSignature = ""
|
|
115
|
+
tx.signature = ""
|
|
116
|
+
|
|
117
|
+
account = cli_shared.prepare_account(args)
|
|
118
|
+
signature = account.sign_transaction(tx)
|
|
119
|
+
|
|
120
|
+
try:
|
|
121
|
+
guardian_account = cli_shared.prepare_guardian_account(args)
|
|
122
|
+
except NoWalletProvided:
|
|
123
|
+
guardian_account = None
|
|
124
|
+
|
|
125
|
+
if guardian_account:
|
|
126
|
+
tx.guardianSignature = guardian_account.sign_transaction(tx)
|
|
127
|
+
elif args.guardian:
|
|
128
|
+
tx = cosign_transaction(tx, args.guardian_service_url, args.guardian_2fa_code)
|
|
129
|
+
|
|
130
|
+
tx.signature = signature
|
|
131
|
+
|
|
132
|
+
cli_shared.send_or_simulate(tx, args)
|
{multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/cli_validators.py
RENAMED
|
@@ -91,6 +91,7 @@ def _add_common_arguments(args: List[str], sub: Any):
|
|
|
91
91
|
cli_shared.add_tx_args(args, sub, with_receiver=False, with_data=False, with_estimate_gas=True, with_guardian=True)
|
|
92
92
|
cli_shared.add_broadcast_args(sub, relay=False)
|
|
93
93
|
cli_shared.add_outfile_arg(sub, what="signed transaction, hash")
|
|
94
|
+
cli_shared.add_guardian_wallet_args(args, sub)
|
|
94
95
|
|
|
95
96
|
|
|
96
97
|
def _add_nodes_arg(sub: Any):
|
{multiversx_sdk_cli-7.0.0b0 → multiversx_sdk_cli-7.1.0}/multiversx_sdk_cli/contract_verification.py
RENAMED
|
@@ -3,7 +3,7 @@ import json
|
|
|
3
3
|
import logging
|
|
4
4
|
import time
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Any, Dict, Tuple
|
|
6
|
+
from typing import Any, Dict, Tuple, Optional
|
|
7
7
|
|
|
8
8
|
import requests
|
|
9
9
|
|
|
@@ -24,11 +24,13 @@ class ContractVerificationRequest:
|
|
|
24
24
|
source_code: Dict[str, Any],
|
|
25
25
|
signature: bytes,
|
|
26
26
|
docker_image: str,
|
|
27
|
+
contract_variant: Optional[str]
|
|
27
28
|
) -> None:
|
|
28
29
|
self.contract = contract
|
|
29
30
|
self.source_code = source_code
|
|
30
31
|
self.signature = signature
|
|
31
32
|
self.docker_image = docker_image
|
|
33
|
+
self.contract_variant = contract_variant
|
|
32
34
|
|
|
33
35
|
def to_dictionary(self) -> Dict[str, Any]:
|
|
34
36
|
return {
|
|
@@ -36,39 +38,42 @@ class ContractVerificationRequest:
|
|
|
36
38
|
"payload": {
|
|
37
39
|
"contract": self.contract.bech32(),
|
|
38
40
|
"dockerImage": self.docker_image,
|
|
39
|
-
"sourceCode": self.source_code
|
|
41
|
+
"sourceCode": self.source_code,
|
|
42
|
+
"contractVariant": self.contract_variant
|
|
40
43
|
}
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
|
|
44
47
|
class ContractVerificationPayload:
|
|
45
|
-
def __init__(self, contract: Address, source_code: Dict[str, Any], docker_image: str,) -> None:
|
|
48
|
+
def __init__(self, contract: Address, source_code: Dict[str, Any], docker_image: str, contract_variant: Optional[str]) -> None:
|
|
46
49
|
self.contract = contract
|
|
47
50
|
self.source_code = source_code
|
|
48
51
|
self.docker_image = docker_image
|
|
52
|
+
self.contract_variant = contract_variant
|
|
49
53
|
|
|
50
|
-
def serialize(self):
|
|
54
|
+
def serialize(self) -> str:
|
|
51
55
|
payload = {
|
|
52
56
|
"contract": self.contract.bech32(),
|
|
53
57
|
"dockerImage": self.docker_image,
|
|
54
|
-
"sourceCode": self.source_code
|
|
58
|
+
"sourceCode": self.source_code,
|
|
59
|
+
"contractVariant": self.contract_variant
|
|
55
60
|
}
|
|
56
61
|
|
|
57
62
|
return json.dumps(payload, separators=(',', ':'))
|
|
58
63
|
|
|
59
64
|
|
|
60
65
|
def trigger_contract_verification(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
):
|
|
66
|
+
packaged_source: Path,
|
|
67
|
+
owner: Account,
|
|
68
|
+
contract: Address,
|
|
69
|
+
verifier_url: str,
|
|
70
|
+
docker_image: str,
|
|
71
|
+
contract_variant: Optional[str]):
|
|
67
72
|
source_code = read_json_file(packaged_source)
|
|
68
73
|
|
|
69
|
-
payload = ContractVerificationPayload(contract, source_code, docker_image).serialize()
|
|
74
|
+
payload = ContractVerificationPayload(contract, source_code, docker_image, contract_variant).serialize()
|
|
70
75
|
signature = _create_request_signature(owner, contract, payload.encode())
|
|
71
|
-
contract_verification = ContractVerificationRequest(contract, source_code, signature, docker_image)
|
|
76
|
+
contract_verification = ContractVerificationRequest(contract, source_code, signature, docker_image, contract_variant)
|
|
72
77
|
|
|
73
78
|
request_dictionary = contract_verification.to_dictionary()
|
|
74
79
|
|
|
@@ -100,7 +105,7 @@ def _create_request_signature(account: Account, contract_address: Address, reque
|
|
|
100
105
|
raw_data_to_sign = f"{contract_address.bech32()}{hashed_payload}"
|
|
101
106
|
|
|
102
107
|
signature_hex = account.sign_message(raw_data_to_sign.encode())
|
|
103
|
-
signature
|
|
108
|
+
signature = bytes.fromhex(signature_hex)
|
|
104
109
|
|
|
105
110
|
return signature
|
|
106
111
|
|