Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use fallback oracles in Rust client #838

Merged
merged 25 commits into from
Jan 23, 2024
Merged
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
081dd66
rename usd_opt to usdc_opt in OracleAccountInfos
Lou-Kamades Jan 4, 2024
17c0db2
use fallbacks when fetching bank+ price in AccountFetcher struct
Lou-Kamades Jan 4, 2024
ddaf0cc
feat: add derive_fallback_oracle_keys to MangoGroupContext
Lou-Kamades Jan 4, 2024
1ff4164
test: properly assert failure CU in test_health_compute_tokens_fallba…
Lou-Kamades Jan 8, 2024
38cba5e
provide fallback oracle accounts in the rust client
Lou-Kamades Jan 8, 2024
8906c5f
liquidator: update for fallback oracles
Lou-Kamades Jan 8, 2024
9f25064
set fallback config in mango services
Lou-Kamades Jan 8, 2024
0a4723f
support fallback oracles in rust settler + keeper
Lou-Kamades Jan 8, 2024
f174fd4
fix send error related to fetching fallbacks dynamically in tcs_start
Lou-Kamades Jan 8, 2024
9cae701
drop derive_fallback_oracle_keys_sync
ckamm Jan 11, 2024
712f38b
add fetch_multiple_accounts to AccountFetcher trait
Lou-Kamades Jan 11, 2024
644ece0
revert client::new() api
Lou-Kamades Jan 11, 2024
40a00bf
deriving oracle keys uses account_fetcher
Lou-Kamades Jan 11, 2024
f682b96
use client helpers for deriving health_check account_metas
Lou-Kamades Jan 11, 2024
a0d8fb2
add health_cache helper to mango client
Lou-Kamades Jan 11, 2024
7756368
add get_slot to account_fetcher
Lou-Kamades Jan 11, 2024
b70d3cb
lint
Lou-Kamades Jan 11, 2024
8b4a024
Merge branch 'dev' into lou/fallback-oracles-client
Lou-Kamades Jan 18, 2024
c1e872c
cached account fetcher only fetches uncached accounts
Lou-Kamades Jan 18, 2024
deb3796
ensure keeper client does not use cached oracles for staleness checks
Lou-Kamades Jan 18, 2024
231b009
address minor review comments
Lou-Kamades Jan 18, 2024
e771fb8
create unique job keys for CachedAccountFetcher.fetch_multiple_accounts
Lou-Kamades Jan 20, 2024
af35d78
Merge branch 'dev' into lou/fallback-oracles-client
Lou-Kamades Jan 20, 2024
46be2eb
fmt
Lou-Kamades Jan 20, 2024
d655a09
improve hashing in CachedAccountFetcher.fetch_multiple_accounts
Lou-Kamades Jan 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions lib/client/src/account_fetcher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ use anchor_lang::AccountDeserialize;

use solana_client::nonblocking::rpc_client::RpcClient as RpcClientAsync;
use solana_sdk::account::{AccountSharedData, ReadableAccount};
use solana_sdk::hash::hashv;
use solana_sdk::hash::Hash;
use solana_sdk::hash::HASH_BYTES;
use solana_sdk::pubkey::Pubkey;

use mango_v4::state::MangoAccountValue;
Expand Down Expand Up @@ -159,7 +162,7 @@ struct AccountCache {

account_jobs: CoalescedAsyncJob<Pubkey, anyhow::Result<AccountSharedData>>,
multiple_accounts_jobs:
CoalescedAsyncJob<Pubkey, anyhow::Result<Vec<(Pubkey, AccountSharedData)>>>,
CoalescedAsyncJob<Hash, anyhow::Result<Vec<(Pubkey, AccountSharedData)>>>,
program_accounts_jobs:
CoalescedAsyncJob<(Pubkey, [u8; 8]), anyhow::Result<Vec<(Pubkey, AccountSharedData)>>>,
}
Expand Down Expand Up @@ -290,7 +293,7 @@ impl<T: AccountFetcher + 'static> AccountFetcher for CachedAccountFetcher<T> {
) -> anyhow::Result<Vec<(Pubkey, AccountSharedData)>> {
let fetch_job = {
let mut cache = self.cache.lock().unwrap();
let missing_keys: Vec<Pubkey> = keys
let mut missing_keys: Vec<Pubkey> = keys
.iter()
.filter(|k| !cache.accounts.contains_key(k))
.cloned()
Expand All @@ -303,7 +306,13 @@ impl<T: AccountFetcher + 'static> AccountFetcher for CachedAccountFetcher<T> {
}

let self_copy = self.clone();
let job_key = missing_keys[0];
missing_keys.sort();
let job_key = missing_keys
.clone()
.into_iter()
.fold(Hash::from([0u8; HASH_BYTES]), |acc, key| {
hashv(&[&acc.to_bytes(), &key.to_bytes()])
});
Lou-Kamades marked this conversation as resolved.
Show resolved Hide resolved
cache
.multiple_accounts_jobs
.run_coalesced(job_key.clone(), async move {
Expand Down
Loading