@@ -12,7 +12,8 @@ use crate::{
1212 types:: {
1313 messages:: {
1414 DepositAndPlaceRequest , IncomingSignedMessage , OrderMetadataAndMessage ,
15- ProcessOrderResponse , PROCESS_ORDER_RESPONSE_ERROR_MSG_DELIVERY_FAILED ,
15+ ProcessOrderResponse , PROCESS_ORDER_RESPONSE_ERROR_MSG_DELISTED_MARKET ,
16+ PROCESS_ORDER_RESPONSE_ERROR_MSG_DELIVERY_FAILED ,
1617 PROCESS_ORDER_RESPONSE_ERROR_MSG_INVALID_ORDER ,
1718 PROCESS_ORDER_RESPONSE_ERROR_MSG_INVALID_ORDER_AMOUNT ,
1819 PROCESS_ORDER_RESPONSE_ERROR_MSG_ORDER_SLOT_TOO_OLD ,
@@ -45,9 +46,9 @@ use drift_rs::{
4546 types:: {
4647 accounts:: { HighLeverageModeConfig , User } ,
4748 errors:: ErrorCode ,
48- CommitmentConfig , MarketId , MarketType , OrderParams , OrderType , PositionDirection ,
49- ProgramError , SdkError , SdkResult , SignedMsgTriggerOrderParams , VersionedMessage ,
50- VersionedTransaction ,
49+ CommitmentConfig , MarketId , MarketStatus , MarketType , OrderParams , OrderType ,
50+ PositionDirection , ProgramError , SdkError , SdkResult , SignedMsgTriggerOrderParams ,
51+ VersionedMessage , VersionedTransaction ,
5152 } ,
5253 Context , DriftClient , RpcClient , TransactionBuilder , Wallet ,
5354} ;
@@ -260,6 +261,20 @@ pub async fn process_order(
260261 let market = server_params
261262 . drift
262263 . try_get_perp_market_account ( order_params. market_index ) ;
264+
265+ if market
266+ . as_ref ( )
267+ . is_ok_and ( |m| matches ! ( m. status, MarketStatus :: Delisted | MarketStatus :: Settlement ) )
268+ {
269+ return Err ( (
270+ axum:: http:: StatusCode :: BAD_REQUEST ,
271+ ProcessOrderResponse {
272+ message : PROCESS_ORDER_RESPONSE_ERROR_MSG_DELISTED_MARKET ,
273+ error : format ! ( "market {} delisted" , order_params. market_index) . into ( ) ,
274+ } ,
275+ ) ) ;
276+ }
277+
263278 if let Err ( err) = validate_signed_order_params (
264279 & order_params,
265280 market. map ( |m| m. amm . min_order_size ) . unwrap_or ( 0 ) ,
@@ -444,7 +459,9 @@ pub async fn deposit_trade(
444459 // verify deposit ix exists and amount
445460 let mut has_place_ix = false ;
446461 for ix in req. deposit_tx . message . instructions ( ) {
447- if & ix. data [ ..8 ] == drift_idl:: instructions:: PlaceSignedMsgTakerOrder :: DISCRIMINATOR {
462+ if ix. data . len ( ) > 8
463+ && & ix. data [ ..8 ] == drift_idl:: instructions:: PlaceSignedMsgTakerOrder :: DISCRIMINATOR
464+ {
448465 has_place_ix = true ;
449466 }
450467 }
@@ -623,7 +640,6 @@ pub async fn health_check(
623640
624641pub async fn start_server ( ) {
625642 // Start server
626-
627643 dotenv ( ) . ok ( ) ;
628644
629645 let use_kafka: bool = env:: var ( "USE_KAFKA" ) . unwrap_or_else ( |_| "false" . to_string ( ) ) == "true" ;
0 commit comments