Perp: Drop client order id from LeafNodes (#323)
This saves 8 bytes and only the FillEvents, FillLogs were populated from the data.
This commit is contained in:
parent
3e7f5487b7
commit
450007d34b
|
@ -130,7 +130,6 @@ pub fn perp_consume_events(ctx: Context<PerpConsumeEvents>, limit: usize) -> Res
|
||||||
seq_num: fill.seq_num,
|
seq_num: fill.seq_num,
|
||||||
maker: fill.maker,
|
maker: fill.maker,
|
||||||
maker_order_id: fill.maker_order_id,
|
maker_order_id: fill.maker_order_id,
|
||||||
maker_client_order_id: fill.maker_client_order_id,
|
|
||||||
maker_fee: fill.maker_fee.to_bits(),
|
maker_fee: fill.maker_fee.to_bits(),
|
||||||
maker_timestamp: fill.maker_timestamp,
|
maker_timestamp: fill.maker_timestamp,
|
||||||
taker: fill.taker,
|
taker: fill.taker,
|
||||||
|
|
|
@ -100,7 +100,6 @@ pub struct FillLog {
|
||||||
|
|
||||||
pub maker: Pubkey,
|
pub maker: Pubkey,
|
||||||
pub maker_order_id: u128,
|
pub maker_order_id: u128,
|
||||||
pub maker_client_order_id: u64,
|
|
||||||
pub maker_fee: i128,
|
pub maker_fee: i128,
|
||||||
|
|
||||||
// Timestamp of when the maker order was placed; copied over from the LeafNode
|
// Timestamp of when the maker order was placed; copied over from the LeafNode
|
||||||
|
|
|
@ -811,6 +811,7 @@ impl<
|
||||||
side: Side,
|
side: Side,
|
||||||
order_tree: BookSideOrderTree,
|
order_tree: BookSideOrderTree,
|
||||||
order: &LeafNode,
|
order: &LeafNode,
|
||||||
|
client_order_id: u64,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let mut perp_account = self.perp_position_mut(perp_market_index)?;
|
let mut perp_account = self.perp_position_mut(perp_market_index)?;
|
||||||
match side {
|
match side {
|
||||||
|
@ -827,7 +828,7 @@ impl<
|
||||||
oo.market = perp_market_index;
|
oo.market = perp_market_index;
|
||||||
oo.side_and_tree = SideAndOrderTree::new(side, order_tree).into();
|
oo.side_and_tree = SideAndOrderTree::new(side, order_tree).into();
|
||||||
oo.id = order.key;
|
oo.id = order.key;
|
||||||
oo.client_id = order.client_order_id;
|
oo.client_id = client_order_id;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -180,7 +180,6 @@ impl<'a> Orderbook<'a> {
|
||||||
event_queue.header.seq_num,
|
event_queue.header.seq_num,
|
||||||
best_opposing.node.owner,
|
best_opposing.node.owner,
|
||||||
best_opposing.node.key,
|
best_opposing.node.key,
|
||||||
best_opposing.node.client_order_id,
|
|
||||||
market.maker_fee,
|
market.maker_fee,
|
||||||
best_opposing.node.timestamp,
|
best_opposing.node.timestamp,
|
||||||
*mango_account_pk,
|
*mango_account_pk,
|
||||||
|
@ -259,7 +258,6 @@ impl<'a> Orderbook<'a> {
|
||||||
order_id,
|
order_id,
|
||||||
*mango_account_pk,
|
*mango_account_pk,
|
||||||
book_base_quantity,
|
book_base_quantity,
|
||||||
order.client_order_id,
|
|
||||||
now_ts,
|
now_ts,
|
||||||
PostOrderType::Limit, // TODO: Support order types? needed?
|
PostOrderType::Limit, // TODO: Support order types? needed?
|
||||||
order.time_in_force,
|
order.time_in_force,
|
||||||
|
@ -284,6 +282,7 @@ impl<'a> Orderbook<'a> {
|
||||||
side,
|
side,
|
||||||
order_tree_target,
|
order_tree_target,
|
||||||
&new_order,
|
&new_order,
|
||||||
|
order.client_order_id,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -164,19 +164,8 @@ mod tests {
|
||||||
let mut order_tree = new_order_tree(order_tree_type);
|
let mut order_tree = new_order_tree(order_tree_type);
|
||||||
let mut root_fixed = OrderTreeRoot::zeroed();
|
let mut root_fixed = OrderTreeRoot::zeroed();
|
||||||
let mut root_pegged = OrderTreeRoot::zeroed();
|
let mut root_pegged = OrderTreeRoot::zeroed();
|
||||||
let new_leaf = |key: u128| {
|
let new_leaf =
|
||||||
LeafNode::new(
|
|key: u128| LeafNode::new(0, key, Pubkey::default(), 0, 1, PostOrderType::Limit, 0, -1);
|
||||||
0,
|
|
||||||
key,
|
|
||||||
Pubkey::default(),
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
PostOrderType::Limit,
|
|
||||||
0,
|
|
||||||
-1,
|
|
||||||
)
|
|
||||||
};
|
|
||||||
|
|
||||||
// add 100 leaves to each BookSide, mostly random
|
// add 100 leaves to each BookSide, mostly random
|
||||||
let mut keys = vec![];
|
let mut keys = vec![];
|
||||||
|
@ -266,7 +255,6 @@ mod tests {
|
||||||
key,
|
key,
|
||||||
Pubkey::default(),
|
Pubkey::default(),
|
||||||
0,
|
0,
|
||||||
0,
|
|
||||||
1000,
|
1000,
|
||||||
PostOrderType::Limit,
|
PostOrderType::Limit,
|
||||||
tif,
|
tif,
|
||||||
|
|
|
@ -383,7 +383,6 @@ mod tests {
|
||||||
assert_eq!(fill.quantity, match_quantity);
|
assert_eq!(fill.quantity, match_quantity);
|
||||||
assert_eq!(fill.price, price_lots);
|
assert_eq!(fill.price, price_lots);
|
||||||
assert_eq!(fill.taker_client_order_id, 43);
|
assert_eq!(fill.taker_client_order_id, 43);
|
||||||
assert_eq!(fill.maker_client_order_id, 42);
|
|
||||||
assert_eq!(fill.maker, maker_pk);
|
assert_eq!(fill.maker, maker_pk);
|
||||||
assert_eq!(fill.taker, taker_pk);
|
assert_eq!(fill.taker, taker_pk);
|
||||||
assert_eq!(fill.maker_fee, market.maker_fee);
|
assert_eq!(fill.maker_fee, market.maker_fee);
|
||||||
|
|
|
@ -140,7 +140,6 @@ pub struct LeafNode {
|
||||||
|
|
||||||
pub owner: Pubkey,
|
pub owner: Pubkey,
|
||||||
pub quantity: i64,
|
pub quantity: i64,
|
||||||
pub client_order_id: u64,
|
|
||||||
|
|
||||||
// The time the order was placed
|
// The time the order was placed
|
||||||
pub timestamp: u64,
|
pub timestamp: u64,
|
||||||
|
@ -148,11 +147,11 @@ pub struct LeafNode {
|
||||||
// Only applicable in the oracle_pegged OrderTree
|
// Only applicable in the oracle_pegged OrderTree
|
||||||
pub peg_limit: i64,
|
pub peg_limit: i64,
|
||||||
|
|
||||||
pub reserved: [u8; 32],
|
pub reserved: [u8; 40],
|
||||||
}
|
}
|
||||||
const_assert_eq!(
|
const_assert_eq!(
|
||||||
size_of::<LeafNode>(),
|
size_of::<LeafNode>(),
|
||||||
4 + 1 + 1 + 1 + 1 + 16 + 32 + 8 + 8 + 8 + 8 + 32
|
4 + 1 + 1 + 1 + 1 + 16 + 32 + 8 + 8 + 8 + 40
|
||||||
);
|
);
|
||||||
const_assert_eq!(size_of::<LeafNode>(), NODE_SIZE);
|
const_assert_eq!(size_of::<LeafNode>(), NODE_SIZE);
|
||||||
const_assert_eq!(size_of::<LeafNode>() % 8, 0);
|
const_assert_eq!(size_of::<LeafNode>() % 8, 0);
|
||||||
|
@ -164,7 +163,6 @@ impl LeafNode {
|
||||||
key: u128,
|
key: u128,
|
||||||
owner: Pubkey,
|
owner: Pubkey,
|
||||||
quantity: i64,
|
quantity: i64,
|
||||||
client_order_id: u64,
|
|
||||||
timestamp: u64,
|
timestamp: u64,
|
||||||
order_type: PostOrderType,
|
order_type: PostOrderType,
|
||||||
time_in_force: u16,
|
time_in_force: u16,
|
||||||
|
@ -180,10 +178,9 @@ impl LeafNode {
|
||||||
key,
|
key,
|
||||||
owner,
|
owner,
|
||||||
quantity,
|
quantity,
|
||||||
client_order_id,
|
|
||||||
timestamp,
|
timestamp,
|
||||||
peg_limit,
|
peg_limit,
|
||||||
reserved: [0; 32],
|
reserved: [0; 40],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -544,7 +544,6 @@ mod tests {
|
||||||
key,
|
key,
|
||||||
Pubkey::default(),
|
Pubkey::default(),
|
||||||
0,
|
0,
|
||||||
0,
|
|
||||||
expiry - 1,
|
expiry - 1,
|
||||||
PostOrderType::Limit,
|
PostOrderType::Limit,
|
||||||
1,
|
1,
|
||||||
|
@ -637,7 +636,6 @@ mod tests {
|
||||||
key,
|
key,
|
||||||
Pubkey::default(),
|
Pubkey::default(),
|
||||||
0,
|
0,
|
||||||
0,
|
|
||||||
expiry - 1,
|
expiry - 1,
|
||||||
PostOrderType::Limit,
|
PostOrderType::Limit,
|
||||||
1,
|
1,
|
||||||
|
|
|
@ -191,7 +191,6 @@ pub struct FillEvent {
|
||||||
|
|
||||||
pub maker: Pubkey,
|
pub maker: Pubkey,
|
||||||
pub maker_order_id: u128,
|
pub maker_order_id: u128,
|
||||||
pub maker_client_order_id: u64,
|
|
||||||
pub maker_fee: I80F48,
|
pub maker_fee: I80F48,
|
||||||
|
|
||||||
// Timestamp of when the maker order was placed; copied over from the LeafNode
|
// Timestamp of when the maker order was placed; copied over from the LeafNode
|
||||||
|
@ -204,7 +203,7 @@ pub struct FillEvent {
|
||||||
|
|
||||||
pub price: i64,
|
pub price: i64,
|
||||||
pub quantity: i64, // number of quote lots
|
pub quantity: i64, // number of quote lots
|
||||||
pub reserved: [u8; 16],
|
pub reserved: [u8; 24],
|
||||||
}
|
}
|
||||||
const_assert_eq!(size_of::<FillEvent>() % 8, 0);
|
const_assert_eq!(size_of::<FillEvent>() % 8, 0);
|
||||||
const_assert_eq!(size_of::<FillEvent>(), EVENT_SIZE);
|
const_assert_eq!(size_of::<FillEvent>(), EVENT_SIZE);
|
||||||
|
@ -219,7 +218,6 @@ impl FillEvent {
|
||||||
seq_num: u64,
|
seq_num: u64,
|
||||||
maker: Pubkey,
|
maker: Pubkey,
|
||||||
maker_order_id: u128,
|
maker_order_id: u128,
|
||||||
maker_client_order_id: u64,
|
|
||||||
maker_fee: I80F48,
|
maker_fee: I80F48,
|
||||||
maker_timestamp: u64,
|
maker_timestamp: u64,
|
||||||
|
|
||||||
|
@ -241,7 +239,6 @@ impl FillEvent {
|
||||||
seq_num,
|
seq_num,
|
||||||
maker,
|
maker,
|
||||||
maker_order_id,
|
maker_order_id,
|
||||||
maker_client_order_id,
|
|
||||||
maker_fee,
|
maker_fee,
|
||||||
maker_timestamp,
|
maker_timestamp,
|
||||||
taker,
|
taker,
|
||||||
|
@ -250,7 +247,7 @@ impl FillEvent {
|
||||||
taker_fee,
|
taker_fee,
|
||||||
price,
|
price,
|
||||||
quantity,
|
quantity,
|
||||||
reserved: [0; 16],
|
reserved: [0; 24],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -960,7 +960,6 @@ export interface FillEvent extends Event {
|
||||||
seqNum: BN;
|
seqNum: BN;
|
||||||
maker: PublicKey;
|
maker: PublicKey;
|
||||||
makerOrderId: BN;
|
makerOrderId: BN;
|
||||||
makerClientOrderId: BN;
|
|
||||||
makerFee: I80F48;
|
makerFee: I80F48;
|
||||||
makerTimestamp: BN;
|
makerTimestamp: BN;
|
||||||
taker: PublicKey;
|
taker: PublicKey;
|
||||||
|
|
|
@ -5442,10 +5442,6 @@ export type MangoV4 = {
|
||||||
"name": "quantity",
|
"name": "quantity",
|
||||||
"type": "i64"
|
"type": "i64"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "clientOrderId",
|
|
||||||
"type": "u64"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "timestamp",
|
"name": "timestamp",
|
||||||
"type": "u64"
|
"type": "u64"
|
||||||
|
@ -5459,7 +5455,7 @@ export type MangoV4 = {
|
||||||
"type": {
|
"type": {
|
||||||
"array": [
|
"array": [
|
||||||
"u8",
|
"u8",
|
||||||
32
|
40
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5654,10 +5650,6 @@ export type MangoV4 = {
|
||||||
"name": "makerOrderId",
|
"name": "makerOrderId",
|
||||||
"type": "u128"
|
"type": "u128"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "makerClientOrderId",
|
|
||||||
"type": "u64"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "makerFee",
|
"name": "makerFee",
|
||||||
"type": {
|
"type": {
|
||||||
|
@ -5699,7 +5691,7 @@ export type MangoV4 = {
|
||||||
"type": {
|
"type": {
|
||||||
"array": [
|
"array": [
|
||||||
"u8",
|
"u8",
|
||||||
16
|
24
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6506,11 +6498,6 @@ export type MangoV4 = {
|
||||||
"type": "u128",
|
"type": "u128",
|
||||||
"index": false
|
"index": false
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "makerClientOrderId",
|
|
||||||
"type": "u64",
|
|
||||||
"index": false
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "makerFee",
|
"name": "makerFee",
|
||||||
"type": "i128",
|
"type": "i128",
|
||||||
|
@ -12799,10 +12786,6 @@ export const IDL: MangoV4 = {
|
||||||
"name": "quantity",
|
"name": "quantity",
|
||||||
"type": "i64"
|
"type": "i64"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "clientOrderId",
|
|
||||||
"type": "u64"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "timestamp",
|
"name": "timestamp",
|
||||||
"type": "u64"
|
"type": "u64"
|
||||||
|
@ -12816,7 +12799,7 @@ export const IDL: MangoV4 = {
|
||||||
"type": {
|
"type": {
|
||||||
"array": [
|
"array": [
|
||||||
"u8",
|
"u8",
|
||||||
32
|
40
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13011,10 +12994,6 @@ export const IDL: MangoV4 = {
|
||||||
"name": "makerOrderId",
|
"name": "makerOrderId",
|
||||||
"type": "u128"
|
"type": "u128"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "makerClientOrderId",
|
|
||||||
"type": "u64"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "makerFee",
|
"name": "makerFee",
|
||||||
"type": {
|
"type": {
|
||||||
|
@ -13056,7 +13035,7 @@ export const IDL: MangoV4 = {
|
||||||
"type": {
|
"type": {
|
||||||
"array": [
|
"array": [
|
||||||
"u8",
|
"u8",
|
||||||
16
|
24
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13863,11 +13842,6 @@ export const IDL: MangoV4 = {
|
||||||
"type": "u128",
|
"type": "u128",
|
||||||
"index": false
|
"index": false
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "makerClientOrderId",
|
|
||||||
"type": "u64",
|
|
||||||
"index": false
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "makerFee",
|
"name": "makerFee",
|
||||||
"type": "i128",
|
"type": "i128",
|
||||||
|
|
Loading…
Reference in New Issue