"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""
import abc
import cosmos.staking.v1beta1.tx_pb2
import grpc

class MsgStub:
    """Msg defines the staking Msg service."""

    def __init__(self, channel: grpc.Channel) -> None: ...
    CreateValidator: grpc.UnaryUnaryMultiCallable[
        cosmos.staking.v1beta1.tx_pb2.MsgCreateValidator,
        cosmos.staking.v1beta1.tx_pb2.MsgCreateValidatorResponse,
    ]
    """CreateValidator defines a method for creating a new validator."""
    EditValidator: grpc.UnaryUnaryMultiCallable[
        cosmos.staking.v1beta1.tx_pb2.MsgEditValidator,
        cosmos.staking.v1beta1.tx_pb2.MsgEditValidatorResponse,
    ]
    """EditValidator defines a method for editing an existing validator."""
    Delegate: grpc.UnaryUnaryMultiCallable[
        cosmos.staking.v1beta1.tx_pb2.MsgDelegate,
        cosmos.staking.v1beta1.tx_pb2.MsgDelegateResponse,
    ]
    """Delegate defines a method for performing a delegation of coins
    from a delegator to a validator.
    """
    BeginRedelegate: grpc.UnaryUnaryMultiCallable[
        cosmos.staking.v1beta1.tx_pb2.MsgBeginRedelegate,
        cosmos.staking.v1beta1.tx_pb2.MsgBeginRedelegateResponse,
    ]
    """BeginRedelegate defines a method for performing a redelegation
    of coins from a delegator and source validator to a destination validator.
    """
    Undelegate: grpc.UnaryUnaryMultiCallable[
        cosmos.staking.v1beta1.tx_pb2.MsgUndelegate,
        cosmos.staking.v1beta1.tx_pb2.MsgUndelegateResponse,
    ]
    """Undelegate defines a method for performing an undelegation from a
    delegate and a validator.
    """

class MsgServicer(metaclass=abc.ABCMeta):
    """Msg defines the staking Msg service."""

    @abc.abstractmethod
    def CreateValidator(
        self,
        request: cosmos.staking.v1beta1.tx_pb2.MsgCreateValidator,
        context: grpc.ServicerContext,
    ) -> cosmos.staking.v1beta1.tx_pb2.MsgCreateValidatorResponse:
        """CreateValidator defines a method for creating a new validator."""
    @abc.abstractmethod
    def EditValidator(
        self,
        request: cosmos.staking.v1beta1.tx_pb2.MsgEditValidator,
        context: grpc.ServicerContext,
    ) -> cosmos.staking.v1beta1.tx_pb2.MsgEditValidatorResponse:
        """EditValidator defines a method for editing an existing validator."""
    @abc.abstractmethod
    def Delegate(
        self,
        request: cosmos.staking.v1beta1.tx_pb2.MsgDelegate,
        context: grpc.ServicerContext,
    ) -> cosmos.staking.v1beta1.tx_pb2.MsgDelegateResponse:
        """Delegate defines a method for performing a delegation of coins
        from a delegator to a validator.
        """
    @abc.abstractmethod
    def BeginRedelegate(
        self,
        request: cosmos.staking.v1beta1.tx_pb2.MsgBeginRedelegate,
        context: grpc.ServicerContext,
    ) -> cosmos.staking.v1beta1.tx_pb2.MsgBeginRedelegateResponse:
        """BeginRedelegate defines a method for performing a redelegation
        of coins from a delegator and source validator to a destination validator.
        """
    @abc.abstractmethod
    def Undelegate(
        self,
        request: cosmos.staking.v1beta1.tx_pb2.MsgUndelegate,
        context: grpc.ServicerContext,
    ) -> cosmos.staking.v1beta1.tx_pb2.MsgUndelegateResponse:
        """Undelegate defines a method for performing an undelegation from a
        delegate and a validator.
        """

def add_MsgServicer_to_server(servicer: MsgServicer, server: grpc.Server) -> None: ...
