Added DLOB, DLOBClient, and corresponding math
Added AuctionSubscriber class
Added SlotSubscriber class
Stabilized UserMap WebSocket Subscription
Fixed issue where get_non_idle_user_filter would return an empty filter
Fixed several math errors in amm.py, repeg.py, oracles.py
Fixed bug where DriftUser.get_free_collateral() would always return 0
Added equivalent math in funding.py to match TypeScript SDK
Removed sub_account_id field from DriftUser
Changed UserMap to assign slots from the getProgramAccounts RPC call
Updated constants/perp_markets.py with new perp market listings
Fix breaking bug in DriftClient.get_jupiter_swap_ix_v6 where token accounts wouldn't be created properly
Add get_l2_orderbook_sync and get_l3_orderbook_sync to DLOBClient for building orderbooks from DLOB instead of DLOB-server
Refactor the WebsocketDriftClientAccountSubscriber subscription logic to reduce 429s
Update drift.json IDL for Drift Program
Fix several major math bugs in DriftUser.get_perp_liq_price() and downstream math functions
Add default Confirmed commitment in StandardTxSender
Add PriorityFeeSubscriber
Fix bug where PriorityFeeSubscriber.subscribe() blocks
Refactor math entirely to align more closely with TypeScript SDK
Add some math functions to orders.py, amm.py, and oracles.py
Update casing conventions for ExchangeStatus
Add find_nodes_to_trigger() to dlob.py
Add get_slot() to user_map.py
Minor tweaks to UserMap
Add FastTxSender
Add determine_maker_and_taker and find_crossing_resting_limit_orders to DLOB
Fix bugs with lambda functions in DLOB
Add get_settle_perp_ixs, get_fill_perp_order_ix get_revert_fill_ix, get_trigger_order_ix, force_cancel_orders, and get_force_cancel_orders_ix to DriftClient
Fix bugs in amm.py
Fix bugs in exchange_status.py
Update funding calculations in funding.py/calculate_all_estimated_funding_rate
Increase RPC timeout in PriorityFeeSubscriber.load() from 5 to 20 seconds
Increase RPC timeout in UserMap.sync() from 10 to 30 seconds
Fix bug with python versions > 3.10 with mutable default struct fields in types.py/OrderParams
Several semantics changes throughout the codebase
Fix blocking bug in FastTxSender
Add derive_oracle_auction_params()
Add time_remaining_until_update()
Add calculate_borrow_rate()
Add calculate_interest_rate()
Add calculate_utilization()
Add calculate_spot_market_borrow_capacity()
Add calculate_reference_price_offset()
Add calculate_inventory_liquidity_ratio()
Add get_new_oracle_conf_pct()
Add DriftUser.is_being_liquidated()
Fix several bugs in several math functions
Fix bug in DriftClient.get_jupiter_swap_ix_v6()
Add math unit tests for derive_oracle_auction_params(), calculate_long_short_funding_and_live_twaps(), time_remaining_until_update(), calculate_size_premium_liability_weight(), calculate_borrow_rate(), calculate_deposit_rate(), calculate_spot_market_borrow_capacity, calculate_inventory_scale(), calculate_spread_bn(), calculate_price(), calculate_spread_reserves(), calculate_reference_price_offset(), calculate_inventory_liquidity_ratio(), calculate_live_oracle_twap(), calculate_live_oracle_std(), get_new_oracle_conf_pct(), is_oracle_valid(), calculate_position_pnl(), get_worst_case_token_amounts(), DriftUser.get_free_collateral(), DriftUser.get_health(), DriftUser.get_max_leverage_for_perps(), DriftUser.get_active_perp_positions(), DriftUser.get_unrealized_pnl(), DriftUser.can_be_liquidated(), DriftUser.get_token_amount(), DriftUser.get_net_spot_market_value(), DriftUser.get_spot_market_asset_and_liability_value()
Add OraclePriceData.default()
Add default values for padding in structs
Bump requests and typing-extensions to ^ instead of pinned
Update drift.json IDL
Fix bug in decode_user() where remainder_base_amount would decode incorrectly
Filter out logs with errors in websocket_log_provider.py to avoid EventSubscriber returning false positive events
Fix bug where MarketMap.unsubscribe() wasn't properly awaited
Fix bug where DriftClient.unsubscribe() wasn't properly awaited
Add support for hot-swapping oracles without SDK dying
Add custom event parsing in events/parse.py
Fix bug where DriftClient.unsubscribe() scheduled tasks on an already-running event loop
Add guardrails to avoid CachedDriftClientAccountSubscriber panicking on cache fetch IndexErrors
Add perp_market_indexes, spot_market_indexes, oracle_infos, should_find_all_markets_and_oracles to CachedDriftClientAccountSubscriber
Add stack_trace() utility function
Fix IndexError vs KeyError bug in CachedDriftClientAccountSubscriber.get_oracle_price_data_and_slot()
Sort market indexes in CachedDriftClientAccountSubscriber before populating cache
Merge PR #116: Update div_ceil to use integer division isntead of float division
Merge PR #117: Allows for the Jupiter V6 Swap API url to be configured
Refactor oracle switching & tests
Fix bug in MarketMap where a subscription would not be properly established
Add support for prelisting oracles
Fix bug where prelisting & switchboard oracles weren't properly decoded for cached drift client subscriptions
Add max confidence interval multiplier to oracle validity calculations
Fix events archiver bug with logs less than 8 bytes
Update drift.json IDL
Fix enum interpretaton bug in get_max_confidence_interval_multiplier
Add W-PERP to constants/perp_markets.py
Fix minor bugs in DriftUser math functions
Add JitoTxSender
Update drift.json IDL
Update perp_market_constants.py
Fix bug where DriftClient.send_ixs wasn't properly awaited
Add UserStatsMap
Update anchorpy, anchorpy-core, solana, jito-searcher-client to latest versions