Skip to content

Commit

Permalink
Merge pull request #91 from openbook-dex/feature/constraints
Browse files Browse the repository at this point in the history
Feature/constraints
  • Loading branch information
binyebarwe authored Jul 5, 2023
2 parents ef88fe9 + d7b6bd2 commit 79663ea
Show file tree
Hide file tree
Showing 23 changed files with 93 additions and 130 deletions.
23 changes: 0 additions & 23 deletions programs/openbook-v2/src/accounts_ix/cancel_all_orders.rs

This file was deleted.

21 changes: 0 additions & 21 deletions programs/openbook-v2/src/accounts_ix/cancel_all_orders_by_side.rs

This file was deleted.

7 changes: 4 additions & 3 deletions programs/openbook-v2/src/accounts_ix/cancel_order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ use anchor_lang::prelude::*;

#[derive(Accounts)]
pub struct CancelOrder<'info> {
#[account(mut,
has_one = market,
#[account(
mut,
has_one = market
// also is_owner_or_delegate check inside ix
)]
pub open_orders_account: AccountLoader<'info, OpenOrdersAccount>,
pub owner: Signer<'info>,

#[account(
has_one = bids,
has_one = asks,
Expand Down

This file was deleted.

1 change: 0 additions & 1 deletion programs/openbook-v2/src/accounts_ix/consume_events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ pub struct ConsumeEvents<'info> {
has_one = event_queue,
)]
pub market: AccountLoader<'info, Market>,

#[account(mut)]
pub event_queue: AccountLoader<'info, EventQueue>,
}
21 changes: 16 additions & 5 deletions programs/openbook-v2/src/accounts_ix/deposit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,28 @@ use anchor_spl::token::{Token, TokenAccount};
#[derive(Accounts)]
pub struct Deposit<'info> {
pub owner: Signer<'info>,
#[account(mut)]
#[account(
mut,
token::mint = base_vault.mint
)]
pub token_base_account: Account<'info, TokenAccount>,
#[account(mut)]
#[account(
mut,
token::mint = quote_vault.mint
)]
pub token_quote_account: Account<'info, TokenAccount>,
#[account(mut,
#[account(
mut,
has_one = market,
)]
pub open_orders_account: AccountLoader<'info, OpenOrdersAccount>,
#[account(mut)]
pub market: AccountLoader<'info, Market>,

#[account(
mut,
has_one = base_vault,
has_one = quote_vault,
)]
pub market: AccountLoader<'info, Market>,
#[account(mut)]
pub base_vault: Account<'info, TokenAccount>,
#[account(mut)]
Expand Down
13 changes: 6 additions & 7 deletions programs/openbook-v2/src/accounts_ix/init_open_orders.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ use crate::state::{Market, OpenOrdersAccount};
#[derive(Accounts)]
#[instruction(account_num: u32)]
pub struct InitOpenOrders<'info> {
#[account(mut)]
pub payer: Signer<'info>,
#[account(mut)]
pub owner: Signer<'info>,
/// CHECK:
pub delegate_account: Option<UncheckedAccount<'info>>,
#[account(
init,
seeds = [b"OpenOrders".as_ref(), owner.key().as_ref(), market.key().as_ref(), &account_num.to_le_bytes()],
Expand All @@ -13,13 +19,6 @@ pub struct InitOpenOrders<'info> {
space = OpenOrdersAccount::space()?,
)]
pub open_orders_account: AccountLoader<'info, OpenOrdersAccount>,
#[account(mut)]
pub owner: Signer<'info>,
#[account(mut)]
pub payer: Signer<'info>,
/// CHECK:
pub delegate_account: Option<UncheckedAccount<'info>>,
#[account(mut)]
pub market: AccountLoader<'info, Market>,
pub system_program: Program<'info, System>,
}
6 changes: 0 additions & 6 deletions programs/openbook-v2/src/accounts_ix/mod.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
pub use cancel_all_orders::*;
pub use cancel_all_orders_by_side::*;
pub use cancel_order::*;
pub use cancel_order_by_client_order_id::*;
pub use close_market::*;
pub use consume_events::*;
pub use create_market::*;
Expand All @@ -18,10 +15,7 @@ pub use stub_oracle_create::*;
pub use stub_oracle_set::*;
pub use sweep_fees::*;

