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
|
// 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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Reference in New Issue