return order id from a perp place order ix (#417)

* return order id from a perp place order ix

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* fix

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* fixes from review

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
microwavedcola1 2023-01-25 09:03:35 +01:00 committed by GitHub
parent dae02885c2
commit 0192728efc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 36 additions and 13 deletions

View File

@ -47,7 +47,11 @@ pub struct PerpPlaceOrder<'info> {
// TODO // TODO
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
pub fn perp_place_order(ctx: Context<PerpPlaceOrder>, mut order: Order, limit: u8) -> Result<()> { pub fn perp_place_order(
ctx: Context<PerpPlaceOrder>,
mut order: Order,
limit: u8,
) -> Result<Option<u128>> {
require_gte!(order.max_base_lots, 0); require_gte!(order.max_base_lots, 0);
require_gte!(order.max_quote_lots, 0); require_gte!(order.max_quote_lots, 0);
@ -149,7 +153,7 @@ pub fn perp_place_order(ctx: Context<PerpPlaceOrder>, mut order: Order, limit: u
}; };
order.max_base_lots = max_base_lots; order.max_base_lots = max_base_lots;
book.new_order( let order_id_opt = book.new_order(
order, order,
&mut perp_market, &mut perp_market,
&mut event_queue, &mut event_queue,
@ -169,5 +173,5 @@ pub fn perp_place_order(ctx: Context<PerpPlaceOrder>, mut order: Order, limit: u
account.check_health_post(&health_cache, pre_health)?; account.check_health_post(&health_cache, pre_health)?;
} }
Ok(()) Ok(order_id_opt)
} }

View File

@ -592,7 +592,7 @@ pub mod mango_v4 {
// Use this to limit compute used during order matching. // Use this to limit compute used during order matching.
// When the limit is reached, processing stops and the instruction succeeds. // When the limit is reached, processing stops and the instruction succeeds.
limit: u8, limit: u8,
) -> Result<()> { ) -> Result<Option<u128>> {
require_gte!(price_lots, 0); require_gte!(price_lots, 0);
use crate::state::{Order, OrderParams}; use crate::state::{Order, OrderParams};
@ -600,7 +600,7 @@ pub mod mango_v4 {
Some(t) => t, Some(t) => t,
None => { None => {
msg!("Order is already expired"); msg!("Order is already expired");
return Ok(()); return Ok(None);
} }
}; };
let order = Order { let order = Order {
@ -660,7 +660,7 @@ pub mod mango_v4 {
// //
// WARNING: Not currently implemented. // WARNING: Not currently implemented.
max_oracle_staleness_slots: i32, max_oracle_staleness_slots: i32,
) -> Result<()> { ) -> Result<Option<u128>> {
require_gte!(peg_limit, -1); require_gte!(peg_limit, -1);
require_eq!(max_oracle_staleness_slots, -1); // unimplemented require_eq!(max_oracle_staleness_slots, -1); // unimplemented
@ -669,7 +669,7 @@ pub mod mango_v4 {
Some(t) => t, Some(t) => t,
None => { None => {
msg!("Order is already expired"); msg!("Order is already expired");
return Ok(()); return Ok(None);
} }
}; };
let order = Order { let order = Order {

View File

@ -51,7 +51,7 @@ impl<'a> Orderbook<'a> {
mango_account_pk: &Pubkey, mango_account_pk: &Pubkey,
now_ts: u64, now_ts: u64,
mut limit: u8, mut limit: u8,
) -> std::result::Result<(), Error> { ) -> std::result::Result<Option<u128>, Error> {
let side = order.side; let side = order.side;
let other_side = side.invert_side(); let other_side = side.invert_side();
let market = perp_market; let market = perp_market;
@ -269,7 +269,11 @@ impl<'a> Orderbook<'a> {
)?; )?;
} }
Ok(()) if post_target.is_some() {
Ok(Some(order_id))
} else {
Ok(None)
}
} }
/// Cancels up to `limit` orders that are listed on the mango account for the given perp market. /// Cancels up to `limit` orders that are listed on the mango account for the given perp market.

View File

@ -1919,6 +1919,9 @@ export class MangoClient {
.rpc(); .rpc();
} }
// perpPlaceOrder ix returns an optional, custom order id,
// but, since we use a customer tx sender, this method
// doesn't return it
public async perpPlaceOrder( public async perpPlaceOrder(
group: Group, group: Group,
mangoAccount: MangoAccount, mangoAccount: MangoAccount,

View File

@ -2975,7 +2975,10 @@ export type MangoV4 = {
"name": "limit", "name": "limit",
"type": "u8" "type": "u8"
} }
] ],
"returns": {
"option": "u128"
}
}, },
{ {
"name": "perpPlaceOrderPegged", "name": "perpPlaceOrderPegged",
@ -3070,7 +3073,10 @@ export type MangoV4 = {
"name": "maxOracleStalenessSlots", "name": "maxOracleStalenessSlots",
"type": "i32" "type": "i32"
} }
] ],
"returns": {
"option": "u128"
}
}, },
{ {
"name": "perpCancelOrder", "name": "perpCancelOrder",
@ -10920,7 +10926,10 @@ export const IDL: MangoV4 = {
"name": "limit", "name": "limit",
"type": "u8" "type": "u8"
} }
] ],
"returns": {
"option": "u128"
}
}, },
{ {
"name": "perpPlaceOrderPegged", "name": "perpPlaceOrderPegged",
@ -11015,7 +11024,10 @@ export const IDL: MangoV4 = {
"name": "maxOracleStalenessSlots", "name": "maxOracleStalenessSlots",
"type": "i32" "type": "i32"
} }
] ],
"returns": {
"option": "u128"
}
}, },
{ {
"name": "perpCancelOrder", "name": "perpCancelOrder",