diff --git a/programs/drift/src/controller/amm.rs b/programs/drift/src/controller/amm.rs index 7162e9d2d..e25a578bf 100644 --- a/programs/drift/src/controller/amm.rs +++ b/programs/drift/src/controller/amm.rs @@ -29,6 +29,7 @@ use crate::math::{amm, amm_spread, bn, cp_curve, quote_asset::*}; use crate::state::events::CurveRecord; use crate::state::oracle::OraclePriceData; +use crate::state::paused_operations::PerpOperation; use crate::state::perp_market::{PerpMarket, AMM}; use crate::state::spot_market::{SpotBalance, SpotBalanceType, SpotMarket}; use crate::state::user::{SpotPosition, User}; @@ -499,6 +500,10 @@ fn calculate_revenue_pool_transfer( // If the AMM budget is above `FEE_POOL_TO_REVENUE_POOL_THRESHOLD` (in surplus), settle fees collected to the revenue pool depending on the health of the AMM state // Otherwise, spull from the revenue pool (up to a constraint amount) + if market.is_operation_paused(PerpOperation::SettleRevPool) { + return Ok(0); + } + let amm_budget_surplus = terminal_state_surplus.saturating_sub(FEE_POOL_TO_REVENUE_POOL_THRESHOLD.cast()?); diff --git a/programs/drift/src/instructions/admin.rs b/programs/drift/src/instructions/admin.rs index 35d665c0f..6984caa71 100644 --- a/programs/drift/src/instructions/admin.rs +++ b/programs/drift/src/instructions/admin.rs @@ -3357,7 +3357,8 @@ pub fn handle_update_perp_market_paused_operations( if *ctx.accounts.admin.key != ctx.accounts.state.admin { validate!( - paused_operations == PerpOperation::UpdateFunding as u8, + paused_operations == PerpOperation::UpdateFunding as u8 + || paused_operations == PerpOperation::SettleRevPool as u8, ErrorCode::DefaultError, "signer must be admin", )?; diff --git a/programs/drift/src/state/paused_operations.rs b/programs/drift/src/state/paused_operations.rs index 516470460..439dbcce6 100644 --- a/programs/drift/src/state/paused_operations.rs +++ b/programs/drift/src/state/paused_operations.rs @@ -12,9 +12,10 @@ pub enum PerpOperation { SettlePnlWithPosition = 0b00010000, Liquidation = 0b00100000, AmmImmediateFill = 0b01000000, + SettleRevPool = 0b10000000, } -const ALL_PERP_OPERATIONS: [PerpOperation; 7] = [ +const ALL_PERP_OPERATIONS: [PerpOperation; 8] = [ PerpOperation::UpdateFunding, PerpOperation::AmmFill, PerpOperation::Fill, @@ -22,6 +23,7 @@ const ALL_PERP_OPERATIONS: [PerpOperation; 7] = [ PerpOperation::SettlePnlWithPosition, PerpOperation::Liquidation, PerpOperation::AmmImmediateFill, + PerpOperation::SettleRevPool, ]; impl PerpOperation { diff --git a/sdk/src/types.ts b/sdk/src/types.ts index ee5ff3542..12c54d5ef 100644 --- a/sdk/src/types.ts +++ b/sdk/src/types.ts @@ -54,6 +54,7 @@ export enum PerpOperation { SETTLE_PNL = 8, SETTLE_PNL_WITH_POSITION = 16, LIQUIDATION = 32, + SETTLE_REV_POOL = 64, } export enum SpotOperation {