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