Skip to content

Commit

Permalink
Revert "base & quote market vaults"
Browse files Browse the repository at this point in the history
  • Loading branch information
binyebarwe authored Jul 12, 2023
1 parent d169f95 commit 9843d36
Show file tree
Hide file tree
Showing 15 changed files with 111 additions and 201 deletions.
12 changes: 4 additions & 8 deletions lib/client/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -268,8 +268,7 @@ impl OpenBookClient {
expiry_timestamp: u64,
limit: u8,
token_deposit_account: Pubkey,
base_vault: Pubkey,
quote_vault: Pubkey,
market_vault: Pubkey,
self_trade_behavior: SelfTradeBehavior,
) -> anyhow::Result<Signature> {
let market = self.context.context(market_index);
Expand All @@ -288,8 +287,7 @@ impl OpenBookClient {
event_queue: market.market.event_queue,
oracle: market.market.oracle,
token_deposit_account,
base_vault,
quote_vault,
market_vault,
system_program: System::id(),
token_program: Token::id(),
},
Expand Down Expand Up @@ -325,8 +323,7 @@ impl OpenBookClient {
expiry_timestamp: u64,
limit: u8,
token_deposit_account: Pubkey,
base_vault: Pubkey,
quote_vault: Pubkey,
market_vault: Pubkey,
self_trade_behavior: SelfTradeBehavior,
max_oracle_staleness_slots: i32,
) -> anyhow::Result<Signature> {
Expand All @@ -346,8 +343,7 @@ impl OpenBookClient {
event_queue: market.market.event_queue,
oracle: market.market.oracle,
token_deposit_account,
base_vault,
quote_vault,
market_vault,
system_program: System::id(),
token_program: Token::id(),
},
Expand Down
13 changes: 6 additions & 7 deletions programs/openbook-v2/src/accounts_ix/place_order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pub struct PlaceOrder<'info> {

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

Expand All @@ -25,8 +25,6 @@ pub struct PlaceOrder<'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)]
Expand All @@ -35,10 +33,11 @@ pub struct PlaceOrder<'info> {
pub asks: AccountLoader<'info, BookSide>,
#[account(mut)]
pub event_queue: AccountLoader<'info, EventQueue>,
#[account(mut)]
pub base_vault: Account<'info, TokenAccount>,
#[account(mut)]
pub quote_vault: Account<'info, TokenAccount>,
#[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
pub oracle: UncheckedAccount<'info>,
Expand Down
18 changes: 8 additions & 10 deletions programs/openbook-v2/src/instructions/place_order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,50 +66,48 @@ pub fn place_order(ctx: Context<PlaceOrder>, order: Order, limit: u8) -> Result<
)?;

let position = &mut open_orders_account.position;
let (to_vault, deposit_amount) = match order.side {
let deposit_amount = match order.side {
Side::Bid => {
let free_quote = position.quote_free_native;

let max_quote_including_fees =
total_quote_taken_native + posted_quote_native as u64 + maker_fees;

let free_qty_to_lock = cmp::min(max_quote_including_fees, free_quote);
position.quote_free_native -= free_qty_to_lock;

let deposit_amount = max_quote_including_fees - free_qty_to_lock;

// Update market deposit total
position.quote_free_native -= free_qty_to_lock;
market.quote_deposit_total += deposit_amount;

(ctx.accounts.quote_vault.to_account_info(), deposit_amount)
deposit_amount
}

Side::Ask => {
let free_assets_native = position.base_free_native;
let max_base_native = total_base_taken_native + posted_base_native as u64;

let free_qty_to_lock = cmp::min(max_base_native, free_assets_native);
position.base_free_native -= free_qty_to_lock;

let deposit_amount = max_base_native - free_qty_to_lock;

// Update market deposit total
position.base_free_native -= free_qty_to_lock;
market.base_deposit_total += deposit_amount;

(ctx.accounts.base_vault.to_account_info(), deposit_amount)
deposit_amount
}
};

// Transfer funds
if deposit_amount > 0 {
let cpi_context = CpiContext::new(
ctx.accounts.token_program.to_account_info(),
Transfer {
from: ctx.accounts.token_deposit_account.to_account_info(),
to: to_vault,
to: ctx.accounts.market_vault.to_account_info(),
authority: ctx.accounts.owner_or_delegate.to_account_info(),
},
);
token::transfer(cpi_context, deposit_amount)?;
}

Ok(order_id)
}
4 changes: 4 additions & 0 deletions programs/openbook-v2/src/state/market.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,10 @@ impl Market {
.trim_matches(char::from(0))
}

pub fn is_market_vault(&self, pubkey: Pubkey) -> bool {
pubkey == self.quote_vault || pubkey == self.base_vault
}

pub fn gen_order_id(&mut self, side: Side, price_data: u64) -> u128 {
self.seq_num += 1;
orderbook::new_node_key(side, price_data, self.seq_num)
Expand Down
24 changes: 8 additions & 16 deletions programs/openbook-v2/tests/cases/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,7 @@ async fn test_simple_settle() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_1,
base_vault,
quote_vault,
market_vault: quote_vault,
side: Side::Bid,
price_lots,
max_base_lots: 1,
Expand All @@ -96,8 +95,7 @@ async fn test_simple_settle() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_0,
base_vault,
quote_vault,
market_vault: base_vault,
side: Side::Ask,
price_lots,
max_base_lots: 1,
Expand Down Expand Up @@ -247,8 +245,7 @@ async fn test_cancel_orders() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_1,
base_vault,
quote_vault,
market_vault: quote_vault,
side: Side::Bid,
price_lots,
max_base_lots: 1,
Expand All @@ -272,8 +269,7 @@ async fn test_cancel_orders() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_0,
base_vault,
quote_vault,
market_vault: base_vault,
side: Side::Ask,
price_lots,
max_base_lots: 1,
Expand Down Expand Up @@ -362,8 +358,7 @@ async fn test_cancel_orders() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_0,
base_vault,
quote_vault,
market_vault: base_vault,
side: Side::Ask,
price_lots,
max_base_lots: 1,
Expand Down Expand Up @@ -456,8 +451,7 @@ async fn test_cancel_orders() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_1,
base_vault,
quote_vault,
market_vault: quote_vault,
side: Side::Bid,
price_lots,
max_base_lots: 1,
Expand Down Expand Up @@ -537,8 +531,7 @@ async fn test_expired_orders() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_1,
base_vault,
quote_vault,
market_vault: quote_vault,
side: Side::Bid,
price_lots,
max_base_lots: 1,
Expand Down Expand Up @@ -574,8 +567,7 @@ async fn test_expired_orders() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_0,
base_vault,
quote_vault,
market_vault: base_vault,
side: Side::Ask,
price_lots,
max_base_lots: 1,
Expand Down
24 changes: 8 additions & 16 deletions programs/openbook-v2/tests/cases/test_crank.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,7 @@ async fn test_skip_missing_accounts() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_1,
base_vault,
quote_vault,
market_vault: quote_vault,
side: Side::Bid,
price_lots,
max_base_lots: 1,
Expand All @@ -98,8 +97,7 @@ async fn test_skip_missing_accounts() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_1,
base_vault,
quote_vault,
market_vault: quote_vault,
side: Side::Bid,
price_lots,
max_base_lots: 1,
Expand All @@ -122,8 +120,7 @@ async fn test_skip_missing_accounts() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_1,
base_vault,
quote_vault,
market_vault: quote_vault,
side: Side::Bid,
price_lots,
max_base_lots: 1,
Expand All @@ -146,8 +143,7 @@ async fn test_skip_missing_accounts() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_0,
base_vault,
quote_vault,
market_vault: base_vault,
side: Side::Ask,
price_lots,
max_base_lots: 3,
Expand Down Expand Up @@ -263,8 +259,7 @@ async fn test_crank_given_events() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_1,
base_vault,
quote_vault,
market_vault: quote_vault,
side: Side::Bid,
price_lots,
max_base_lots: 1,
Expand All @@ -287,8 +282,7 @@ async fn test_crank_given_events() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_1,
base_vault,
quote_vault,
market_vault: quote_vault,
side: Side::Bid,
price_lots,
max_base_lots: 1,
Expand All @@ -311,8 +305,7 @@ async fn test_crank_given_events() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_1,
base_vault,
quote_vault,
market_vault: quote_vault,
side: Side::Bid,
price_lots,
max_base_lots: 1,
Expand All @@ -335,8 +328,7 @@ async fn test_crank_given_events() -> Result<(), TransportError> {
market,
owner,
token_deposit_account: owner_token_0,
base_vault,
quote_vault,
market_vault: base_vault,
side: Side::Ask,
price_lots,
max_base_lots: 3,
Expand Down
Loading

0 comments on commit 9843d36

Please sign in to comment.