* rename usd_opt to usdc_opt in OracleAccountInfos
* use fallbacks when fetching bank+ price in AccountFetcher struct
* feat: add derive_fallback_oracle_keys to MangoGroupContext
* test: properly assert failure CU in test_health_compute_tokens_fallback_oracles
* provide fallback oracle accounts in the rust client
* liquidator: update for fallback oracles
* set fallback config in mango services
* support fallback oracles in rust settler + keeper
* fix send error related to fetching fallbacks dynamically in tcs_start
* drop derive_fallback_oracle_keys_sync
* add fetch_multiple_accounts to AccountFetcher trait
* revert client::new() api
* deriving oracle keys uses account_fetcher
* use client helpers for deriving health_check account_metas
* add health_cache helper to mango client
* add get_slot to account_fetcher
* lint
* cached account fetcher only fetches uncached accounts
* ensure keeper client does not use cached oracles for staleness checks
* address minor review comments
* create unique job keys for CachedAccountFetcher.fetch_multiple_accounts
* fmt
* improve hashing in CachedAccountFetcher.fetch_multiple_accounts
---------
Co-authored-by: Christian Kamm <mail@ckamm.de>
The liqor liquidation fee and platform liquidation fee for the asset and
liab token are both payed by the liqee.
The platform liquidation fee is added to the Bank's
collected_fees_native and tracked in collected_liquidation_fees.
- require borrows <= deposits, even if vaults have more tokens
- change min_vault_to_deposits_ratio to be about max utilization
Reviewed and audited as part of the v0.21.1 release, original
commit was 5c2f857112
* ts: sim usdc pos for max perp trades even if no usdc token position exists
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
---------
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
- keep track of different error types per key
- skip for a given duration once too many errors came in
- wipe if no new errors are seen for a while
- simplify logging of actively skipped cases
Previously, freeing would be impossible if a canceling fill or out event
was already in-flight - then the order would no longer be on the
orderbook.
Now, FillEvent and OutEvent store the order id and can check if the open
order slot on the account has been reused already. That allows canceling
orders to always free up the user slot immediately.