Skip to content

Commit

Permalink
Sb upgrade (#1329)
Browse files Browse the repository at this point in the history
* broken

* test works with refactor

* update sb idl

* use latest submission

* change to using max val
  • Loading branch information
NourAlharithi authored Nov 15, 2024
1 parent f5b92b3 commit bb0d4ed
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 32 deletions.
25 changes: 12 additions & 13 deletions programs/drift/src/state/oracle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -317,12 +317,15 @@ pub fn get_sb_on_demand_price(
let pull_feed_account_info: Ref<PullFeedAccountData> =
load_ref(price_oracle).or(Err(ErrorCode::UnableToLoadOracle))?;

let price = convert_sb_i128(
&pull_feed_account_info
.value()
.ok_or(ErrorCode::UnableToLoadOracle)?,
)?
.cast::<i64>()?;
let latest_oracle_submssions: Vec<switchboard_on_demand::OracleSubmission> =
pull_feed_account_info.latest_submissions();
let average_price = latest_oracle_submssions
.iter()
.map(|submission| submission.value)
.sum::<i128>()
/ latest_oracle_submssions.len() as i128;

let price = convert_sb_i128(&average_price)?.cast::<i64>()?;

let confidence = convert_sb_i128(
&pull_feed_account_info
Expand All @@ -332,13 +335,9 @@ pub fn get_sb_on_demand_price(
.cast::<i64>()?
.unsigned_abs();

let delay = clock_slot.cast::<i64>()?.safe_sub(
pull_feed_account_info
.result
.result_slot()
.ok_or(ErrorCode::UnableToLoadOracle)?
.cast()?,
)?;
let delay = clock_slot
.cast::<i64>()?
.safe_sub(latest_oracle_submssions[0].landed_at.cast()?)?;

let has_sufficient_number_of_data_points = true;

Expand Down
16 changes: 8 additions & 8 deletions programs/drift/src/state/oracle/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,14 +95,14 @@ fn pyth_pull_1m() {
#[test]
fn switchboard_on_demand() {
let oracle_price_key =
Pubkey::from_str("J9nrFWjDUeDVZ4BhhxsbQXWgLcLEgQyNBrCbwSADmJdr").unwrap();
let oracle_market_str = String::from("xBtsxArX2yhcpt/dK9uhJ5ChHVRrHXiHZujddFlPpgPNVHTgIIoj0/BurhMAAAAAAAAAAAAAAAAAQAj/uFTJBAAAAAAAAAAAaOJJQ2555N+2mXP67/PxVDaFEhuxV8baKRzw7FrU5VPwbq4TAAAAAAAAAAAAAAAAAEAI/7hUyQQAAAAAAAAAAAXn72s0bOcHlsJxEq1CuQ9IqcHtKmC3J4ZAzsW4TYpW8G6uEwAAAAAAAAAAAAAAAABACP+4VMkEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWnepBOelBHznzx//7xQtA1OAt1Bx+exaGnlnqRII0HyUd7+1/xAShZ8zbPmHJWgOdwW6Kr7OFxiM+yjKZspbB8XipXk1l3Q6KqHGwpEbM/rCnySOfrDL0CFQoddWVfVo+r/WYAAAAAAAAAAAAAAAAA8gUqAQAAAAEAAABXL3VzZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPu0v1mAAAAAPkFrhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAj/uFTJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4/CP+4VMkEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAI/7hUyQQAAAAAAAAAAABACP+4VMkEAAAAAAAAAAADAAAAAAAAAPBurhMAAAAA8G6uEwAAAADwbq4TAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAAAvJawPvBurhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==");
Pubkey::from_str("8an9aE6j4STjv1cNXaE7SJfqmfjgLUHpBKURjqcAQJbQ").unwrap();
let oracle_market_str = String::from("xBtsxArX2ygF5+9rNGznB5bCcRKtQrkPSKnB7SpgtyeGQM7FuE2KVlisPRQAAAAAAAAAAAAAAAA+UHpSRCo0IwwAAAAAAAAAJitDZKZoh6XepseJBXWe/lcspgoK5FkXhG/BewUorG5CqUEUAAAAAFqpQRQAAAAA8PzgMB6TfkcMAAAAAAAAAGjiSUNueeTftplz+u/z8VQ2hRIbsVfG2ikc8Oxa1OVTolooFAAAAAAAAAAAAAAAAEizjuOw8yicCgAAAAAAAAABXj3Y9l4yGBRFXaCetMwT6HpzMpca+kYR/MYh+j8EUB1uPhQAAAAAOG4+FAAAAAACiEe0ZUszUgwAAAAAAAAAkDfiD4Gn+CTbOnE8xYjATeEDBfMWFNY57v1LuujRnGZYrD0UAAAAAAAAAAAAAAAABl3I+mq45SMMAAAAAAAAACVOW/5bK8Btqmx4Vk6zcPIfXO8zAoD0jYfZl8sUISFEaSpxEwAAAAAAAAAAAAAAAMzgbc5nVjCoBwAAAAAAAABQtwZpTNT6DaYcbKn3fERJYIW+SUeHf96zTfeNM0KsnRRGqhMAAAAAAAAAAAAAAABIfPmsmN/hXwgAAAAAAAAAYJg3LYKk7K7VBmaP3CqKdDehOJ9w2BAdGN2ihbblBMLwyyEUAAAAAAAAAAAAAAAAxs9IiXhjQCcJAAAAAAAAACH5pdGZv3Zl4YGR/RkbyiM972/Y6TkFDRSOugqBX8R3pdatEwAAAAAAAAAAAAAAAATJSrig8pADCAAAAAAAAAB7gyHaEgJTUWoB03O2WP2y5wG0BQyy4DIW4QIX0Zm/LBCDrRMAAAAAAAAAAAAAAAD0QtXQ8ppmUwgAAAAAAAAAXKbf3SvboSeQoR1Uax14h2bo3XRZT6YDzVR04CCKI9OiWigUAAAAAAAAAAAAAAAAvDV3NgOBNZwKAAAAAAAAAOZ7GqcB2Y++LyL1s5nlJ5BPWiBqGufX9otlggY7+arpHW4+FAAAAAA4bj4UAAAAACId0nIlrSxSDAAAAAAAAACDlY3q65NTi3f76VZvIIwy9dPg2O22YgY8biVvXVbmRkKpQRQAAAAAWqlBFAAAAADw/OAwHpN+RwwAAAAAAAAA3MJlNs10pau942MW3ICzf2juvzF0+hdValrRUBcb0DpCqUEUAAAAAFqpQRQAAAAAgKcI0J26VkkMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWnepBOelBHznzx//7xQtA1OAt1Bx+exaGnlnqRII0HyUd7+1/xAShZ8zbPmHJWgOdwW6Kr7OFxiM+yjKZspbC8qNXh/AbUSNWMVBd3cJsl737xFECAru4/NmPaW4F85v6y5GYAAAAAAAAAAAAAAAAAlDV3AAAAAAEAAABkU09MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwNLEDVnAAAAAGeRaxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw/OAwHpN+RwwAAAAAAAAAEB9A716T3gAAAAAAAAAAAHTgmBCe9RtIDAAAAAAAAACQqieffyfYAQAAAAAAAAAA8PzgMB6TfkcMAAAAAAAAAICnCNCdulZJDAAAAAAAAAADDAAAAAAAAEKpQRQAAAAAQqlBFAAAAABCqUEUAAAAAJYAAAAAAAAAAAAAAAAAAABeHL43OGkgQ0jZpxMAAAAAuwZVOgV4IEP526cTAAAAAEBf4jv4GhxDij6qEwAAAABEt508DB4cQ5E+qhMAAAAARLedPAweHEOVPqoTAAAAAES3nTwMHhxDlj6qEwAAAABEt508DB4cQ5c+qhMAAAAA59KoPCNPG0MhQaoTAAAAADV9tzxZTRtDKUGqEwAAAAA2gsE8Ok4bQytBqhMAAAAAnJVNPGOFGkMHRqoTAAAAAJO/ozyxhBpDD0aqEwAAAACTv6M8sYQaQxBGqhMAAAAAk7+jPLGEGkMRRqoTAAAAAJO/ozyxhBpDEkaqEwAAAADKBrY8jnsaQxdGqhMAAAAA/9jKOLjfGENOV6sTAAAAAG5u7Tyn1hhDqVerEwAAAADm3FA7QJQZQxCDrRMAAAAAAAAAALfUE0Ol1q0TAAAAAAAAAABc2ShD8MshFAAAAACJzNU8PulfQ1isPRQAAAAAATRmOmlIY0Mdbj4UAAAAAF9OgD2UjmJDQqlBFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==");

let mut decoded_bytes = base64::decode(oracle_market_str).unwrap();
let oracle_market_bytes = decoded_bytes.as_mut_slice();
let mut lamports = 0;
let sb_program = crate::ids::switchboard_on_demand::id();
let w_oracle_info = create_account_info(
let dsol_oracle_info = create_account_info(
&oracle_price_key,
true,
&mut lamports,
Expand All @@ -112,17 +112,17 @@ fn switchboard_on_demand() {

let oracle_price_data = get_oracle_price(
&OracleSource::SwitchboardOnDemand,
&w_oracle_info,
330198768,
&dsol_oracle_info,
339848045,
)
.unwrap();
assert_eq!(oracle_price_data.price, 344900);
assert_eq!(oracle_price_data.price, 226556945);

let amm = AMM {
oracle_source: OracleSource::SwitchboardOnDemand,
..AMM::default()
};

let twap = amm.get_oracle_twap(&w_oracle_info, 0).unwrap();
assert_eq!(twap, Some(344900));
let twap = amm.get_oracle_twap(&dsol_oracle_info, 0).unwrap();
assert_eq!(twap, Some(226556945));
}
29 changes: 26 additions & 3 deletions programs/switchboard-on-demand/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,11 @@ pub struct CurrentResult {
pub min_value: i128,
/// The maximum value of the submissions needed for quorom size
pub max_value: i128,
/// The number of samples used to calculate this result
pub num_samples: u8,
pub padding1: [u8; 7],
/// The index of the submission that was used to calculate this result
pub submission_idx: u8,
pub padding1: [u8; 6],
/// The slot at which this value was signed.
pub slot: u64,
/// The slot at which the first considered submission was made
Expand Down Expand Up @@ -123,7 +126,8 @@ pub struct OracleSubmission {
pub oracle: Pubkey,
/// The slot at which this value was signed.
pub slot: u64,
padding1: [u8; 8],
/// The slot at which this value was landed on chain.
pub landed_at: u64,
/// The value that was submitted.
pub value: i128,
}
Expand Down Expand Up @@ -180,7 +184,7 @@ impl PullFeedAccountData {
}

/// The median value of the submissions needed for quorom size
pub fn value(&self) -> Option<i128> {
pub fn median_value(&self) -> Option<i128> {
self.result.value()
}

Expand Down Expand Up @@ -208,4 +212,23 @@ impl PullFeedAccountData {
pub fn max_value(&self) -> Option<i128> {
self.result.max_value()
}

pub fn median_result_land_slot(&self) -> u64 {
let submission: OracleSubmission = self.submissions[self.result.submission_idx as usize];
submission.landed_at
}

pub fn latest_submissions(&self) -> Vec<OracleSubmission> {
let max_landed_at = self
.submissions
.iter()
.map(|s| s.landed_at)
.max()
.unwrap_or(0);
self.submissions
.iter()
.filter(|submission| submission.landed_at == max_landed_at)
.cloned()
.collect()
}
}
21 changes: 13 additions & 8 deletions sdk/src/idl/switchboard_on_demand_30.json
Original file line number Diff line number Diff line change
Expand Up @@ -2396,12 +2396,19 @@
],
"type": "u8"
},
{
"name": "submission_idx",
"docs": [
"The index of the submission that was used to calculate this result"
],
"type": "u8"
},
{
"name": "padding1",
"type": {
"array": [
"u8",
7
6
]
}
},
Expand Down Expand Up @@ -3019,13 +3026,11 @@
"type": "u64"
},
{
"name": "padding1",
"type": {
"array": [
"u8",
8
]
}
"name": "landed_at",
"docs": [
"The slot at which this value was landed on chain."
],
"type": "u64"
},
{
"name": "value",
Expand Down

0 comments on commit bb0d4ed

Please sign in to comment.