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:
parent
dae02885c2
commit
0192728efc
|
@ -47,7 +47,11 @@ pub struct PerpPlaceOrder<'info> {
|
|||
|
||||
// TODO
|
||||
#[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_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;
|
||||
|
||||
book.new_order(
|
||||
let order_id_opt = book.new_order(
|
||||
order,
|
||||
&mut perp_market,
|
||||
&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)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
Ok(order_id_opt)
|
||||
}
|
||||
|
|
|
@ -592,7 +592,7 @@ pub mod mango_v4 {
|
|||
// Use this to limit compute used during order matching.
|
||||
// When the limit is reached, processing stops and the instruction succeeds.
|
||||
limit: u8,
|
||||
) -> Result<()> {
|
||||
) -> Result<Option<u128>> {
|
||||
require_gte!(price_lots, 0);
|
||||
|
||||
use crate::state::{Order, OrderParams};
|
||||
|
@ -600,7 +600,7 @@ pub mod mango_v4 {
|
|||
Some(t) => t,
|
||||
None => {
|
||||
msg!("Order is already expired");
|
||||
return Ok(());
|
||||
return Ok(None);
|
||||
}
|
||||
};
|
||||
let order = Order {
|
||||
|
@ -660,7 +660,7 @@ pub mod mango_v4 {
|
|||
//
|
||||
// WARNING: Not currently implemented.
|
||||
max_oracle_staleness_slots: i32,
|
||||
) -> Result<()> {
|
||||
) -> Result<Option<u128>> {
|
||||
require_gte!(peg_limit, -1);
|
||||
require_eq!(max_oracle_staleness_slots, -1); // unimplemented
|
||||
|
||||
|
@ -669,7 +669,7 @@ pub mod mango_v4 {
|
|||
Some(t) => t,
|
||||
None => {
|
||||
msg!("Order is already expired");
|
||||
return Ok(());
|
||||
return Ok(None);
|
||||
}
|
||||
};
|
||||
let order = Order {
|
||||
|
|
|
@ -51,7 +51,7 @@ impl<'a> Orderbook<'a> {
|
|||
mango_account_pk: &Pubkey,
|
||||
now_ts: u64,
|
||||
mut limit: u8,
|
||||
) -> std::result::Result<(), Error> {
|
||||
) -> std::result::Result<Option<u128>, Error> {
|
||||
let side = order.side;
|
||||
let other_side = side.invert_side();
|
||||
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.
|
||||
|
|
|
@ -1919,6 +1919,9 @@ export class MangoClient {
|
|||
.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(
|
||||
group: Group,
|
||||
mangoAccount: MangoAccount,
|
||||
|
|
|
@ -2975,7 +2975,10 @@ export type MangoV4 = {
|
|||
"name": "limit",
|
||||
"type": "u8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"returns": {
|
||||
"option": "u128"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "perpPlaceOrderPegged",
|
||||
|
@ -3070,7 +3073,10 @@ export type MangoV4 = {
|
|||
"name": "maxOracleStalenessSlots",
|
||||
"type": "i32"
|
||||
}
|
||||
]
|
||||
],
|
||||
"returns": {
|
||||
"option": "u128"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "perpCancelOrder",
|
||||
|
@ -10920,7 +10926,10 @@ export const IDL: MangoV4 = {
|
|||
"name": "limit",
|
||||
"type": "u8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"returns": {
|
||||
"option": "u128"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "perpPlaceOrderPegged",
|
||||
|
@ -11015,7 +11024,10 @@ export const IDL: MangoV4 = {
|
|||
"name": "maxOracleStalenessSlots",
|
||||
"type": "i32"
|
||||
}
|
||||
]
|
||||
],
|
||||
"returns": {
|
||||
"option": "u128"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "perpCancelOrder",
|
||||
|
|
Loading…
Reference in New Issue