Skip to content

Commit

Permalink
fixes after review
Browse files Browse the repository at this point in the history
  • Loading branch information
popenta committed Jul 29, 2024
1 parent 6e7a967 commit 3413f8c
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 92 deletions.
2 changes: 1 addition & 1 deletion multiversx_sdk_cli/cli_contracts.py
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,7 @@ def upgrade(args: Any):
def query(args: Any):
logger.debug("query")

# workaround so we can use the function bellow to set chainID
# workaround so we can use the function below to set chainID
args.chain = ""
cli_shared.prepare_chain_id_in_args(args)

Expand Down
42 changes: 20 additions & 22 deletions multiversx_sdk_cli/cli_wallet.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import logging
import sys
from pathlib import Path
from typing import Any, List, Optional, Tuple, cast
from typing import Any, List, Optional, Tuple

from multiversx_sdk import (Address, Mnemonic, UserPEM, UserSecretKey,
UserWallet)
Expand Down Expand Up @@ -115,27 +115,7 @@ def wallet_new(args: Any):
address_hrp = args.address_hrp
shard = args.shard

if shard is not None:
if shard not in CURRENT_SHARDS:
raise BadUserInput(f"Wrong shard provided. Choose between {CURRENT_SHARDS}")

is_wallet_generated = False
for _ in range(MAX_ITERATIONS_FOR_GENERATING_WALLET):
mnemonic = Mnemonic.generate()
pubkey = mnemonic.derive_key().generate_public_key()
generated_address_shard = get_shard_of_pubkey(pubkey.buffer, NUMBER_OF_SHARDS)

if shard == generated_address_shard:
is_wallet_generated = True
break

if not is_wallet_generated:
raise WalletGenerationError(f"Couldn't generate wallet in shard {shard}")
else:
mnemonic = Mnemonic.generate()

# this is done to get rid of the Pylance error: possibly unbound
mnemonic = cast(Mnemonic, mnemonic) # type: ignore
mnemonic = _generate_mnemonic_with_shard_constraint(shard)

print(f"Mnemonic: {mnemonic.get_text()}")
print(f"Wallet address: {mnemonic.derive_key().generate_public_key().to_address(address_hrp).to_bech32()}")
Expand Down Expand Up @@ -172,6 +152,24 @@ def wallet_new(args: Any):
logger.info(f"Wallet ({format}) saved: {outfile}")


def _generate_mnemonic_with_shard_constraint(shard: Optional[int] = None) -> Mnemonic:
if shard is not None:
if shard not in CURRENT_SHARDS:
raise BadUserInput(f"Wrong shard provided. Choose between {CURRENT_SHARDS}")

for _ in range(MAX_ITERATIONS_FOR_GENERATING_WALLET):
mnemonic = Mnemonic.generate()
pubkey = mnemonic.derive_key().generate_public_key()
generated_address_shard = get_shard_of_pubkey(pubkey.buffer, NUMBER_OF_SHARDS)

if shard == generated_address_shard:
return mnemonic

raise WalletGenerationError(f"Couldn't generate wallet in shard {shard}")

return Mnemonic.generate()


def convert_wallet(args: Any):
infile = Path(args.infile).expanduser().resolve() if args.infile else None
outfile = Path(args.outfile).expanduser().resolve() if args.outfile else None
Expand Down
37 changes: 2 additions & 35 deletions multiversx_sdk_cli/contracts.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
import logging
from pathlib import Path
from typing import Any, List, Optional, Protocol, Sequence, Union
from typing import Any, List, Optional, Protocol, Union

from multiversx_sdk import (Address, QueryRunnerAdapter,
SmartContractQueriesController,
SmartContractTransactionsFactory, Token,
TokenComputer, TokenTransfer, Transaction,
TransactionPayload)
from multiversx_sdk.abi import Abi
from multiversx_sdk.network_providers.interface import IContractQuery

from multiversx_sdk_cli import errors
from multiversx_sdk_cli.accounts import Account
from multiversx_sdk_cli.constants import DEFAULT_HRP
from multiversx_sdk_cli.interfaces import IAddress
from multiversx_sdk_cli.utils import Object

