From ac6854e6c463d161e905d76d5fff5e8b89a36ce1 Mon Sep 17 00:00:00 2001
From: Alexandru Popenta <alexandru.p9913@gmail.com>
Date: Wed, 17 Apr 2024 16:40:26 +0300
Subject: [PATCH 1/3] raise error when given string argument without prefix

---
 multiversx_sdk_cli/cli_contracts.py           |  2 +-
 multiversx_sdk_cli/contracts.py               |  2 ++
 .../tests/test_cli_contracts.py               | 27 +++++++++++++++++++
 3 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/multiversx_sdk_cli/cli_contracts.py b/multiversx_sdk_cli/cli_contracts.py
index 53cdf3db..c6eda82a 100644
--- a/multiversx_sdk_cli/cli_contracts.py
+++ b/multiversx_sdk_cli/cli_contracts.py
@@ -429,7 +429,7 @@ def query(args: Any):
 
     proxy = ProxyNetworkProvider(args.proxy)
     function = args.function
-    arguments = args.arguments or []
+    arguments: List[Any] = args.arguments or []
 
     result = query_contract(contract_address, proxy, function, arguments)
     utils.dump_out_json(result)
diff --git a/multiversx_sdk_cli/contracts.py b/multiversx_sdk_cli/contracts.py
index 251ffbae..a0a18855 100644
--- a/multiversx_sdk_cli/contracts.py
+++ b/multiversx_sdk_cli/contracts.py
@@ -280,6 +280,8 @@ def prepare_args_for_factory(arguments: List[str]) -> List[Any]:
             args.append(True)
         elif arg.startswith(STR_PREFIX):
             args.append(arg[len(STR_PREFIX):])
+        else:
+            raise errors.BadUserInput(f"Unknown argument type for argument: `{arg}`. Use `mxpy contract <sub-command> --help` to check all supported arguments")
 
     return args
 
diff --git a/multiversx_sdk_cli/tests/test_cli_contracts.py b/multiversx_sdk_cli/tests/test_cli_contracts.py
index ef5780bc..a2339e0b 100644
--- a/multiversx_sdk_cli/tests/test_cli_contracts.py
+++ b/multiversx_sdk_cli/tests/test_cli_contracts.py
@@ -290,6 +290,33 @@ def test_contract_deploy_without_required_arguments():
     assert return_code
 
 
+def test_contract_commands_argument_parameter():
+    alice = f"{parent}/testdata/alice.pem"
+    adder = f"{parent}/testdata/adder.wasm"
+
+    return_code = main([
+        "contract", "deploy",
+        "--bytecode", adder,
+        "--pem", alice,
+        "--nonce", "7",
+        "--chain", "D",
+        "--gas-limit", "5000000",
+        "--arguments", "invalidargument",
+    ])
+    assert return_code
+
+    return_code = main([
+        "contract", "deploy",
+        "--bytecode", adder,
+        "--pem", alice,
+        "--nonce", "7",
+        "--chain", "D",
+        "--gas-limit", "5000000",
+        "--arguments", "str:invalidargument",
+    ])
+    assert not return_code
+
+
 def _read_stdout(capsys: Any) -> str:
     return capsys.readouterr().out.strip()
 

From b9114e0dcc4c022b71e0fbe132a1fc57f5954c3d Mon Sep 17 00:00:00 2001
From: Alexandru Popenta <alexandru.p9913@gmail.com>
Date: Wed, 17 Apr 2024 17:00:34 +0300
Subject: [PATCH 2/3] change test argument

---
 multiversx_sdk_cli/tests/test_cli_contracts.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/multiversx_sdk_cli/tests/test_cli_contracts.py b/multiversx_sdk_cli/tests/test_cli_contracts.py
index a2339e0b..b69b9867 100644
--- a/multiversx_sdk_cli/tests/test_cli_contracts.py
+++ b/multiversx_sdk_cli/tests/test_cli_contracts.py
@@ -301,7 +301,7 @@ def test_contract_commands_argument_parameter():
         "--nonce", "7",
         "--chain", "D",
         "--gas-limit", "5000000",
-        "--arguments", "invalidargument",
+        "--arguments", "foobar",
     ])
     assert return_code
 
@@ -312,7 +312,7 @@ def test_contract_commands_argument_parameter():
         "--nonce", "7",
         "--chain", "D",
         "--gas-limit", "5000000",
-        "--arguments", "str:invalidargument",
+        "--arguments", "str:foobar",
     ])
     assert not return_code
 

From 302d77ec13c72d2956c96f497c163296d009581d Mon Sep 17 00:00:00 2001
From: Alexandru Popenta <alexandru.p9913@gmail.com>
Date: Thu, 18 Apr 2024 11:02:59 +0300
Subject: [PATCH 3/3] remove send argument for validators test

