templar_common/oracle/redstone/
mod.rs

1use std::collections::HashMap;
2
3use near_sdk::{
4    ext_contract,
5    json_types::{Base64VecU8, U64},
6    near,
7};
8
9/// All RedStone feeds report 8 decimals.
10pub const DECIMALS: i32 = 8;
11
12mod adapter;
13pub use adapter::*;
14pub mod config;
15pub use config::Config;
16mod event;
17pub use event::*;
18mod feed_data;
19pub use feed_data::*;
20mod feed_id;
21pub use feed_id::*;
22mod serializable_u256;
23pub use serializable_u256::*;
24
25use crate::time::Nanoseconds;
26
27#[derive(Debug, Clone, PartialEq, Eq)]
28#[near(serializers = [json])]
29pub struct GetPrices {
30    pub timestamp: Nanoseconds,
31    pub prices: HashMap<FeedId, SerializableU256>,
32}
33
34#[ext_contract(ext_redstone)]
35pub trait RedStoneContractInterface {
36    fn unique_signer_threshold(&self) -> U64;
37    fn get_prices(&self, feed_ids: Vec<FeedId>, payload: Base64VecU8) -> GetPrices;
38    fn read_prices(&self, feed_ids: Vec<FeedId>) -> HashMap<FeedId, SerializableU256>;
39    fn read_timestamp(&self, feed_id: FeedId) -> Option<Nanoseconds>;
40    fn read_price_data_for_feed(&self, feed_id: FeedId) -> Option<FeedData>;
41    fn read_price_data(&self, feed_ids: Vec<FeedId>) -> HashMap<FeedId, FeedData>;
42    fn write_prices(&mut self, feed_ids: Vec<FeedId>, payload: Base64VecU8);
43}