injective_cosmwasm/oracle/
types.rs

1use crate::oracle::volatility::{MetadataStatistics, TradeRecord};
2use injective_math::FPDecimal;
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5use serde_repr::*;
6
7#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
8#[serde(rename_all = "snake_case")]
9pub enum OracleQuery {}
10
11#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
12pub struct OracleInfo {
13    pub symbol: String,
14    pub oracle_type: OracleType,
15    pub scale_factor: u32,
16}
17
18#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
19pub struct OracleHistoryOptions {
20    pub max_age: u64,
21    pub include_raw_history: bool,
22    pub include_metadata: bool,
23}
24
25#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
26pub struct OracleVolatilityResponse {
27    pub volatility: Option<FPDecimal>,
28    pub history_metadata: Option<MetadataStatistics>,
29    pub raw_history: Vec<TradeRecord>,
30}
31
32#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
33pub struct ScalingOptions {
34    pub base_decimals: u8,
35    pub quote_decimals: u8,
36}
37
38#[derive(Serialize_repr, Deserialize_repr, Clone, Debug, PartialEq, Eq, JsonSchema, Copy)]
39#[repr(i32)]
40#[derive(Default)]
41pub enum OracleType {
42    #[default]
43    Unspecified = 0,
44    Band = 1,
45    PriceFeed = 2,
46    Coinbase = 3,
47    Chainlink = 4,
48    Razor = 5,
49    Dia = 6,
50    API3 = 7,
51    Uma = 8,
52    Pyth = 9,
53    BandIBC = 10,
54    Provider = 11,
55}
56
57#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
58pub struct PriceAttestation {
59    pub product_id: String,
60    // pub price_id: Hash,
61    pub price_id: String,
62    pub price: i64,
63    pub conf: u64,
64    pub expo: i32,
65    pub ema_price: i64,
66    pub ema_conf: u64,
67    pub status: PythStatus,
68    pub num_publishers: u32,
69    pub max_num_publishers: u32,
70    pub attestation_time: i64,
71    pub publish_time: i64,
72}
73
74#[derive(Serialize_repr, Deserialize_repr, Clone, Debug, PartialEq, Eq, JsonSchema, Copy)]
75#[repr(i32)]
76pub enum PythStatus {
77    Unknown = 0,
78    Trading = 1,
79    Halted = 2,
80    Auction = 3,
81}
82
83#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
84pub struct PricePairState {
85    #[serde(default)]
86    pub pair_price: FPDecimal,
87    #[serde(default)]
88    pub base_price: FPDecimal,
89    #[serde(default)]
90    pub quote_price: FPDecimal,
91    #[serde(default)]
92    pub base_cumulative_price: FPDecimal,
93    #[serde(default)]
94    pub quote_cumulative_price: FPDecimal,
95    #[serde(default)]
96    pub base_timestamp: i64,
97    #[serde(default)]
98    pub quote_timestamp: i64,
99}
100
101#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
102pub struct PriceState {
103    #[serde(default)]
104    pub price: FPDecimal,
105    #[serde(default)]
106    pub cumulative_price: FPDecimal,
107    #[serde(default)]
108    pub timestamp: i64,
109}
110
111#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
112pub struct PythPriceState {
113    #[serde(default)]
114    pub price_id: String,
115    #[serde(default)]
116    pub ema_price: FPDecimal,
117    #[serde(default)]
118    pub ema_conf: FPDecimal,
119    #[serde(default)]
120    pub conf: FPDecimal,
121    #[serde(default)]
122    pub publish_time: i64,
123    pub price_state: PriceState,
124}