hpl_interface/igp/
oracle.rs

1use cosmwasm_schema::{cw_serde, QueryResponses};
2use cosmwasm_std::Uint128;
3
4use crate::ownable::{OwnableMsg, OwnableQueryMsg};
5
6#[cw_serde]
7pub struct InstantiateMsg {
8    pub owner: String,
9}
10
11#[cw_serde]
12pub struct RemoteGasDataConfig {
13    pub remote_domain: u32,
14    pub token_exchange_rate: Uint128,
15    pub gas_price: Uint128,
16}
17
18#[cw_serde]
19pub enum ExecuteMsg {
20    // ownership
21    Ownership(OwnableMsg),
22
23    // gas data
24    SetRemoteGasDataConfigs { configs: Vec<RemoteGasDataConfig> },
25    SetRemoteGasData { config: RemoteGasDataConfig },
26}
27
28#[cw_serde]
29#[derive(QueryResponses)]
30#[query_responses(nested)]
31pub enum QueryMsg {
32    // overrides
33    Ownable(OwnableQueryMsg),
34
35    // base
36    Oracle(IgpGasOracleQueryMsg),
37}
38
39#[cw_serde]
40#[derive(QueryResponses)]
41pub enum IgpGasOracleQueryMsg {
42    #[returns(GetExchangeRateAndGasPriceResponse)]
43    GetExchangeRateAndGasPrice { dest_domain: u32 },
44}
45
46impl IgpGasOracleQueryMsg {
47    pub fn wrap(self) -> QueryMsg {
48        QueryMsg::Oracle(self)
49    }
50}
51
52#[cw_serde]
53pub struct GetExchangeRateAndGasPriceResponse {
54    pub gas_price: Uint128,
55    pub exchange_rate: Uint128,
56}