use anchor_lang::prelude::*;
pub const PRECISION: i32 = 18;
#[derive(Debug)]
#[zero_copy]
pub struct CurrentResult {
pub value: i128,
pub std_dev: i128,
pub mean: i128,
pub range: i128,
pub min_value: i128,
pub max_value: i128,
pub num_samples: u8,
pub padding1: [u8; 7],
pub slot: u64,
pub min_slot: u64,
pub max_slot: u64,
}
impl CurrentResult {
pub fn value(&self) -> Option<(i128, i32)> {
if self.slot == 0 {
return None;
}
return Some((self.value, PRECISION));
}
}
#[derive(Debug)]
#[zero_copy]
pub struct OracleSubmission {
pub oracle: Pubkey,
pub slot: u64,
padding1: [u8; 8],
pub value: i128,
}
static_assertions::const_assert_eq!(3200, std::mem::size_of::<PullFeedAccountData>());
#[derive(Debug)]
#[account(zero_copy)]
pub struct PullFeedAccountData {
pub submissions: [OracleSubmission; 32],
pub authority: Pubkey,
pub queue: Pubkey,
pub feed_hash: [u8; 32],
pub initialized_at: i64,
pub permissions: u64,
pub max_variance: u64,
pub min_responses: u32,
pub name: [u8; 32],
padding1: [u8; 2],
pub historical_result_idx: u8,
pub min_sample_size: u8,
pub last_update_timestamp: i64,
pub lut_slot: u64,
_reserved1: [u8; 32],
pub result: CurrentResult,
pub max_staleness: u32,
padding2: [u8; 12],
pub historical_results: [CompactResult; 32],
_ebuf4: [u8; 8],
_ebuf3: [u8; 24],
_ebuf2: [u8; 256],
}
pub const PULL_FEED_ACCOUNT_DISCRIMINATOR: [u8; 8] = [196, 27, 108, 196, 10, 215, 219, 40];
#[derive(Debug)]
#[zero_copy]
pub struct CompactResult {
pub std_dev: f32,
pub mean: f32,
pub slot: u64,
}