diff --git a/multiversx_sdk_cli/cli_get.py b/multiversx_sdk_cli/cli_get.py index d1b275a2..9daffffe 100644 --- a/multiversx_sdk_cli/cli_get.py +++ b/multiversx_sdk_cli/cli_get.py @@ -107,7 +107,7 @@ def get_account(args: Any): if args.address: address = Address.new_from_bech32(args.address) else: - hrp = cli_shared.get_address_hrp(args) + hrp = cli_shared.get_address_hrp_with_fallback(args) address = _get_address_from_alias_or_config(args.alias, hrp) proxy = _get_proxy(args) @@ -128,7 +128,7 @@ def get_storage(args: Any): if args.address: address = Address.new_from_bech32(args.address) else: - hrp = cli_shared.get_address_hrp(args) + hrp = cli_shared.get_address_hrp_with_fallback(args) address = _get_address_from_alias_or_config(args.alias, hrp) proxy = _get_proxy(args) @@ -146,7 +146,7 @@ def get_key(args: Any): if args.address: address = Address.new_from_bech32(args.address) else: - hrp = cli_shared.get_address_hrp(args) + hrp = cli_shared.get_address_hrp_with_fallback(args) address = _get_address_from_alias_or_config(args.alias, hrp) proxy = _get_proxy(args) @@ -167,7 +167,7 @@ def get_token(args: Any): if args.address: address = Address.new_from_bech32(args.address) else: - hrp = cli_shared.get_address_hrp(args) + hrp = cli_shared.get_address_hrp_with_fallback(args) address = _get_address_from_alias_or_config(args.alias, hrp) proxy = _get_proxy(args) diff --git a/multiversx_sdk_cli/cli_validators.py b/multiversx_sdk_cli/cli_validators.py index f28e0814..fdbcb681 100644 --- a/multiversx_sdk_cli/cli_validators.py +++ b/multiversx_sdk_cli/cli_validators.py @@ -1,7 +1,12 @@ from pathlib import Path from typing import Any -from multiversx_sdk import Address, ValidatorPublicKey, ValidatorsSigners +from multiversx_sdk import ( + Address, + ValidatorPublicKey, + ValidatorsController, + ValidatorsSigners, +) from multiversx_sdk_cli import cli_shared, utils from multiversx_sdk_cli.args_validation import ( @@ -10,7 +15,6 @@ validate_nonce_args, validate_receiver_args, ) -from multiversx_sdk_cli.validators import ValidatorsController def setup_parser(args: list[str], subparsers: Any) -> Any: @@ -153,6 +157,7 @@ def validate_args(args: Any) -> None: def do_stake(args: Any): validate_args(args) + sender = cli_shared.prepare_sender(args) guardian_and_relayer_data = cli_shared.get_guardian_and_relayer_data( sender=sender.address.to_bech32(), @@ -167,37 +172,40 @@ def do_stake(args: Any): if args.top_up: tx = controller.create_transaction_for_topping_up( sender=sender, - native_amount=native_amount, + nonce=sender.nonce, + amount=native_amount, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) else: validators_signers = _load_validators_signers(args.validators_pem) tx = controller.create_transaction_for_staking( sender=sender, - validators=validators_signers, - native_amount=native_amount, - gas_limit=args.gas_limit, - gas_price=args.gas_price, nonce=sender.nonce, - version=args.version, - options=args.options, + validators_file=validators_signers, + amount=native_amount, rewards_address=rewards_address, - guardian_and_relayer_data=guardian_and_relayer_data, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, + gas_limit=args.gas_limit, + gas_price=args.gas_price, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) -def _get_validators_controller(args: Any): +def _get_validators_controller(args: Any) -> ValidatorsController: chain_id = cli_shared.get_chain_id(args.proxy, args.chain) gas_estimator = cli_shared.initialize_gas_limit_estimator(args) - validators = ValidatorsController(chain_id=chain_id, gas_limit_estimator=gas_estimator) - return validators + return ValidatorsController(chain_id=chain_id, gas_limit_estimator=gas_estimator) def _load_validators_signers(validators_pem: str) -> ValidatorsSigners: @@ -224,22 +232,25 @@ def do_unstake(args: Any): args=args, ) - native_amount = int(args.value) keys = _parse_public_bls_keys(args.nodes_public_keys) - controller = _get_validators_controller(args) + tx = controller.create_transaction_for_unstaking( sender=sender, - keys=keys, - native_amount=native_amount, + nonce=sender.nonce, + public_keys=keys, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) @@ -258,16 +269,21 @@ def do_unjail(args: Any): controller = _get_validators_controller(args) tx = controller.create_transaction_for_unjailing( sender=sender, - keys=keys, - native_amount=native_amount, + nonce=sender.nonce, + public_keys=keys, + amount=native_amount, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) @@ -280,22 +296,25 @@ def do_unbond(args: Any): args=args, ) - native_amount = int(args.value) keys = _parse_public_bls_keys(args.nodes_public_keys) - controller = _get_validators_controller(args) + tx = controller.create_transaction_for_unbonding( sender=sender, - keys=keys, - native_amount=native_amount, + nonce=sender.nonce, + public_keys=keys, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) @@ -308,22 +327,25 @@ def change_reward_address(args: Any): args=args, ) - native_amount = int(args.value) rewards_address = Address.new_from_bech32(args.reward_address) - controller = _get_validators_controller(args) + tx = controller.create_transaction_for_changing_rewards_address( sender=sender, + nonce=sender.nonce, rewards_address=rewards_address, - native_amount=native_amount, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) @@ -336,20 +358,22 @@ def do_claim(args: Any): args=args, ) - native_amount = int(args.value) - controller = _get_validators_controller(args) tx = controller.create_transaction_for_claiming( sender=sender, - native_amount=native_amount, + nonce=sender.nonce, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) @@ -362,22 +386,25 @@ def do_unstake_nodes(args: Any): args=args, ) - native_amount = int(args.value) keys = _parse_public_bls_keys(args.nodes_public_keys) - controller = _get_validators_controller(args) + tx = controller.create_transaction_for_unstaking_nodes( sender=sender, - keys=keys, - native_amount=native_amount, + nonce=sender.nonce, + public_keys=keys, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) @@ -390,22 +417,25 @@ def do_unstake_tokens(args: Any): args=args, ) - native_amount = int(args.value) value = int(args.unstake_value) - controller = _get_validators_controller(args) + tx = controller.create_transaction_for_unstaking_tokens( sender=sender, - value=value, - native_amount=native_amount, + nonce=sender.nonce, + amount=value, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) @@ -418,22 +448,25 @@ def do_unbond_nodes(args: Any): args=args, ) - native_amount = int(args.value) keys = _parse_public_bls_keys(args.nodes_public_keys) - controller = _get_validators_controller(args) + tx = controller.create_transaction_for_unbonding_nodes( sender=sender, - keys=keys, - native_amount=native_amount, + nonce=sender.nonce, + public_keys=keys, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) @@ -446,22 +479,25 @@ def do_unbond_tokens(args: Any): args=args, ) - native_amount = int(args.value) value = int(args.unbond_value) - controller = _get_validators_controller(args) + tx = controller.create_transaction_for_unbonding_tokens( sender=sender, - value=value, - native_amount=native_amount, + nonce=sender.nonce, + amount=value, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) @@ -474,20 +510,22 @@ def do_clean_registered_data(args: Any): args=args, ) - native_amount = int(args.value) - controller = _get_validators_controller(args) tx = controller.create_transaction_for_cleaning_registered_data( sender=sender, - native_amount=native_amount, + nonce=sender.nonce, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) @@ -500,20 +538,23 @@ def do_restake_unstaked_nodes(args: Any): args=args, ) - native_amount = int(args.value) keys = _parse_public_bls_keys(args.nodes_public_keys) - controller = _get_validators_controller(args) + tx = controller.create_transaction_for_restaking_unstaked_nodes( sender=sender, - keys=keys, - native_amount=native_amount, + nonce=sender.nonce, + public_keys=keys, + guardian=guardian_and_relayer_data.guardian_address, + relayer=guardian_and_relayer_data.relayer_address, gas_limit=args.gas_limit, gas_price=args.gas_price, - nonce=sender.nonce, - version=args.version, - options=args.options, - guardian_and_relayer_data=guardian_and_relayer_data, ) + cli_shared.alter_transaction_and_sign_again_if_needed( + args=args, + tx=tx, + sender=sender, + guardian_and_relayer_data=guardian_and_relayer_data, + ) cli_shared.send_or_simulate(tx, args) diff --git a/multiversx_sdk_cli/validators.py b/multiversx_sdk_cli/validators.py deleted file mode 100644 index 05eb9871..00000000 --- a/multiversx_sdk_cli/validators.py +++ /dev/null @@ -1,539 +0,0 @@ -from typing import Optional - -from multiversx_sdk import ( - Address, - GasLimitEstimator, - Transaction, - TransactionsFactoryConfig, - ValidatorPublicKey, - ValidatorsSigners, - ValidatorsTransactionsFactory, -) - -from multiversx_sdk_cli.base_transactions_controller import BaseTransactionsController -from multiversx_sdk_cli.guardian_relayer_data import GuardianRelayerData -from multiversx_sdk_cli.interfaces import IAccount - - -class ValidatorsController(BaseTransactionsController): - def __init__(self, chain_id: str, gas_limit_estimator: Optional[GasLimitEstimator] = None) -> None: - self.factory = ValidatorsTransactionsFactory( - config=TransactionsFactoryConfig(chain_id), - gas_limit_estimator=gas_limit_estimator, - ) - - def create_transaction_for_staking( - self, - sender: IAccount, - validators: ValidatorsSigners, - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - rewards_address: Optional[Address] = None, - ) -> Transaction: - transaction = self.factory.create_transaction_for_staking( - sender=sender.address, - validators_file=validators, - amount=native_amount, - rewards_address=rewards_address, - ) - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_topping_up( - self, - sender: IAccount, - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_topping_up( - sender=sender.address, - amount=native_amount, - ) - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_unstaking( - self, - sender: IAccount, - keys: list[ValidatorPublicKey], - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_unstaking( - sender=sender.address, - public_keys=keys, - ) - transaction.value = native_amount - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_unjailing( - self, - sender: IAccount, - keys: list[ValidatorPublicKey], - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_unjailing( - sender=sender.address, - public_keys=keys, - amount=native_amount, - ) - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_unbonding( - self, - sender: IAccount, - keys: list[ValidatorPublicKey], - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_unbonding( - sender=sender.address, - public_keys=keys, - ) - transaction.value = native_amount - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_changing_rewards_address( - self, - sender: IAccount, - rewards_address: Address, - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_changing_rewards_address( - sender=sender.address, - rewards_address=rewards_address, - ) - transaction.value = native_amount - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_claiming( - self, - sender: IAccount, - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_claiming( - sender=sender.address, - ) - transaction.value = native_amount - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_unstaking_nodes( - self, - sender: IAccount, - keys: list[ValidatorPublicKey], - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_unstaking_nodes( - sender=sender.address, - public_keys=keys, - ) - transaction.value = native_amount - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_unstaking_tokens( - self, - sender: IAccount, - value: int, - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_unstaking_tokens( - sender=sender.address, - amount=value, - ) - transaction.value = native_amount - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_unbonding_nodes( - self, - sender: IAccount, - keys: list[ValidatorPublicKey], - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_unbonding_nodes( - sender=sender.address, - public_keys=keys, - ) - transaction.value = native_amount - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_unbonding_tokens( - self, - sender: IAccount, - value: int, - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_unbonding_tokens( - sender=sender.address, - amount=value, - ) - transaction.value = native_amount - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_cleaning_registered_data( - self, - sender: IAccount, - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_cleaning_registered_data( - sender=sender.address, - ) - transaction.value = native_amount - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction - - def create_transaction_for_restaking_unstaked_nodes( - self, - sender: IAccount, - keys: list[ValidatorPublicKey], - native_amount: int, - gas_limit: int, - gas_price: int, - nonce: int, - version: int, - options: int, - guardian_and_relayer_data: GuardianRelayerData, - ) -> Transaction: - transaction = self.factory.create_transaction_for_restaking_unstaked_nodes( - sender=sender.address, - public_keys=keys, - ) - transaction.value = native_amount - transaction.gas_price = gas_price - transaction.nonce = nonce - transaction.version = version - transaction.options = options - transaction.guardian = guardian_and_relayer_data.guardian_address - transaction.relayer = guardian_and_relayer_data.relayer_address - - self.add_extra_gas_limit_if_required(transaction) - - if gas_limit: - transaction.gas_limit = gas_limit - - self.sign_transaction( - transaction=transaction, - sender=sender, - guardian=guardian_and_relayer_data.guardian, - relayer=guardian_and_relayer_data.relayer, - guardian_service_url=guardian_and_relayer_data.guardian_service_url, - guardian_2fa_code=guardian_and_relayer_data.guardian_2fa_code, - ) - - return transaction