From 389fa82083e434891bf99c70b96f2f017fe8c4a1 Mon Sep 17 00:00:00 2001 From: Binye Barwe Date: Thu, 13 Jul 2023 10:18:47 +0200 Subject: [PATCH] check open_orders_admin on ixs instead of on the book --- .../src/instructions/place_order.rs | 19 ++++++++++++++----- .../src/instructions/place_take_order.rs | 18 +++++++++++++----- .../openbook-v2/src/state/orderbook/book.rs | 10 ---------- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/programs/openbook-v2/src/instructions/place_order.rs b/programs/openbook-v2/src/instructions/place_order.rs index feda78ed..abfb4e0b 100644 --- a/programs/openbook-v2/src/instructions/place_order.rs +++ b/programs/openbook-v2/src/instructions/place_order.rs @@ -7,7 +7,6 @@ use crate::accounts_zerocopy::*; use crate::error::*; use crate::state::*; -// TODO #[allow(clippy::too_many_arguments)] pub fn place_order(ctx: Context, order: Order, limit: u8) -> Result> { require_gte!(order.max_base_lots, 0, OpenBookError::InvalidInputLots); @@ -29,6 +28,20 @@ pub fn place_order(ctx: Context, order: Order, limit: u8) -> Result< market.time_expiry == 0 || market.time_expiry > Clock::get()?.unix_timestamp, OpenBookError::MarketHasExpired ); + if let Some(open_orders_admin) = Option::::from(market.open_orders_admin) { + let open_orders_admin_signer = ctx + .accounts + .open_orders_admin + .as_ref() + .map(|signer| signer.key()) + .ok_or(OpenBookError::MissingOpenOrdersAdmin)?; + require_eq!( + open_orders_admin, + open_orders_admin_signer, + OpenBookError::InvalidOpenOrdersAdmin + ); + } + let mut book = Orderbook { bids: ctx.accounts.bids.load_mut()?, asks: ctx.accounts.asks.load_mut()?, @@ -58,10 +71,6 @@ pub fn place_order(ctx: Context, order: Order, limit: u8) -> Result< &open_orders_account_pk, now_ts, limit, - ctx.accounts - .open_orders_admin - .as_ref() - .map(|signer| signer.key()), ctx.remaining_accounts, )?; diff --git a/programs/openbook-v2/src/instructions/place_take_order.rs b/programs/openbook-v2/src/instructions/place_take_order.rs index 8fc95220..53a64124 100644 --- a/programs/openbook-v2/src/instructions/place_take_order.rs +++ b/programs/openbook-v2/src/instructions/place_take_order.rs @@ -6,7 +6,6 @@ use crate::accounts_zerocopy::*; use crate::error::*; use crate::state::*; -// TODO #[allow(clippy::too_many_arguments)] pub fn place_take_order<'info>( ctx: Context<'_, '_, '_, 'info, PlaceTakeOrder<'info>>, @@ -25,6 +24,19 @@ pub fn place_take_order<'info>( market.time_expiry == 0 || market.time_expiry > Clock::get()?.unix_timestamp, OpenBookError::MarketHasExpired ); + if let Some(open_orders_admin) = Option::::from(market.open_orders_admin) { + let open_orders_admin_signer = ctx + .accounts + .open_orders_admin + .as_ref() + .map(|signer| signer.key()) + .ok_or(OpenBookError::MissingOpenOrdersAdmin)?; + require_eq!( + open_orders_admin, + open_orders_admin_signer, + OpenBookError::InvalidOpenOrdersAdmin + ); + } let mut book = Orderbook { bids: ctx.accounts.bids.load_mut()?, @@ -56,10 +68,6 @@ pub fn place_take_order<'info>( &ctx.accounts.signer.key(), now_ts, limit, - ctx.accounts - .open_orders_admin - .as_ref() - .map(|signer| signer.key()), ctx.remaining_accounts, )?; diff --git a/programs/openbook-v2/src/state/orderbook/book.rs b/programs/openbook-v2/src/state/orderbook/book.rs index d9045922..7498752f 100644 --- a/programs/openbook-v2/src/state/orderbook/book.rs +++ b/programs/openbook-v2/src/state/orderbook/book.rs @@ -65,19 +65,9 @@ impl<'a> Orderbook<'a> { owner: &Pubkey, now_ts: u64, mut limit: u8, - open_orders_admin_signer: Option, remaining_accs: &[AccountInfo], ) -> std::result::Result { let market = open_book_market; - if let Some(open_orders_admin) = Option::::from(market.open_orders_admin) { - let open_orders_admin_signer = - open_orders_admin_signer.ok_or(OpenBookError::MissingOpenOrdersAdmin)?; - require_eq!( - open_orders_admin, - open_orders_admin_signer, - OpenBookError::InvalidOpenOrdersAdmin - ); - } let side = order.side;