From d7b6bd2c05cb3914bd49e48a88e400aac3a88408 Mon Sep 17 00:00:00 2001 From: skrrb Date: Wed, 5 Jul 2023 13:20:06 +0300 Subject: [PATCH] mv account state constraint to ix --- programs/openbook-v2/src/accounts_ix/cancel_order.rs | 5 ++--- programs/openbook-v2/src/accounts_ix/place_order.rs | 3 +-- .../openbook-v2/src/instructions/cancel_all_orders.rs | 8 +++++++- programs/openbook-v2/src/instructions/cancel_order.rs | 4 ++++ .../src/instructions/cancel_order_by_client_order_id.rs | 4 ++++ programs/openbook-v2/src/instructions/place_order.rs | 4 ++++ 6 files changed, 22 insertions(+), 6 deletions(-) diff --git a/programs/openbook-v2/src/accounts_ix/cancel_order.rs b/programs/openbook-v2/src/accounts_ix/cancel_order.rs index e6eaf994..874971d0 100644 --- a/programs/openbook-v2/src/accounts_ix/cancel_order.rs +++ b/programs/openbook-v2/src/accounts_ix/cancel_order.rs @@ -1,4 +1,3 @@ -use crate::error::OpenBookError; use crate::state::{BookSide, Market, OpenOrdersAccount}; use anchor_lang::prelude::*; @@ -6,8 +5,8 @@ use anchor_lang::prelude::*; pub struct CancelOrder<'info> { #[account( mut, - has_one = market, - constraint = open_orders_account.load()?.is_owner_or_delegate(owner.key()) @ OpenBookError::NoOwnerOrDelegate, + has_one = market + // also is_owner_or_delegate check inside ix )] pub open_orders_account: AccountLoader<'info, OpenOrdersAccount>, pub owner: Signer<'info>, diff --git a/programs/openbook-v2/src/accounts_ix/place_order.rs b/programs/openbook-v2/src/accounts_ix/place_order.rs index a5b1ec06..226ad4bc 100644 --- a/programs/openbook-v2/src/accounts_ix/place_order.rs +++ b/programs/openbook-v2/src/accounts_ix/place_order.rs @@ -1,4 +1,3 @@ -use crate::error::OpenBookError; use crate::state::*; use anchor_lang::prelude::*; use anchor_spl::token::{Token, TokenAccount}; @@ -8,7 +7,7 @@ pub struct PlaceOrder<'info> { #[account( mut, has_one = market, - constraint = open_orders_account.load()?.is_owner_or_delegate(owner_or_delegate.key()) @ OpenBookError::NoOwnerOrDelegate, + // also is_owner_or_delegate check inside ix )] pub open_orders_account: AccountLoader<'info, OpenOrdersAccount>, pub owner_or_delegate: Signer<'info>, diff --git a/programs/openbook-v2/src/instructions/cancel_all_orders.rs b/programs/openbook-v2/src/instructions/cancel_all_orders.rs index 337510d6..a98dfd3e 100644 --- a/programs/openbook-v2/src/instructions/cancel_all_orders.rs +++ b/programs/openbook-v2/src/instructions/cancel_all_orders.rs @@ -1,6 +1,8 @@ +use anchor_lang::prelude::*; + use crate::accounts_ix::*; +use crate::error::OpenBookError; use crate::state::*; -use anchor_lang::prelude::*; pub fn cancel_all_orders( ctx: Context, @@ -8,6 +10,10 @@ pub fn cancel_all_orders( limit: u8, ) -> Result<()> { let mut account = ctx.accounts.open_orders_account.load_mut()?; + require!( + account.is_owner_or_delegate(ctx.accounts.owner.key()), + OpenBookError::NoOwnerOrDelegate + ); let market = ctx.accounts.market.load()?; let mut book = Orderbook { diff --git a/programs/openbook-v2/src/instructions/cancel_order.rs b/programs/openbook-v2/src/instructions/cancel_order.rs index dd7d0b06..4c3fc73a 100644 --- a/programs/openbook-v2/src/instructions/cancel_order.rs +++ b/programs/openbook-v2/src/instructions/cancel_order.rs @@ -8,6 +8,10 @@ pub fn cancel_order(ctx: Context, order_id: u128) -> Result<()> { require_gt!(order_id, 0, OpenBookError::InvalidInputOrderId); let mut account = ctx.accounts.open_orders_account.load_mut()?; + require!( + account.is_owner_or_delegate(ctx.accounts.owner.key()), + OpenBookError::NoOwnerOrDelegate + ); let market = ctx.accounts.market.load()?; let mut book = Orderbook { diff --git a/programs/openbook-v2/src/instructions/cancel_order_by_client_order_id.rs b/programs/openbook-v2/src/instructions/cancel_order_by_client_order_id.rs index dbed0588..b6ca91d1 100644 --- a/programs/openbook-v2/src/instructions/cancel_order_by_client_order_id.rs +++ b/programs/openbook-v2/src/instructions/cancel_order_by_client_order_id.rs @@ -9,6 +9,10 @@ pub fn cancel_order_by_client_order_id( client_order_id: u64, ) -> Result<()> { let mut account = ctx.accounts.open_orders_account.load_mut()?; + require!( + account.is_owner_or_delegate(ctx.accounts.owner.key()), + OpenBookError::SomeError + ); let market = ctx.accounts.market.load()?; let mut book = Orderbook { diff --git a/programs/openbook-v2/src/instructions/place_order.rs b/programs/openbook-v2/src/instructions/place_order.rs index bff61008..feda78ed 100644 --- a/programs/openbook-v2/src/instructions/place_order.rs +++ b/programs/openbook-v2/src/instructions/place_order.rs @@ -18,6 +18,10 @@ pub fn place_order(ctx: Context, order: Order, limit: u8) -> Result< ); let mut open_orders_account = ctx.accounts.open_orders_account.load_mut()?; + require!( + open_orders_account.is_owner_or_delegate(ctx.accounts.owner_or_delegate.key()), + OpenBookError::NoOwnerOrDelegate + ); let open_orders_account_pk = ctx.accounts.open_orders_account.key(); let mut market = ctx.accounts.market.load_mut()?;