mod cancel_all_orders;
mod cancel_all_orders_by_side;
mod cancel_order;
mod cancel_order_by_client_order_id;
mod close_market;
mod consume_events;
mod create_market;
Expand Down
15 changes: 12 additions & 3 deletions programs/openbook-v2/src/accounts_ix/place_order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,19 @@ use anchor_spl::token::{Token, TokenAccount};

#[derive(Accounts)]
pub struct PlaceOrder<'info> {
#[account(mut,
#[account(
mut,
has_one = market,
// also is_owner_or_delegate check inside ix
)]
pub open_orders_account: AccountLoader<'info, OpenOrdersAccount>,
pub owner_or_delegate: Signer<'info>,
pub open_orders_admin: Option<Signer<'info>>,
#[account(mut)]

#[account(
mut,
constraint = token_deposit_account.mint == market_vault.mint
)]
pub token_deposit_account: Account<'info, TokenAccount>,

#[account(
Expand All @@ -27,7 +33,10 @@ pub struct PlaceOrder<'info> {
pub asks: AccountLoader<'info, BookSide>,
#[account(mut)]
pub event_queue: AccountLoader<'info, EventQueue>,
#[account(mut)]
#[account(
mut,
constraint = market.load()?.is_market_vault(market_vault.key())
)]
pub market_vault: Account<'info, TokenAccount>,

/// CHECK: The oracle can be one of several different account types and the pubkey is checked above
Expand Down
18 changes: 14 additions & 4 deletions programs/openbook-v2/src/accounts_ix/place_take_order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,33 @@ pub struct PlaceTakeOrder<'info> {
has_one = asks,
has_one = event_queue,
has_one = oracle,
has_one = base_vault,
has_one = quote_vault,
)]
pub market: AccountLoader<'info, Market>,
#[account(mut)]
pub bids: AccountLoader<'info, BookSide>,
#[account(mut)]
pub asks: AccountLoader<'info, BookSide>,
#[account(mut, constraint = token_deposit_account.owner == signer.key())]
pub token_deposit_account: Box<Account<'info, TokenAccount>>,
#[account(mut)]
pub token_receiver_account: Box<Account<'info, TokenAccount>>,
#[account(mut)]
pub base_vault: Account<'info, TokenAccount>,
#[account(mut)]
pub quote_vault: Account<'info, TokenAccount>,
#[account(mut)]
pub event_queue: AccountLoader<'info, EventQueue>,

#[account(
mut,
token::authority = signer.key(),
constraint = token_deposit_account.mint == base_vault.mint || token_deposit_account.mint == quote_vault.mint
)]
pub token_deposit_account: Box<Account<'info, TokenAccount>>,
#[account(
mut,
constraint = token_deposit_account.mint == base_vault.mint || token_deposit_account.mint == quote_vault.mint
)]
pub token_receiver_account: Box<Account<'info, TokenAccount>>,

/// CHECK: The oracle can be one of several different account types and the pubkey is checked above
pub oracle: UncheckedAccount<'info>,
pub token_program: Program<'info, Token>,
Expand Down
4 changes: 2 additions & 2 deletions programs/openbook-v2/src/accounts_ix/set_delegate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ use crate::state::OpenOrdersAccount;

#[derive(Accounts)]
pub struct SetDelegate<'info> {
#[account(mut)]
pub owner: Signer<'info>,
#[account(
mut,
has_one = owner,
)]
pub open_orders_account: AccountLoader<'info, OpenOrdersAccount>,
#[account(mut)]
pub owner: Signer<'info>,
/// CHECK:
pub delegate_account: Option<UncheckedAccount<'info>>,
}
22 changes: 17 additions & 5 deletions programs/openbook-v2/src/accounts_ix/settle_funds.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,33 @@ use anchor_spl::token::{Token, TokenAccount};
#[derive(Accounts)]
pub struct SettleFunds<'info> {
pub owner: Signer<'info>,
#[account(mut, has_one = owner,
#[account(
mut,
has_one = owner,
has_one = market,
)]
pub open_orders_account: AccountLoader<'info, OpenOrdersAccount>,
#[account(mut)]
pub market: AccountLoader<'info, Market>,