logger = logging.getLogger("contracts")

Expand All @@ -29,37 +27,6 @@ def query_contract(self, query: Any) -> 'IContractQueryResponse':
...


class QueryResult(Object):
def __init__(self, as_base64: str, as_hex: str, as_number: Optional[int]):
self.base64 = as_base64
self.hex = as_hex
self.number = as_number


class ContractQuery(IContractQuery):
def __init__(self, address: IAddress, function: str, value: int, arguments: List[bytes], caller: Optional[IAddress] = None):
self.contract = address
self.function = function
self.caller = caller
self.value = value
self.encoded_arguments = [item.hex() for item in arguments]

def get_contract(self) -> IAddress:
return self.contract

def get_function(self) -> str:
return self.function

def get_encoded_arguments(self) -> Sequence[str]:
return self.encoded_arguments

def get_caller(self) -> Optional[IAddress]:
return self.caller

def get_value(self) -> int:
return self.value


class IContractQueryResponse(Protocol):
return_data: List[str]
return_code: str
Expand Down Expand Up @@ -201,7 +168,7 @@ def query_contract(self,
contract_address: IAddress,
proxy: INetworkProvider,
function: str,
arguments: Union[List[Any], None],
arguments: Optional[List[Any]],
should_prepare_args: bool) -> List[Any]:
args = arguments if arguments else []
if should_prepare_args:
Expand Down
64 changes: 32 additions & 32 deletions multiversx_sdk_cli/dns.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,11 @@ def resolve(name: str, proxy: INetworkProvider) -> Address:
name_arg = "0x{}".format(str.encode(name).hex())
dns_address = dns_address_for_name(name)

chain_id = proxy.get_network_config().chain_id
config = TransactionsFactoryConfig(chain_id)
contract = SmartContract(config)

