from enum import Enum
from typing import Optional, cast
from multiversx_sdk.abi.biguint_value import BigUIntValue
from multiversx_sdk.abi.fields import Field
from multiversx_sdk.abi.interface import ISingleValue
from multiversx_sdk.abi.small_int_values import U64Value
from multiversx_sdk.abi.string_value import StringValue
from multiversx_sdk.abi.struct_value import StructValue
from multiversx_sdk.core.address import Address
[docs]
class EsdtTokenPayment(StructValue):
def __init__(self, token_identifier: str, token_nonce: int, amount: int) -> None:
super().__init__(
[
Field("token_identifier", StringValue(token_identifier)),
Field("token_nonce", U64Value(token_nonce)),
Field("amount", BigUIntValue(amount)),
],
)
[docs]
class UserRole(Enum):
NONE = 0
PROPOSER = 1
BOARD_MEMBER = 2
[docs]
class ActionFullInfo:
def __init__(self, action_id: int, group_id: int, action_data: "Action", signers: list[Address]) -> None:
self.action_id = action_id
self.group_id = group_id
self.action_data = action_data
self.signers = signers
def __repr__(self) -> str:
return f"ActionFullInfo(action_id={self.action_id}, group_id={self.group_id}, action_data={self.action_data}, signers={self.signers})"
[docs]
class Action:
discriminant: int
def __init__(self) -> None:
pass
def __repr__(self) -> str:
return self.__class__.__name__
def __int__(self) -> int:
return self.discriminant
[docs]
class AddBoardMember(Action):
discriminant = 1
def __init__(self, address: Address) -> None:
self.address = address
[docs]
class AddProposer(Action):
discriminant = 2
def __init__(self, address: Address) -> None:
self.address = address
[docs]
class RemoveUser(Action):
discriminant = 3
def __init__(self, address: Address) -> None:
self.address = address
[docs]
class ChangeQuorum(Action):
discriminant = 4
def __init__(self, quorum: int) -> None:
self.quorum = quorum
[docs]
class SendTransferExecuteEgld(Action):
discriminant = 5
def __init__(self, data: "CallActionData") -> None:
self.data = data
[docs]
class CallActionData:
def __init__(
self,
to: Address,
egld_amount: int,
endpoint_name: str,
arguments: list[bytes],
opt_gas_limit: Optional[int] = None,
):
self.to = to
self.egld_amount = egld_amount
self.endpoint_name = endpoint_name
self.arguments = arguments
self.opt_gas_limit = opt_gas_limit
[docs]
class SendTransferExecuteEsdt(Action):
discriminant = 6
def __init__(self, data: "EsdtTransferExecuteData") -> None:
self.data = data
[docs]
class EsdtTransferExecuteData:
def __init__(
self,
to: Address,
tokens: list[EsdtTokenPayment],
opt_gas_limit: Optional[int],
endpoint_name: str,
arguments: list[bytes],
) -> None:
self.to = to
self.tokens = tokens
self.opt_gas_limit = opt_gas_limit
self.endpoint_name = endpoint_name
self.arguments = arguments
[docs]
class SendAsyncCall(Action):
discriminant = 7
def __init__(self, data: "CallActionData") -> None:
self.data = data
[docs]
class SCDeployFromSource(Action):
discriminant = 8
def __init__(self, amount: int, source: Address, code_metadata: bytes, arguments: list[bytes]) -> None:
self.amount = amount
self.source = source
self.code_metadata = code_metadata
self.arguments = arguments
[docs]
class SCUpgradeFromSource(Action):
discriminant = 9
def __init__(
self, sc_address: Address, amount: int, source: Address, code_metadata: bytes, arguments: list[bytes]
) -> None:
self.sc_address = sc_address
self.amount = amount
self.source = source
self.code_metadata = code_metadata
self.arguments = arguments