also log primary oracle when fallback errors

This commit is contained in:
Lou-Kamades 2023-12-01 12:44:35 -06:00
parent ab9d3c37b4
commit 25aa422e2d
2 changed files with 21 additions and 17 deletions

View File

@ -227,10 +227,8 @@ impl<'a, 'info> ScannedBanksAndOracles<'a, 'info> {
let index = self.bank_index(token_index1)?;
let bank = self.banks[index].load_mut_fully_unchecked::<Bank>()?;
let oracle = &self.oracles[index];
let fallback_oracle_opt = self
.fallback_oracles
.iter()
.find(|ai| ai.key() == &bank.fallback_oracle);
let fallback_oracle_opt =
fetch_fallback_oracle(&self.fallback_oracles, &bank.fallback_oracle);
let price =
bank.oracle_price_with_fallback(oracle, fallback_oracle_opt, self.staleness_slot)?;
return Ok((bank, price, None));
@ -250,14 +248,10 @@ impl<'a, 'info> ScannedBanksAndOracles<'a, 'info> {
let bank2 = second_bank_part[second - (first + 1)].load_mut_fully_unchecked::<Bank>()?;
let oracle1 = &self.oracles[first];
let oracle2 = &self.oracles[second];
let fallback_oracle_opt1 = self
.fallback_oracles
.iter()
.find(|ai| ai.key() == &bank1.fallback_oracle);
let fallback_oracle_opt2 = self
.fallback_oracles
.iter()
.find(|ai| ai.key() == &bank2.fallback_oracle);
let fallback_oracle_opt1 =
fetch_fallback_oracle(&self.fallback_oracles, &bank1.fallback_oracle);
let fallback_oracle_opt2 =
fetch_fallback_oracle(&self.fallback_oracles, &bank2.fallback_oracle);
let price1 =
bank1.oracle_price_with_fallback(oracle1, fallback_oracle_opt1, self.staleness_slot)?;
let price2 =
@ -274,10 +268,8 @@ impl<'a, 'info> ScannedBanksAndOracles<'a, 'info> {
// The account was already loaded successfully during construction
let bank = self.banks[index].load_fully_unchecked::<Bank>()?;
let oracle = &self.oracles[index];
let fallback_oracle_opt = self
.fallback_oracles
.iter()
.find(|ai| ai.key() == &bank.fallback_oracle);
let fallback_oracle_opt =
fetch_fallback_oracle(&self.fallback_oracles, &bank.fallback_oracle);
let price =
bank.oracle_price_with_fallback(oracle, fallback_oracle_opt, self.staleness_slot)?;
@ -473,6 +465,14 @@ impl<'a, 'info> AccountRetriever for ScanningAccountRetriever<'a, 'info> {
}
}
#[inline(always)]
fn fetch_fallback_oracle<'a, 'info>(
fallback_oracles: &'a Vec<AccountInfoRef<'a, 'info>>,
fallback_key: &Pubkey,
) -> Option<&'a AccountInfoRef<'a, 'info>> {
fallback_oracles.iter().find(|ai| ai.key() == fallback_key)
}
#[cfg(test)]
mod tests {
use super::super::test::*;

View File

@ -982,7 +982,11 @@ impl Bank {
staleness_slot,
);
fallback_ok.with_context(|| {
oracle_log_context(&fallback_state, &self.oracle_config, staleness_slot)
format!(
"{} {}",
oracle_log_context(&primary_state, &self.oracle_config, staleness_slot),
oracle_log_context(&fallback_state, &self.oracle_config, staleness_slot)
)
})?;
Ok(fallback_state.price)
} else {