---
 .../tests/test_cli_validators.sh              | 24 +++++++++----------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/multiversx_sdk_cli/tests/test_cli_validators.sh b/multiversx_sdk_cli/tests/test_cli_validators.sh
index 7a355223..d489c9c0 100755
--- a/multiversx_sdk_cli/tests/test_cli_validators.sh
+++ b/multiversx_sdk_cli/tests/test_cli_validators.sh
@@ -7,38 +7,38 @@ testAll() {
     REWARD_ADDRESS="erd1k2s324ww2g0yj38qn2ch2jwctdy8mnfxep94q9arncc6xecg3xaq6mjse8"
 
     echo "Stake with recall nonce"
-    ${CLI} --verbose validator stake --pem="${USERS}/alice.pem" --value="2500${DENOMINATION}" --validators-file=./testdata/validators.json --reward-address=${REWARD_ADDRESS} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator stake --pem="${USERS}/alice.pem" --value="2500${DENOMINATION}" --validators-file=./testdata/validators.json --reward-address=${REWARD_ADDRESS} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
     echo "Stake with provided nonce"
     ${CLI} --verbose validator stake --pem="${USERS}/bob.pem" --value="2500${DENOMINATION}" --validators-file=./testdata/validators.json --reward-address=${REWARD_ADDRESS} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --nonce=300 || return 1
 
 
     echo "Stake with topUP"
-    ${CLI} --verbose validator stake --top-up --pem="${USERS}/carol.pem" --value="2711${DENOMINATION}" --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator stake --top-up --pem="${USERS}/carol.pem" --value="2711${DENOMINATION}" --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
 
     echo "Unstake"
-    ${CLI} --verbose validator unstake --pem="${USERS}/dan.pem" --nodes-public-keys="${BLS_KEY}" --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator unstake --pem="${USERS}/dan.pem" --nodes-public-keys="${BLS_KEY}" --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
     echo "Unbond"
-    ${CLI} --verbose validator unbond --pem="${USERS}/eve.pem" --nodes-public-keys=${BLS_KEY} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator unbond --pem="${USERS}/eve.pem" --nodes-public-keys=${BLS_KEY} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
     echo "Unjail"
-    ${CLI} --verbose validator unjail --pem="${USERS}/frank.pem" --value="2500${DENOMINATION}" --nodes-public-keys=${BLS_KEY} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator unjail --pem="${USERS}/frank.pem" --value="2500${DENOMINATION}" --nodes-public-keys=${BLS_KEY} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
     echo "Change reward address"
-    ${CLI} --verbose validator change-reward-address --pem="${USERS}/grace.pem" --reward-address=${REWARD_ADDRESS} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator change-reward-address --pem="${USERS}/grace.pem" --reward-address=${REWARD_ADDRESS} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
 
     echo "UnstakeNodes"
-    ${CLI} --verbose validator unstake-nodes --pem="${USERS}/heidi.pem" --nodes-public-keys=${BLS_KEY} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator unstake-nodes --pem="${USERS}/heidi.pem" --nodes-public-keys=${BLS_KEY} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
 
     echo "UnstakeTokens"
-    ${CLI} --verbose validator unstake-tokens --pem="${USERS}/ivan.pem" --unstake-value="11${DENOMINATION}" --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator unstake-tokens --pem="${USERS}/ivan.pem" --unstake-value="11${DENOMINATION}" --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
 
     echo "UnbondNodes"
-    ${CLI} --verbose validator unbond-nodes --pem="${USERS}/judy.pem" --nodes-public-keys=${BLS_KEY} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator unbond-nodes --pem="${USERS}/judy.pem" --nodes-public-keys=${BLS_KEY} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
 
     echo "UnbondTokens"
-    ${CLI} --verbose validator unbond-tokens --pem="${USERS}/mallory.pem" --unbond-value="20${DENOMINATION}" --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator unbond-tokens --pem="${USERS}/mallory.pem" --unbond-value="20${DENOMINATION}" --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
 
     echo "CleanRegistrationData"
-    ${CLI} --verbose validator clean-registered-data --pem="${USERS}/mike.pem" --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator clean-registered-data --pem="${USERS}/mike.pem" --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
 
     echo "ReStakeUnstakedNodes"
-    ${CLI} --verbose validator restake-unstaked-nodes --pem="${USERS}/alice.pem" --nodes-public-keys=${BLS_KEY} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce --send || return 1
+    ${CLI} --verbose validator restake-unstaked-nodes --pem="${USERS}/alice.pem" --nodes-public-keys=${BLS_KEY} --chain=${CHAIN_ID} --proxy=${PROXY} --estimate-gas --recall-nonce || return 1
 }