From 225effdf3399efb98226514606cee17ca869258f Mon Sep 17 00:00:00 2001 From: Alexandru Popenta Date: Fri, 17 Nov 2023 16:43:16 +0200 Subject: [PATCH] sc call using sc factory --- multiversx_sdk_cli/cli_contracts.py | 17 ++++------ multiversx_sdk_cli/contracts.py | 49 ++++++++++------------------- 2 files changed, 23 insertions(+), 43 deletions(-) diff --git a/multiversx_sdk_cli/cli_contracts.py b/multiversx_sdk_cli/cli_contracts.py index 44785d55..effb8321 100644 --- a/multiversx_sdk_cli/cli_contracts.py +++ b/multiversx_sdk_cli/cli_contracts.py @@ -386,22 +386,17 @@ def call(args: Any): cli_shared.check_guardian_and_options_args(args) cli_shared.check_broadcast_args(args) - contract_address = args.contract - function = args.function - arguments = args.arguments - gas_price = args.gas_price - gas_limit = args.gas_limit - value = args.value - version = args.version - - contract = SmartContract(Address.from_bech32(contract_address)) sender = _prepare_sender(args) cli_shared.prepare_chain_id_in_args(args) - tx = contract.execute(sender, function, arguments, gas_price, gas_limit, value, args.chain, version, args.guardian, args.options) + config = TransactionsFactoryConfig(args.chain) + contract = SmartContract(config, TokenComputer()) + contract_address = Address.new_from_bech32(args.contract) + + tx = contract.get_execute_transaction(sender, args) tx = _sign_guarded_tx(args, tx) - _send_or_simulate(tx, contract, args) + _send_or_simulate(tx, contract_address, args) def upgrade(args: Any): diff --git a/multiversx_sdk_cli/contracts.py b/multiversx_sdk_cli/contracts.py index fbfff782..16ec48ff 100644 --- a/multiversx_sdk_cli/contracts.py +++ b/multiversx_sdk_cli/contracts.py @@ -9,7 +9,7 @@ SmartContractTransactionsFactory from multiversx_sdk_network_providers.interface import IAddress, IContractQuery -from multiversx_sdk_cli import config, constants, errors +from multiversx_sdk_cli import config, errors from multiversx_sdk_cli.accounts import Account, EmptyAddress from multiversx_sdk_cli.constants import DEFAULT_HRP from multiversx_sdk_cli.utils import Object @@ -107,40 +107,25 @@ def get_deploy_transaction(self, owner: Account, args: Any) -> Transaction: return tx - def prepare_deploy_transaction_data(self, arguments: List[Any]) -> TransactionPayload: - tx_data = f"{self.bytecode}@{constants.VM_TYPE_WASM_VM}@{self.metadata.to_hex()}" + def get_execute_transaction(self, owner: Account, args: Any) -> Transaction: + contract_address = Address.new_from_bech32(args.contract) + arguments = args.arguments or [] - for arg in arguments: - tx_data += f"@{_prepare_argument(arg)}" - - return TransactionPayload.from_str(tx_data) - - def execute(self, caller: Account, function: str, arguments: List[str], gas_price: int, gas_limit: int, value: int, chain: str, version: int, guardian: str, options: int) -> Transaction: - self.caller = caller - - arguments = arguments or [] - gas_price = int(gas_price) - gas_limit = int(gas_limit) - value = value or 0 - receiver = self.address if self.address else EmptyAddress() - - tx = Transaction( - chain_id=chain, - sender=caller.address.to_bech32(), - receiver=receiver.to_bech32(), - gas_limit=gas_limit, - gas_price=gas_price, - nonce=caller.nonce, - amount=value, - data=self.prepare_execute_transaction_data(function, arguments).data, - version=version, - options=options + tx = self._factory.create_transaction_for_execute( + sender=owner.address, + contract=contract_address, + function=args.function, + gas_limit=int(args.gas_limit), + arguments=arguments, + native_transfer_amount=int(args.value), + token_transfers=[] ) + tx.nonce = owner.nonce + tx.version = int(args.version) + tx.options = int(args.options) + tx.guardian = args.guardian + tx.signature = bytes.fromhex(owner.sign_transaction(tx)) - if guardian: - tx.guardian = guardian - - tx.signature = bytes.fromhex(caller.sign_transaction(tx)) return tx def prepare_execute_transaction_data(self, function: str, arguments: List[Any]) -> TransactionPayload: