Skip to content

Commit 6a7b1f3

Browse files
committed
merge master
2 parents bb63bae + 29a292b commit 6a7b1f3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+256
-11323
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Features
1111

12+
- program: rm lp ([#1755](https://github.com/drift-labs/protocol-v2/pull/1755))
13+
14+
### Fixes
15+
16+
### Breaking
17+
18+
## [2.136.0] - 2025-09-03
19+
20+
### Features
21+
22+
- program: update referral fee validate rules ([#1843](https://github.com/drift-labs/protocol-v2/pull/1843))
23+
1224
### Fixes
1325

1426
### Breaking

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

programs/drift/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "drift"
3-
version = "2.135.0"
3+
version = "2.136.0"
44
description = "Created with Anchor"
55
edition = "2018"
66

programs/drift/src/controller/amm.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,8 +421,7 @@ pub fn formulaic_update_k(
421421

422422
let new_sqrt_k = bn::U192::from(market.amm.sqrt_k)
423423
.safe_mul(bn::U192::from(k_scale_numerator))?
424-
.safe_div(bn::U192::from(k_scale_denominator))?
425-
.max(bn::U192::from(market.amm.user_lp_shares.safe_add(1)?));
424+
.safe_div(bn::U192::from(k_scale_denominator))?;
426425

427426
let update_k_result = get_update_k_result(market, new_sqrt_k, true)?;
428427

programs/drift/src/controller/amm/tests.rs

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -255,62 +255,6 @@ fn iterative_no_bounds_formualic_k_tests() {
255255
assert_eq!(market.amm.total_fee_minus_distributions, 985625029);
256256
}
257257

258-
#[test]
259-
fn decrease_k_up_to_user_lp_shares() {
260-
let mut market = PerpMarket {
261-
amm: AMM {
262-
base_asset_reserve: 512295081967,
263-
quote_asset_reserve: 488 * AMM_RESERVE_PRECISION,
264-
sqrt_k: 500 * AMM_RESERVE_PRECISION,
265-
user_lp_shares: 150 * AMM_RESERVE_PRECISION,
266-
peg_multiplier: 50000000,
267-
concentration_coef: MAX_CONCENTRATION_COEFFICIENT,
268-
base_asset_amount_with_amm: -12295081967,
269-
total_fee_minus_distributions: -100 * QUOTE_PRECISION as i128,
270-
total_fee_withdrawn: 100 * QUOTE_PRECISION,
271-
curve_update_intensity: 100,
272-
..AMM::default()
273-
},
274-
..PerpMarket::default()
275-
};
276-
// let prev_sqrt_k = market.amm.sqrt_k;
277-
let (new_terminal_quote_reserve, new_terminal_base_reserve) =
278-
amm::calculate_terminal_reserves(&market.amm).unwrap();
279-
market.amm.terminal_quote_asset_reserve = new_terminal_quote_reserve;
280-
let (min_base_asset_reserve, max_base_asset_reserve) =
281-
amm::calculate_bid_ask_bounds(market.amm.concentration_coef, new_terminal_base_reserve)
282-
.unwrap();
283-
market.amm.min_base_asset_reserve = min_base_asset_reserve;
284-
market.amm.max_base_asset_reserve = max_base_asset_reserve;
285-
286-
// let reserve_price = market.amm.reserve_price().unwrap();
287-
let now = 10000;
288-
let oracle_price_data = OraclePriceData {
289-
price: 50 * PRICE_PRECISION_I64,
290-
confidence: 0,
291-
delay: 2,
292-
has_sufficient_number_of_data_points: true,
293-
};
294-
295-
// negative funding cost
296-
let mut count = 0;
297-
let mut prev_k = market.amm.sqrt_k;
298-
let mut new_k = 0;
299-
while prev_k != new_k && count < 100000 {
300-
let funding_cost = (QUOTE_PRECISION * 100000) as i128;
301-
prev_k = market.amm.sqrt_k;
302-
formulaic_update_k(&mut market, &oracle_price_data, funding_cost, now).unwrap();
303-
new_k = market.amm.sqrt_k;
304-
msg!("quote_asset_reserve:{}", market.amm.quote_asset_reserve);
305-
msg!("new_k:{}", new_k);
306-
count += 1
307-
}
308-
309-
assert_eq!(market.amm.base_asset_amount_with_amm, -12295081967);
310-
assert_eq!(market.amm.sqrt_k, 162234889619);
311-
assert_eq!(market.amm.total_fee_minus_distributions, 29796232175);
312-
}
313-
314258
#[test]
315259
fn update_pool_balances_test_high_util_borrow() {
316260
let mut market = PerpMarket {

programs/drift/src/controller/liquidation.rs

Lines changed: 4 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use anchor_lang::prelude::*;
55

66
use crate::controller::amm::get_fee_pool_tokens;
77
use crate::controller::funding::settle_funding_payment;
8-
use crate::controller::lp::burn_lp_shares;
98
use crate::controller::orders;
109
use crate::controller::orders::{cancel_order, fill_perp_order, place_perp_order};
1110
use crate::controller::position::{
@@ -181,8 +180,7 @@ pub fn liquidate_perp(
181180
let position_index = get_position_index(&user.perp_positions, market_index)?;
182181
validate!(
183182
user.perp_positions[position_index].is_open_position()
184-
|| user.perp_positions[position_index].has_open_order()
185-
|| user.perp_positions[position_index].is_lp(),
183+
|| user.perp_positions[position_index].has_open_order(),
186184
ErrorCode::PositionDoesntHaveOpenPositionOrOrders
187185
)?;
188186

@@ -227,27 +225,7 @@ pub fn liquidate_perp(
227225
drop(market);
228226

229227
// burning lp shares = removing open bids/asks
230-
let lp_shares = user.perp_positions[position_index].lp_shares;
231-
if lp_shares > 0 {
232-
let (position_delta, pnl) = burn_lp_shares(
233-
&mut user.perp_positions[position_index],
234-
perp_market_map.get_ref_mut(&market_index)?.deref_mut(),
235-
lp_shares,
236-
oracle_price,
237-
)?;
238-
239-
// emit LP record for shares removed
240-
emit_stack::<_, { LPRecord::SIZE }>(LPRecord {
241-
ts: now,
242-
action: LPAction::RemoveLiquidity,
243-
user: *user_key,
244-
n_shares: lp_shares,
245-
market_index,
246-
delta_base_asset_amount: position_delta.base_asset_amount,
247-
delta_quote_asset_amount: position_delta.quote_asset_amount,
248-
pnl,
249-
})?;
250-
}
228+
let lp_shares = 0;
251229

252230
// check if user exited liquidation territory
253231
let intermediate_margin_calculation = if !canceled_order_ids.is_empty() || lp_shares > 0 {
@@ -834,8 +812,7 @@ pub fn liquidate_perp_with_fill(
834812
let position_index = get_position_index(&user.perp_positions, market_index)?;
835813
validate!(
836814
user.perp_positions[position_index].is_open_position()
837-
|| user.perp_positions[position_index].has_open_order()
838-
|| user.perp_positions[position_index].is_lp(),
815+
|| user.perp_positions[position_index].has_open_order(),
839816
ErrorCode::PositionDoesntHaveOpenPositionOrOrders
840817
)?;
841818

@@ -880,27 +857,7 @@ pub fn liquidate_perp_with_fill(
880857
drop(market);
881858

882859
// burning lp shares = removing open bids/asks
883-
let lp_shares = user.perp_positions[position_index].lp_shares;
884-
if lp_shares > 0 {
885-
let (position_delta, pnl) = burn_lp_shares(
886-
&mut user.perp_positions[position_index],
887-
perp_market_map.get_ref_mut(&market_index)?.deref_mut(),
888-
lp_shares,
889-
oracle_price,
890-
)?;
891-
892-
// emit LP record for shares removed
893-
emit_stack::<_, { LPRecord::SIZE }>(LPRecord {
894-
ts: now,
895-
action: LPAction::RemoveLiquidity,
896-
user: *user_key,
897-
n_shares: lp_shares,
898-
market_index,
899-
delta_base_asset_amount: position_delta.base_asset_amount,
900-
delta_quote_asset_amount: position_delta.quote_asset_amount,
901-
pnl,
902-
})?;
903-
}
860+
let lp_shares = 0;
904861

905862
// check if user exited liquidation territory
906863
let intermediate_margin_calculation = if !canceled_order_ids.is_empty() || lp_shares > 0 {
@@ -2453,12 +2410,6 @@ pub fn liquidate_borrow_for_perp_pnl(
24532410
base_asset_amount
24542411
)?;
24552412

2456-
validate!(
2457-
!user_position.is_lp(),
2458-
ErrorCode::InvalidPerpPositionToLiquidate,
2459-
"user is an lp. must call liquidate_perp first"
2460-
)?;
2461-
24622413
let pnl = user_position.quote_asset_amount.cast::<i128>()?;
24632414

24642415
validate!(
@@ -2988,12 +2939,6 @@ pub fn liquidate_perp_pnl_for_deposit(
29882939
base_asset_amount
29892940
)?;
29902941

2991-
validate!(
2992-
!user_position.is_lp(),
2993-
ErrorCode::InvalidPerpPositionToLiquidate,
2994-
"user is an lp. must call liquidate_perp first"
2995-
)?;
2996-
29972942
let unsettled_pnl = user_position.quote_asset_amount.cast::<i128>()?;
29982943

29992944
validate!(

0 commit comments

Comments
 (0)