Source code for terra_sdk.core.oracle.data

"""Oracle module data objects."""

from __future__ import annotations

import attr
from terra_proto.terra.oracle.v1beta1 import (
    AggregateExchangeRatePrevote as AggregateExchangeRatePrevote_pb,
)
from terra_proto.terra.oracle.v1beta1 import (
    AggregateExchangeRateVote as AggregateExchangeRateVote_pb,
)

from terra_sdk.core import Coin, Coins, ValAddress
from terra_sdk.util.json import JSONSerializable

__all__ = [
    "AggregateExchangeRatePrevote",
    "AggregateExchangeRateVote",
]


[docs]@attr.s class AggregateExchangeRateVote(JSONSerializable): """Contains information about a validator's aggregate vote.""" exchange_rate_tuples: Coins = attr.ib(converter=Coins) """Reported exchange rates by validator.""" voter: ValAddress = attr.ib() """Validator that sent the aggregate vote.""" def to_amino(self) -> dict: tuples = self.exchange_rate_tuples.to_amino() return { "exchange_rate_tuples": [ {"denom": x.denom, "exchange_rate": str(x.amount)} for x in tuples ], "voter": self.voter, }
[docs] def to_data(self) -> dict: return { "exchange_rate_tuples": [ {"denom": x.denom, "exchange_rate": str(x.amount)} for x in self.exchange_rate_tuples ], "voter": self.voter, }
@classmethod def from_data(cls, data) -> AggregateExchangeRateVote: return cls( exchange_rate_tuples=Coins( [ Coin(d["denom"], d["exchange_rate"]) for d in data["exchange_rate_tuples"] ], ), voter=data["voter"], ) def to_proto(self) -> AggregateExchangeRateVote_pb: return AggregateExchangeRateVote_pb( exchange_rate_tuples=[ {"denom": tuple.denom, "exchange_rate": str(tuple.amount)} for tuple in self.exchange_rate_tuples.to_list() ], voter=self.voter, )
[docs]@attr.s class AggregateExchangeRatePrevote(JSONSerializable): """Contains information about a validator's aggregate prevote.""" hash: str = attr.ib() """Aggregate vote hash for the upcoming aggregate vote.""" voter: ValAddress = attr.ib() """Validator that submitted the aggregate prevote.""" submit_block: int = attr.ib(converter=int) """Block height at which the aggregate prevote was submitted.""" def to_amino(self) -> dict: return { "hash": self.hash, "voter": self.voter, "submit_block": str(self.submit_block), }
[docs] def to_data(self) -> dict: return { "hash": self.hash, "voter": self.voter, "submit_block": str(self.submit_block), }
@classmethod def from_data(cls, data) -> AggregateExchangeRatePrevote: return cls( hash=data["hash"], voter=data["voter"], submit_block=int(data["submit_block"]), ) def to_proto(self) -> AggregateExchangeRatePrevote_pb: return AggregateExchangeRatePrevote_pb( hash=self.hash, voter=self.voter, submit_block=self.submit_block )