Skip to content

Commit

Permalink
integrated the delegation factory
Browse files Browse the repository at this point in the history
  • Loading branch information
popenta committed Nov 24, 2023
1 parent b030c13 commit f55036d
Show file tree
Hide file tree
Showing 8 changed files with 730 additions and 272 deletions.
57 changes: 9 additions & 48 deletions multiversx_sdk_cli/cli_contracts.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@
from multiversx_sdk_network_providers.proxy_network_provider import \
ProxyNetworkProvider

from multiversx_sdk_cli import cli_shared, errors, projects, utils
from multiversx_sdk_cli.accounts import Account, LedgerAccount
from multiversx_sdk_cli import cli_shared, projects, utils
from multiversx_sdk_cli.cli_output import CLIOutputBuilder
from multiversx_sdk_cli.cli_password import load_password
from multiversx_sdk_cli.constants import NUMBER_OF_SHARDS
from multiversx_sdk_cli.contract_verification import \
trigger_contract_verification
Expand Down Expand Up @@ -302,15 +300,15 @@ def deploy(args: Any):
logger.debug("deploy")
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)

sender = _prepare_sender(args)
cli_shared.prepare_chain_id_in_args(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
contract = SmartContract(config, TokenComputer())

address_computer = AddressComputer(NUMBER_OF_SHARDS)
contract_address = address_computer.compute_contract_address(deployer=sender.address, deployment_nonce=sender.nonce)
contract_address = address_computer.compute_contract_address(deployer=sender.address, deployment_nonce=args.nonce)

tx = contract.get_deploy_transaction(sender, args)
tx = _sign_guarded_tx(args, tx)
Expand All @@ -321,43 +319,6 @@ def deploy(args: Any):
_send_or_simulate(tx, contract_address, args)


def _prepare_sender(args: Any) -> Account:
sender: Account
if args.ledger:
sender = LedgerAccount(account_index=args.ledger_account_index, address_index=args.ledger_address_index)
elif args.pem:
sender = Account(pem_file=args.pem, pem_index=args.pem_index)
elif args.keyfile:
password = load_password(args)
sender = Account(key_file=args.keyfile, password=password)
else:
raise errors.NoWalletProvided()

sender.nonce = args.nonce
if args.recall_nonce:
sender.sync_nonce(ProxyNetworkProvider(args.proxy))

return sender


def _prepare_signer(args: Any) -> Account:
sender: Account
if args.ledger:
sender = LedgerAccount(
account_index=args.ledger_account_index,
address_index=args.ledger_address_index,
)
elif args.pem:
sender = Account(pem_file=args.pem, pem_index=args.pem_index)
elif args.keyfile:
password = load_password(args)
sender = Account(key_file=args.keyfile, password=password)
else:
raise errors.NoWalletProvided()

return sender


def _sign_guarded_tx(args: Any, tx: Transaction) -> Transaction:
try:
guardian_account = cli_shared.prepare_guardian_account(args)
Expand All @@ -376,10 +337,10 @@ def call(args: Any):
logger.debug("call")
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)

cli_shared.prepare_chain_id_in_args(args)
sender = _prepare_sender(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
contract = SmartContract(config, TokenComputer())
contract_address = Address.new_from_bech32(args.contract)
Expand All @@ -394,10 +355,10 @@ def upgrade(args: Any):
logger.debug("upgrade")
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)

