from typing import Optional
from multiversx_sdk.account_management.account_transactions_factory import (
AccountTransactionsFactory,
)
from multiversx_sdk.core import Address, Transaction
from multiversx_sdk.core.base_controller import BaseController
from multiversx_sdk.core.interfaces import IAccount
from multiversx_sdk.core.transactions_factory_config import TransactionsFactoryConfig
[docs]
class AccountController(BaseController):
def __init__(self, chain_id: str) -> None:
self.factory = AccountTransactionsFactory(TransactionsFactoryConfig(chain_id))
[docs]
def create_transaction_for_saving_key_value(
self,
sender: IAccount,
nonce: int,
key_value_pairs: dict[bytes, bytes],
guardian: Optional[Address] = None,
relayer: Optional[Address] = None,
) -> Transaction:
transaction = self.factory.create_transaction_for_saving_key_value(
sender=sender.address, key_value_pairs=key_value_pairs
)
transaction.guardian = guardian
transaction.relayer = relayer
transaction.nonce = nonce
self._set_version_and_options_for_hash_signing(sender, transaction)
transaction.signature = sender.sign_transaction(transaction)
return transaction
[docs]
def create_transaction_for_setting_guardian(
self,
sender: IAccount,
nonce: int,
guardian_address: Address,
service_id: str,
relayer: Optional[Address] = None,
) -> Transaction:
transaction = self.factory.create_transaction_for_setting_guardian(
sender=sender.address,
guardian_address=guardian_address,
service_id=service_id,
)
transaction.relayer = relayer
transaction.nonce = nonce
self._set_version_and_options_for_hash_signing(sender, transaction)
transaction.signature = sender.sign_transaction(transaction)
return transaction
[docs]
def create_transaction_for_guarding_account(
self, sender: IAccount, nonce: int, relayer: Optional[Address] = None
) -> Transaction:
transaction = self.factory.create_transaction_for_guarding_account(sender=sender.address)
transaction.relayer = relayer
transaction.nonce = nonce
self._set_version_and_options_for_hash_signing(sender, transaction)
transaction.signature = sender.sign_transaction(transaction)
return transaction
[docs]
def create_transaction_for_unguarding_account(
self,
sender: IAccount,
nonce: int,
guardian: Address,
relayer: Optional[Address] = None,
) -> Transaction:
transaction = self.factory.create_transaction_for_unguarding_account(sender=sender.address, guardian=guardian)
transaction.relayer = relayer
transaction.nonce = nonce
self._set_version_and_options_for_hash_signing(sender, transaction)
transaction.signature = sender.sign_transaction(transaction)
return transaction