#[account(
mut,
has_one = base_vault,
has_one = quote_vault,
)]
pub market: AccountLoader<'info, Market>,
#[account(mut)]
pub base_vault: Account<'info, TokenAccount>,
#[account(mut)]
pub quote_vault: Account<'info, TokenAccount>,

#[account(mut)]
#[account(
mut,
token::mint = base_vault.mint
)]
pub token_base_account: Account<'info, TokenAccount>,
#[account(mut)]
#[account(
mut,
token::mint = quote_vault.mint
)]
pub token_quote_account: Account<'info, TokenAccount>,

pub token_program: Program<'info, Token>,
Expand Down
4 changes: 0 additions & 4 deletions programs/openbook-v2/src/accounts_ix/stub_oracle_close.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,13 @@ use crate::state::*;
#[derive(Accounts)]
pub struct StubOracleClose<'info> {
pub admin: Signer<'info>,

// match stub oracle to group
#[account(
mut,
close = sol_destination
)]
pub oracle: AccountLoader<'info, StubOracle>,

#[account(mut)]
/// CHECK: target for account rent needs no checks
pub sol_destination: UncheckedAccount<'info>,

pub token_program: Program<'info, Token>,
}
8 changes: 2 additions & 6 deletions programs/openbook-v2/src/accounts_ix/stub_oracle_create.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ use anchor_spl::token::Mint;

#[derive(Accounts)]
pub struct StubOracleCreate<'info> {
#[account(mut)]
pub payer: Signer<'info>,
#[account(
init,
seeds = [b"StubOracle".as_ref(), mint.key().as_ref()],
Expand All @@ -12,13 +14,7 @@ pub struct StubOracleCreate<'info> {
space = 8 + std::mem::size_of::<StubOracle>(),
)]
pub oracle: AccountLoader<'info, StubOracle>,

pub admin: Signer<'info>,

pub mint: Account<'info, Mint>,

#[account(mut)]
pub payer: Signer<'info>,

pub system_program: Program<'info, System>,
}
1 change: 0 additions & 1 deletion programs/openbook-v2/src/accounts_ix/stub_oracle_set.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ use anchor_lang::prelude::*;
#[derive(Accounts)]
pub struct StubOracleSet<'info> {
pub admin: Signer<'info>,

#[account(mut)]
pub oracle: AccountLoader<'info, StubOracle>,
}
16 changes: 10 additions & 6 deletions programs/openbook-v2/src/accounts_ix/sweep_fees.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,20 @@ use anchor_spl::token::{Token, TokenAccount};
#[derive(Accounts)]
pub struct SweepFees<'info> {
pub collect_fee_admin: Signer<'info>,

#[account(mut, has_one = collect_fee_admin)]
#[account(
mut,
has_one = quote_vault,
has_one = collect_fee_admin
)]
pub market: AccountLoader<'info, Market>,

#[account(mut)]
pub token_receiver_account: Account<'info, TokenAccount>,

#[account(mut)]
pub quote_vault: Account<'info, TokenAccount>,

#[account(
mut,
token::mint = quote_vault.mint
)]
pub token_receiver_account: Account<'info, TokenAccount>,
pub token_program: Program<'info, Token>,
pub system_program: Program<'info, System>,
}
3 changes: 1 addition & 2 deletions programs/openbook-v2/src/instructions/cancel_all_orders.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@ use crate::error::OpenBookError;
use crate::state::*;

pub fn cancel_all_orders(
ctx: Context<CancelAllOrders>,
ctx: Context<CancelOrder>,
side_option: Option<Side>,
limit: u8,
) -> Result<()> {
let mut account = ctx.accounts.open_orders_account.load_mut()?;
// account constraint #1
require!(
account.is_owner_or_delegate(ctx.accounts.owner.key()),
OpenBookError::NoOwnerOrDelegate
Expand Down
1 change: 0 additions & 1 deletion programs/openbook-v2/src/instructions/cancel_order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ pub fn cancel_order(ctx: Context<CancelOrder>, order_id: u128) -> Result<()> {
require_gt!(order_id, 0, OpenBookError::InvalidInputOrderId);

let mut account = ctx.accounts.open_orders_account.load_mut()?;
// account constraint #1
require!(
account.is_owner_or_delegate(ctx.accounts.owner.key()),
OpenBookError::NoOwnerOrDelegate
Expand Down
Loading

0 comments on commit 79663ea

Please sign in to comment.