Source code for terra_sdk.core.market.msgs

"""Market module message types."""

from __future__ import annotations

import attr
from terra_proto.terra.market.v1beta1 import MsgSwap as MsgSwap_pb
from terra_proto.terra.market.v1beta1 import MsgSwapSend as MsgSwapSend_pb

from terra_sdk.core import AccAddress, Coin
from terra_sdk.core.msg import Msg

__all__ = ["MsgSwap", "MsgSwapSend"]


[docs]@attr.s class MsgSwap(Msg): """Perform a native on-chain swap from ``offer_coin`` to ``ask_denom``. Args: trader: account performing swap offer_coin (Union[Coin, str, dict]): coin offered for swap ask_denom: denom into which to swap """ type_amino = "market/MsgSwap" """""" type_url = "/terra.market.v1beta1.MsgSwap" """""" action = "swap" """""" trader: AccAddress = attr.ib() offer_coin: Coin = attr.ib(converter=Coin.parse) # type: ignore ask_denom: str = attr.ib() def to_amino(self) -> dict: return { "type": self.type_amino, "value": { "trader": self.trader, "offer_coin": self.offer_coin.to_amino(), "ask_denom": self.ask_denom, }, } @classmethod def from_data(cls, data: dict) -> MsgSwap: return cls( trader=data["trader"], offer_coin=Coin.from_data(data["offer_coin"]), ask_denom=data["ask_denom"], ) def to_proto(self) -> MsgSwap_pb: return MsgSwap_pb( trader=self.trader, offer_coin=self.offer_coin.to_proto(), ask_denom=self.ask_denom, ) @classmethod def from_proto(cls, proto: MsgSwap_pb) -> MsgSwap: return cls( trader=proto.trader, offer_coin=Coin.from_proto(proto.offer_coin), ask_denom=proto.ask_denom, )
[docs]@attr.s class MsgSwapSend(Msg): """Performs a swap and sends the resultant swapped amount to ``to_address``. Args: from_address: account performing swap to_address: account which will received resultant funds from swap offer_coin (Union[Coin, str, dict]): coin offered for swap ask_denom: denom into which to swap """ type_amino = "market/MsgSwapSend" """""" type_url = "/terra.market.v1beta1.MsgSwapSend" """""" action = "swapsend" """""" from_address: AccAddress = attr.ib() to_address: AccAddress = attr.ib() offer_coin: Coin = attr.ib(converter=Coin.parse) # type: ignore ask_denom: str = attr.ib() def to_amino(self) -> dict: return { "type": self.type_amino, "value": { "from_address": self.from_address, "to_address": self.to_address, "offer_coin": self.offer_coin.to_amino(), "ask_denom": self.ask_denom, }, } @classmethod def from_data(cls, data: dict) -> MsgSwapSend: return cls( from_address=data["from_address"], to_address=data["to_address"], offer_coin=Coin.from_data(data["offer_coin"]), ask_denom=data["ask_denom"], ) def to_proto(self) -> MsgSwapSend_pb: return MsgSwapSend_pb( from_address=self.from_address, to_address=self.to_address, offer_coin=self.offer_coin.to_proto(), ask_denom=self.ask_denom, ) @classmethod def from_proto(cls, proto: MsgSwapSend_pb) -> MsgSwapSend: return cls( from_address=proto.from_address, to_address=proto.to_address, offer_coin=Coin.from_proto(proto.offer_coin), ask_denom=proto.ask_denom, )