injective_cosmwasm/oracle/
types.rs1use 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: 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}