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
#[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)
}

View File

@ -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 {

View File

@ -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.

View File

@ -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,

View File

@ -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",