astroport_oracle/
state.rs1use cosmwasm_schema::cw_serde;
2
3use astroport::asset::{AssetInfo, PairInfo};
4use cosmwasm_std::{Addr, Decimal256, DepsMut, StdResult, Storage, Uint128};
5use cw_storage_plus::{Item, Map};
6
7pub const CONFIG: Item<Config> = Item::new("config");
9pub const PRICE_LAST: Item<PriceCumulativeLast> = Item::new("price_last");
11
12#[cw_serde]
14pub struct PriceCumulativeLast {
15 pub cumulative_prices: Vec<(AssetInfo, AssetInfo, Uint128)>,
17 pub average_prices: Vec<(AssetInfo, AssetInfo, Decimal256)>,
19 pub block_timestamp_last: u64,
21}
22
23#[cw_serde]
25pub struct Config {
26 pub owner: Addr,
28 pub factory: Addr,
30 pub asset_infos: Vec<AssetInfo>,
32 pub pair: PairInfo,
34}
35
36const PRECISIONS: Map<String, u8> = Map::new("precisions");
38
39pub(crate) fn store_precisions(
41 deps: DepsMut,
42 asset_info: &AssetInfo,
43 factory_contract: &Addr,
44) -> StdResult<()> {
45 let precision = asset_info.decimals(&deps.querier, factory_contract)?;
46 PRECISIONS.save(deps.storage, asset_info.to_string(), &precision)?;
47
48 Ok(())
49}
50
51pub(crate) fn get_precision(storage: &dyn Storage, asset_info: &AssetInfo) -> StdResult<u8> {
53 PRECISIONS.load(storage, asset_info.to_string())
54}