Skip to content

Commit

Permalink
sc call using sc factory
Browse files Browse the repository at this point in the history
  • Loading branch information
popenta committed Nov 17, 2023
1 parent 0780907 commit 225effd
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 43 deletions.
17 changes: 6 additions & 11 deletions multiversx_sdk_cli/cli_contracts.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
49 changes: 17 additions & 32 deletions multiversx_sdk_cli/contracts.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit 225effd

Please sign in to comment.