diff --git a/CHANGELOG.md b/CHANGELOG.md index ad6426c4b..bacf2971b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Features - program: stricter logic for atomic fills [#2042](https://github.com/drift-labs/protocol-v2/pull/2042) +- program: reset lp fields in update_user_idle [#2018](https://github.com/drift-labs/protocol-v2/pull/2018) ### Fixes diff --git a/programs/drift/src/instructions/keeper.rs b/programs/drift/src/instructions/keeper.rs index 8706de2b8..07facd82d 100644 --- a/programs/drift/src/instructions/keeper.rs +++ b/programs/drift/src/instructions/keeper.rs @@ -473,6 +473,21 @@ pub fn handle_update_user_idle<'c: 'info, 'info>( None, )?; + let mut updated_lp_fields = false; + for perp_position in user.perp_positions.iter_mut() { + if perp_position.lp_shares != 0 || perp_position.last_base_asset_amount_per_lp != 0 || perp_position.last_quote_asset_amount_per_lp != 0 || perp_position.per_lp_base != 0 { + perp_position.lp_shares = 0; + perp_position.last_base_asset_amount_per_lp = 0; + perp_position.last_quote_asset_amount_per_lp = 0; + perp_position.per_lp_base = 0; + updated_lp_fields = true; + } + } + + if updated_lp_fields { + return Ok(()); + } + let (equity, _) = calculate_user_equity(&user, &perp_market_map, &spot_market_map, &mut oracle_map)?;