cli_shared.prepare_chain_id_in_args(args)
sender = _prepare_sender(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
contract = SmartContract(config, TokenComputer())
contract_address = Address.new_from_bech32(args.contract)
Expand Down Expand Up @@ -437,7 +398,7 @@ def verify(args: Any) -> None:

packaged_src = Path(args.packaged_src).expanduser().resolve()

owner = _prepare_signer(args)
owner = cli_shared.prepare_account(args)
docker_image = args.docker_image
contract_variant = args.contract_variant

Expand Down
112 changes: 74 additions & 38 deletions multiversx_sdk_cli/cli_delegation.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from typing import Any, List

from multiversx_sdk_core.transaction_factories import TransactionsFactoryConfig
from multiversx_sdk_network_providers.proxy_network_provider import \
ProxyNetworkProvider

from multiversx_sdk_cli import cli_shared, errors, utils
from multiversx_sdk_cli.delegation import staking_provider
from multiversx_sdk_cli.transactions import do_prepare_transaction
from multiversx_sdk_cli.delegation import DelegationOperations


def setup_parser(args: List[str], subparsers: Any) -> Any:
Expand Down Expand Up @@ -142,11 +142,14 @@ def _add_common_arguments(args: List[str], sub: Any):
def do_create_delegation_contract(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_for_create_new_staking_contract(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_new_delegation_contract(sender, args)
cli_shared.send_or_simulate(tx, args)


Expand All @@ -167,119 +170,152 @@ def get_contract_address_by_deploy_tx_hash(args: Any):
def add_new_nodes(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_for_add_nodes(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_adding_nodes(sender, args)
cli_shared.send_or_simulate(tx, args)


def remove_nodes(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_for_remove_nodes(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_removing_nodes(sender, args)
cli_shared.send_or_simulate(tx, args)


def stake_nodes(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_for_stake_nodes(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_staking_nodes(sender, args)
cli_shared.send_or_simulate(tx, args)


def unbond_nodes(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_for_unbond_nodes(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_unbonding_nodes(sender, args)
cli_shared.send_or_simulate(tx, args)


def unstake_nodes(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_for_unstake_nodes(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_unstaking_nodes(sender, args)
cli_shared.send_or_simulate(tx, args)


def unjail_nodes(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_for_unjail_nodes(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_unjailing_nodes(sender, args)
cli_shared.send_or_simulate(tx, args)


def change_service_fee(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_change_service_fee(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_changing_service_fee(sender, args)
cli_shared.send_or_simulate(tx, args)


def modify_delegation_cap(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_modify_delegation_cap(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_modifying_delegation_cap(sender, args)
cli_shared.send_or_simulate(tx, args)


def automatic_activation(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_automatic_activation(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_automatic_activation(sender, args)
cli_shared.send_or_simulate(tx, args)


def redelegate_cap(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_redelegate_cap(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_redelegate_cap(sender, args)
cli_shared.send_or_simulate(tx, args)


def set_metadata(args: Any):
cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
staking_provider.prepare_args_set_metadata(args)
tx = do_prepare_transaction(args)
cli_shared.prepare_nonce_in_args(args)

sender = cli_shared.prepare_account(args)
config = TransactionsFactoryConfig(args.chain)
delegation = DelegationOperations(config)

tx = delegation.get_transaction_for_setting_metadata(sender, args)
cli_shared.send_or_simulate(tx, args)
2 changes: 1 addition & 1 deletion multiversx_sdk_cli/cli_transactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ def create_transaction(args: Any):

cli_shared.check_guardian_and_options_args(args)
cli_shared.check_broadcast_args(args)
cli_shared.prepare_nonce_in_args(args)
cli_shared.prepare_chain_id_in_args(args)
cli_shared.prepare_nonce_in_args(args)

if args.data_file:
args.data = Path(args.data_file).read_text()
Expand Down
6 changes: 3 additions & 3 deletions multiversx_sdk_cli/contracts.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ def get_deploy_transaction(self, owner: Account, args: Any) -> Transaction:
is_payable=args.metadata_payable,
is_payable_by_sc=args.metadata_payable_by_sc
)
tx.nonce = owner.nonce
tx.nonce = int(args.nonce)
tx.version = int(args.version)
tx.options = int(args.options)
tx.guardian = args.guardian
Expand All @@ -124,7 +124,7 @@ def get_execute_transaction(self, caller: Account, args: Any) -> Transaction:
native_transfer_amount=int(args.value),
token_transfers=[]
)
tx.nonce = caller.nonce
tx.nonce = int(args.nonce)
tx.version = int(args.version)
tx.options = int(args.options)
tx.guardian = args.guardian
Expand All @@ -149,7 +149,7 @@ def get_upgrade_transaction(self, owner: Account, args: Any):
is_payable=args.metadata_payable,
is_payable_by_sc=args.metadata_payable_by_sc
)
tx.nonce = owner.nonce
tx.nonce = int(args.nonce)
tx.version = int(args.version)
tx.options = int(args.options)
tx.guardian = args.guardian
Expand Down
24 changes: 2 additions & 22 deletions multiversx_sdk_cli/delegation/__init__.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,3 @@
from multiversx_sdk_cli.delegation.staking_provider import prepare_args_modify_delegation_cap, \
prepare_args_for_unjail_nodes, \
prepare_args_for_stake_nodes, \
prepare_args_for_add_nodes, \
prepare_args_for_unstake_nodes, \
prepare_args_for_create_new_staking_contract, \
prepare_args_for_unbond_nodes, \
prepare_args_for_remove_nodes, \
prepare_args_change_service_fee, \
prepare_args_automatic_activation, \
prepare_args_set_metadata
from multiversx_sdk_cli.delegation.staking_provider import DelegationOperations

__all__ = ["prepare_args_modify_delegation_cap",
"prepare_args_for_unjail_nodes",
"prepare_args_for_stake_nodes",
"prepare_args_for_add_nodes",
"prepare_args_for_unstake_nodes",
"prepare_args_for_create_new_staking_contract",
"prepare_args_for_unbond_nodes",
"prepare_args_for_remove_nodes",
"prepare_args_change_service_fee",
"prepare_args_automatic_activation",
"prepare_args_set_metadata"]
__all__ = ["DelegationOperations"]
Loading

0 comments on commit f55036d

Please sign in to comment.