response = contract.query_contract(
response = _query_contract(
contract_address=dns_address,
proxy=proxy,
function="resolve",
arguments=[name_arg],
args_from_file=False
args=[name_arg]
)

if len(response) == 0:
Expand All @@ -51,17 +46,14 @@ def validate_name(name: str, shard_id: int, proxy: INetworkProvider):
name_arg = "0x{}".format(str.encode(name).hex())
dns_address = compute_dns_address_for_shard_id(shard_id)

chain_id = proxy.get_network_config().chain_id
config = TransactionsFactoryConfig(chain_id)
contract = SmartContract(config)

response = contract.query_contract(
response = _query_contract(
contract_address=dns_address,
proxy=proxy,
function="validateName",
arguments=[name_arg],
args_from_file=False
)[0]
args=[name_arg]
)

response = response[0]

return_code = response["returnCode"]

Check warning on line 58 in multiversx_sdk_cli/dns.py

View workflow job for this annotation

GitHub Actions / runner / mypy

[mypy] reported by reviewdog 🐶 Possible overload variants: Raw Output: /home/runner/work/mx-sdk-py-cli/mx-sdk-py-cli/multiversx_sdk_cli/dns.py:58:19: note: Possible overload variants:

Check warning on line 58 in multiversx_sdk_cli/dns.py

View workflow job for this annotation

GitHub Actions / runner / mypy

[mypy] reported by reviewdog 🐶 def __getitem__(self, SupportsIndex, /) -> Any Raw Output: /home/runner/work/mx-sdk-py-cli/mx-sdk-py-cli/multiversx_sdk_cli/dns.py:58:19: note: def __getitem__(self, SupportsIndex, /) -> Any

Check warning on line 58 in multiversx_sdk_cli/dns.py

View workflow job for this annotation

GitHub Actions / runner / mypy

[mypy] reported by reviewdog 🐶 def __getitem__(self, slice, /) -> list[Any] Raw Output: /home/runner/work/mx-sdk-py-cli/mx-sdk-py-cli/multiversx_sdk_cli/dns.py:58:19: note: def __getitem__(self, slice, /) -> list[Any]
if return_code == "ok":
Expand Down Expand Up @@ -105,17 +97,14 @@ def name_hash(name: str) -> bytes:
def registration_cost(shard_id: int, proxy: INetworkProvider) -> int:
dns_address = compute_dns_address_for_shard_id(shard_id)

chain_id = proxy.get_network_config().chain_id
config = TransactionsFactoryConfig(chain_id)
contract = SmartContract(config)

response = contract.query_contract(
response = _query_contract(
contract_address=dns_address,
proxy=proxy,
function="getRegistrationCost",
arguments=[],
args_from_file=False
)[0]
function="versgetRegistrationCostion",
args=[]
)

response = response[0]

data = response["returnDataParts"][0]

Check warning on line 109 in multiversx_sdk_cli/dns.py

View workflow job for this annotation

GitHub Actions / runner / mypy

[mypy] reported by reviewdog 🐶 Possible overload variants: Raw Output: /home/runner/work/mx-sdk-py-cli/mx-sdk-py-cli/multiversx_sdk_cli/dns.py:109:12: note: Possible overload variants:

Check warning on line 109 in multiversx_sdk_cli/dns.py

View workflow job for this annotation

GitHub Actions / runner / mypy

[mypy] reported by reviewdog 🐶 def __getitem__(self, SupportsIndex, /) -> Any Raw Output: /home/runner/work/mx-sdk-py-cli/mx-sdk-py-cli/multiversx_sdk_cli/dns.py:109:12: note: def __getitem__(self, SupportsIndex, /) -> Any

Check warning on line 109 in multiversx_sdk_cli/dns.py

View workflow job for this annotation

GitHub Actions / runner / mypy

[mypy] reported by reviewdog 🐶 def __getitem__(self, slice, /) -> list[Any] Raw Output: /home/runner/work/mx-sdk-py-cli/mx-sdk-py-cli/multiversx_sdk_cli/dns.py:109:12: note: def __getitem__(self, slice, /) -> list[Any]
if not data:
Expand All @@ -127,17 +116,14 @@ def registration_cost(shard_id: int, proxy: INetworkProvider) -> int:
def version(shard_id: int, proxy: INetworkProvider) -> str:
dns_address = compute_dns_address_for_shard_id(shard_id)

chain_id = proxy.get_network_config().chain_id
config = TransactionsFactoryConfig(chain_id)
contract = SmartContract(config)

response = contract.query_contract(
response = _query_contract(
contract_address=dns_address,
proxy=proxy,
function="version",
arguments=[],
args_from_file=False
)[0]
args=[]
)

response = response[0]
return bytearray.fromhex(response["returnDataParts"][0]).decode()

Check warning on line 127 in multiversx_sdk_cli/dns.py

View workflow job for this annotation

GitHub Actions / runner / mypy

[mypy] reported by reviewdog 🐶 Possible overload variants: Raw Output: /home/runner/work/mx-sdk-py-cli/mx-sdk-py-cli/multiversx_sdk_cli/dns.py:127:30: note: Possible overload variants:


Expand All @@ -161,3 +147,17 @@ def compute_dns_address_for_shard_id(shard_id: int) -> Address:
def dns_register_data(name: str) -> str:
name_enc: bytes = str.encode(name)
return "register@{}".format(name_enc.hex())


def _query_contract(contract_address: Address, proxy: INetworkProvider, function: str, args: List[Any]) -> List[Any]:
chain_id = proxy.get_network_config().chain_id
config = TransactionsFactoryConfig(chain_id)
contract = SmartContract(config)

return contract.query_contract(
contract_address=contract_address,
proxy=proxy,
function=function,
arguments=args,
should_prepare_args=False
)
2 changes: 0 additions & 2 deletions multiversx_sdk_cli/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@ def default(self, o: Any) -> Any:
return o.to_dictionary()
if isinstance(o, bytes):
return o.hex()
if isinstance(o, list):
return [self.default(item) for item in o] # type: ignore
return super().default(o)


Expand Down

0 comments on commit 3413f8c

Please sign in to comment.