From 17079410463583aceadaf627b8c417799cdf13f8 Mon Sep 17 00:00:00 2001 From: wphan Date: Wed, 19 Nov 2025 17:13:30 -0800 Subject: [PATCH 1/2] program: add DepositRecord::spot_balance_after --- programs/drift/src/instructions/admin.rs | 1 + programs/drift/src/instructions/user.rs | 20 ++++++++++++++++++++ programs/drift/src/state/events.rs | 2 ++ 3 files changed, 23 insertions(+) diff --git a/programs/drift/src/instructions/admin.rs b/programs/drift/src/instructions/admin.rs index 9b633ef299..b0e251774e 100644 --- a/programs/drift/src/instructions/admin.rs +++ b/programs/drift/src/instructions/admin.rs @@ -4917,6 +4917,7 @@ pub fn handle_admin_deposit<'c: 'info, 'info>( explanation: DepositExplanation::Reward, transfer_user: None, signer: Some(ctx.accounts.admin.key()), + spot_balance_after: token_amount, }; emit!(deposit_record); diff --git a/programs/drift/src/instructions/user.rs b/programs/drift/src/instructions/user.rs index 6461649a62..984c306b98 100644 --- a/programs/drift/src/instructions/user.rs +++ b/programs/drift/src/instructions/user.rs @@ -831,6 +831,7 @@ pub fn handle_deposit<'c: 'info, 'info>( explanation, transfer_user: None, signer, + spot_balance_after: token_amount, }; emit!(deposit_record); @@ -987,6 +988,9 @@ pub fn handle_withdraw<'c: 'info, 'info>( explanation: deposit_explanation, transfer_user: None, signer: None, + spot_balance_after: user + .force_get_spot_position_mut(market_index)? + .get_token_amount(&spot_market)?, }; emit!(deposit_record); @@ -1158,6 +1162,9 @@ pub fn handle_transfer_deposit<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(to_user_key), signer: None, + spot_balance_after: from_user + .force_get_spot_position_mut(market_index)? + .get_token_amount(spot_market)?, }; emit!(deposit_record); } @@ -1223,6 +1230,7 @@ pub fn handle_transfer_deposit<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(from_user_key), signer: None, + spot_balance_after: token_amount, }; emit!(deposit_record); } @@ -1436,6 +1444,9 @@ pub fn handle_transfer_pools<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(to_user_key), signer: None, + spot_balance_after: from_user + .force_get_spot_position_mut(deposit_from_market_index)? + .get_token_amount(&deposit_from_spot_market)?, }; emit!(deposit_record); @@ -1471,6 +1482,9 @@ pub fn handle_transfer_pools<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(from_user_key), signer: None, + spot_balance_after: to_user + .force_get_spot_position_mut(deposit_to_market_index)? + .get_token_amount(&deposit_to_spot_market)?, }; emit!(deposit_record); } @@ -1538,6 +1552,9 @@ pub fn handle_transfer_pools<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(to_user_key), signer: None, + spot_balance_after: from_user + .force_get_spot_position_mut(borrow_from_market_index)? + .get_token_amount(&borrow_from_spot_market)?, }; emit!(deposit_record); @@ -1573,6 +1590,9 @@ pub fn handle_transfer_pools<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(from_user_key), signer: None, + spot_balance_after: to_user + .force_get_spot_position_mut(borrow_to_market_index)? + .get_token_amount(&borrow_to_spot_market)?, }; emit!(deposit_record); } diff --git a/programs/drift/src/state/events.rs b/programs/drift/src/state/events.rs index 16e6eb42f0..fac9322b1d 100644 --- a/programs/drift/src/state/events.rs +++ b/programs/drift/src/state/events.rs @@ -52,6 +52,8 @@ pub struct DepositRecord { pub explanation: DepositExplanation, pub transfer_user: Option, pub signer: Option, + /// precision: token mint precision + pub spot_balance_after: u128, } #[derive(Clone, Copy, BorshSerialize, BorshDeserialize, PartialEq, Eq, Default)] From ca6b186e0f5a8470a53f9635edb0de7169559ce8 Mon Sep 17 00:00:00 2001 From: wphan Date: Wed, 19 Nov 2025 17:38:21 -0800 Subject: [PATCH 2/2] PR comments --- programs/drift/src/instructions/admin.rs | 3 ++- programs/drift/src/instructions/user.rs | 29 ++++++++++++------------ programs/drift/src/state/events.rs | 2 +- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/programs/drift/src/instructions/admin.rs b/programs/drift/src/instructions/admin.rs index b0e251774e..110c43b8a0 100644 --- a/programs/drift/src/instructions/admin.rs +++ b/programs/drift/src/instructions/admin.rs @@ -4856,6 +4856,7 @@ pub fn handle_admin_deposit<'c: 'info, 'info>( None, )?; + let user_token_amount_after = spot_position.get_signed_token_amount(&spot_market)?; let token_amount = spot_position.get_token_amount(&spot_market)?; if token_amount == 0 { validate!( @@ -4917,7 +4918,7 @@ pub fn handle_admin_deposit<'c: 'info, 'info>( explanation: DepositExplanation::Reward, transfer_user: None, signer: Some(ctx.accounts.admin.key()), - spot_balance_after: token_amount, + user_token_amount_after, }; emit!(deposit_record); diff --git a/programs/drift/src/instructions/user.rs b/programs/drift/src/instructions/user.rs index 984c306b98..7811fa2d1e 100644 --- a/programs/drift/src/instructions/user.rs +++ b/programs/drift/src/instructions/user.rs @@ -739,6 +739,7 @@ pub fn handle_deposit<'c: 'info, 'info>( None, )?; + let user_token_amount_after = spot_position.get_signed_token_amount(&spot_market)?; let token_amount = spot_position.get_token_amount(&spot_market)?; if token_amount == 0 { validate!( @@ -831,7 +832,7 @@ pub fn handle_deposit<'c: 'info, 'info>( explanation, transfer_user: None, signer, - spot_balance_after: token_amount, + user_token_amount_after, }; emit!(deposit_record); @@ -988,9 +989,9 @@ pub fn handle_withdraw<'c: 'info, 'info>( explanation: deposit_explanation, transfer_user: None, signer: None, - spot_balance_after: user + user_token_amount_after: user .force_get_spot_position_mut(market_index)? - .get_token_amount(&spot_market)?, + .get_signed_token_amount(&spot_market)?, }; emit!(deposit_record); @@ -1162,9 +1163,9 @@ pub fn handle_transfer_deposit<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(to_user_key), signer: None, - spot_balance_after: from_user + user_token_amount_after: from_user .force_get_spot_position_mut(market_index)? - .get_token_amount(spot_market)?, + .get_signed_token_amount(spot_market)?, }; emit!(deposit_record); } @@ -1230,7 +1231,7 @@ pub fn handle_transfer_deposit<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(from_user_key), signer: None, - spot_balance_after: token_amount, + user_token_amount_after: to_spot_position.get_signed_token_amount(spot_market)?, }; emit!(deposit_record); } @@ -1444,9 +1445,9 @@ pub fn handle_transfer_pools<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(to_user_key), signer: None, - spot_balance_after: from_user + user_token_amount_after: from_user .force_get_spot_position_mut(deposit_from_market_index)? - .get_token_amount(&deposit_from_spot_market)?, + .get_signed_token_amount(&deposit_from_spot_market)?, }; emit!(deposit_record); @@ -1482,9 +1483,9 @@ pub fn handle_transfer_pools<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(from_user_key), signer: None, - spot_balance_after: to_user + user_token_amount_after: to_user .force_get_spot_position_mut(deposit_to_market_index)? - .get_token_amount(&deposit_to_spot_market)?, + .get_signed_token_amount(&deposit_to_spot_market)?, }; emit!(deposit_record); } @@ -1552,9 +1553,9 @@ pub fn handle_transfer_pools<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(to_user_key), signer: None, - spot_balance_after: from_user + user_token_amount_after: from_user .force_get_spot_position_mut(borrow_from_market_index)? - .get_token_amount(&borrow_from_spot_market)?, + .get_signed_token_amount(&borrow_from_spot_market)?, }; emit!(deposit_record); @@ -1590,9 +1591,9 @@ pub fn handle_transfer_pools<'c: 'info, 'info>( explanation: DepositExplanation::Transfer, transfer_user: Some(from_user_key), signer: None, - spot_balance_after: to_user + user_token_amount_after: to_user .force_get_spot_position_mut(borrow_to_market_index)? - .get_token_amount(&borrow_to_spot_market)?, + .get_signed_token_amount(&borrow_to_spot_market)?, }; emit!(deposit_record); } diff --git a/programs/drift/src/state/events.rs b/programs/drift/src/state/events.rs index fac9322b1d..797458fbbc 100644 --- a/programs/drift/src/state/events.rs +++ b/programs/drift/src/state/events.rs @@ -53,7 +53,7 @@ pub struct DepositRecord { pub transfer_user: Option, pub signer: Option, /// precision: token mint precision - pub spot_balance_after: u128, + pub user_token_amount_after: i128, } #[derive(Clone, Copy, BorshSerialize, BorshDeserialize, PartialEq, Eq, Default)]