Skip to content

Commit 07339e5

Browse files
authored
Changes to cancel API to support TWAPs better (#17652)
1 parent ec98152 commit 07339e5

File tree

2 files changed

+52
-42
lines changed

2 files changed

+52
-42
lines changed

aptos-move/framework/aptos-experimental/doc/order_operations.md

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ Parameters:
8787
);
8888
<b>if</b> (order.is_some()) {
8989
// Order is already placed in the order book, so we can cancel it
90-
<b>return</b> <a href="order_operations.md#0x7_order_operations_cancel_single_order_helper">cancel_single_order_helper</a>(market, order.destroy_some(), callbacks);
90+
<b>return</b> <a href="order_operations.md#0x7_order_operations_cancel_single_order_helper">cancel_single_order_helper</a>(market, order.destroy_some(), <b>true</b>, callbacks);
9191
};
9292
pre_cancel_order_for_tracker(
9393
market.get_pre_cancellation_tracker_mut(),
@@ -115,7 +115,7 @@ Parameters:
115115
- callbacks: The market clearinghouse callbacks for cleanup operations
116116

117117

118-
<pre><code><b>public</b> <b>fun</b> <a href="order_operations.md#0x7_order_operations_cancel_order">cancel_order</a>&lt;M: <b>copy</b>, drop, store&gt;(market: &<b>mut</b> <a href="market_types.md#0x7_market_types_Market">market_types::Market</a>&lt;M&gt;, <a href="../../aptos-framework/doc/account.md#0x1_account">account</a>: <b>address</b>, order_id: <a href="order_book_types.md#0x7_order_book_types_OrderIdType">order_book_types::OrderIdType</a>, callbacks: &<a href="market_types.md#0x7_market_types_MarketClearinghouseCallbacks">market_types::MarketClearinghouseCallbacks</a>&lt;M&gt;)
118+
<pre><code><b>public</b> <b>fun</b> <a href="order_operations.md#0x7_order_operations_cancel_order">cancel_order</a>&lt;M: <b>copy</b>, drop, store&gt;(market: &<b>mut</b> <a href="market_types.md#0x7_market_types_Market">market_types::Market</a>&lt;M&gt;, <a href="../../aptos-framework/doc/account.md#0x1_account">account</a>: <b>address</b>, order_id: <a href="order_book_types.md#0x7_order_book_types_OrderIdType">order_book_types::OrderIdType</a>, emit_event: bool, callbacks: &<a href="market_types.md#0x7_market_types_MarketClearinghouseCallbacks">market_types::MarketClearinghouseCallbacks</a>&lt;M&gt;): <a href="single_order_types.md#0x7_single_order_types_SingleOrder">single_order_types::SingleOrder</a>&lt;M&gt;
119119
</code></pre>
120120

121121

@@ -128,11 +128,13 @@ Parameters:
128128
market: &<b>mut</b> Market&lt;M&gt;,
129129
<a href="../../aptos-framework/doc/account.md#0x1_account">account</a>: <b>address</b>,
130130
order_id: OrderIdType,
131+
emit_event: bool,
131132
callbacks: &MarketClearinghouseCallbacks&lt;M&gt;
132-
) {
133+
): SingleOrder&lt;M&gt; {
133134
<b>let</b> order = market.get_order_book_mut().<a href="order_operations.md#0x7_order_operations_cancel_order">cancel_order</a>(<a href="../../aptos-framework/doc/account.md#0x1_account">account</a>, order_id);
134135
<b>assert</b>!(<a href="../../aptos-framework/doc/account.md#0x1_account">account</a> == order.get_account(), <a href="order_operations.md#0x7_order_operations_ENOT_ORDER_CREATOR">ENOT_ORDER_CREATOR</a>);
135-
<a href="order_operations.md#0x7_order_operations_cancel_single_order_helper">cancel_single_order_helper</a>(market, order, callbacks);
136+
<a href="order_operations.md#0x7_order_operations_cancel_single_order_helper">cancel_single_order_helper</a>(market, order, emit_event, callbacks);
137+
order
136138
}
137139
</code></pre>
138140

@@ -232,7 +234,7 @@ Parameters:
232234
- callbacks: The market clearinghouse callbacks for cleanup operations
233235

234236

235-
<pre><code><b>fun</b> <a href="order_operations.md#0x7_order_operations_cancel_single_order_helper">cancel_single_order_helper</a>&lt;M: <b>copy</b>, drop, store&gt;(market: &<b>mut</b> <a href="market_types.md#0x7_market_types_Market">market_types::Market</a>&lt;M&gt;, order: <a href="single_order_types.md#0x7_single_order_types_SingleOrder">single_order_types::SingleOrder</a>&lt;M&gt;, callbacks: &<a href="market_types.md#0x7_market_types_MarketClearinghouseCallbacks">market_types::MarketClearinghouseCallbacks</a>&lt;M&gt;)
237+
<pre><code><b>fun</b> <a href="order_operations.md#0x7_order_operations_cancel_single_order_helper">cancel_single_order_helper</a>&lt;M: <b>copy</b>, drop, store&gt;(market: &<b>mut</b> <a href="market_types.md#0x7_market_types_Market">market_types::Market</a>&lt;M&gt;, order: <a href="single_order_types.md#0x7_single_order_types_SingleOrder">single_order_types::SingleOrder</a>&lt;M&gt;, emit_event: bool, callbacks: &<a href="market_types.md#0x7_market_types_MarketClearinghouseCallbacks">market_types::MarketClearinghouseCallbacks</a>&lt;M&gt;)
236238
</code></pre>
237239

238240

@@ -244,6 +246,7 @@ Parameters:
244246
<pre><code><b>fun</b> <a href="order_operations.md#0x7_order_operations_cancel_single_order_helper">cancel_single_order_helper</a>&lt;M: store + <b>copy</b> + drop&gt;(
245247
market: &<b>mut</b> Market&lt;M&gt;,
246248
order: SingleOrder&lt;M&gt;,
249+
emit_event: bool,
247250
callbacks: &MarketClearinghouseCallbacks&lt;M&gt;
248251
) {
249252
<b>let</b> (
@@ -262,23 +265,25 @@ Parameters:
262265
cleanup_order_internal(
263266
<a href="../../aptos-framework/doc/account.md#0x1_account">account</a>, order_id, single_order_book_type(), is_bid, remaining_size, metadata, callbacks
264267
);
265-
market.emit_event_for_order(
266-
order_id,
267-
client_order_id,
268-
<a href="../../aptos-framework/doc/account.md#0x1_account">account</a>,
269-
orig_size,
270-
0,
271-
remaining_size,
272-
price,
273-
is_bid,
274-
<b>false</b>,
275-
aptos_experimental::market_types::order_status_cancelled(),
276-
std::string::utf8(b"Order cancelled"),
277-
metadata,
278-
<a href="../../aptos-framework/../aptos-stdlib/../move-stdlib/doc/option.md#0x1_option_none">option::none</a>(), // trigger_condition
279-
time_in_force,
280-
callbacks
281-
);
268+
<b>if</b> (emit_event) {
269+
market.emit_event_for_order(
270+
order_id,
271+
client_order_id,
272+
<a href="../../aptos-framework/doc/account.md#0x1_account">account</a>,
273+
orig_size,
274+
0,
275+
remaining_size,
276+
price,
277+
is_bid,
278+
<b>false</b>,
279+
aptos_experimental::market_types::order_status_cancelled(),
280+
std::string::utf8(b"Order cancelled"),
281+
metadata,
282+
<a href="../../aptos-framework/../aptos-stdlib/../move-stdlib/doc/option.md#0x1_option_none">option::none</a>(), // trigger_condition
283+
time_in_force,
284+
callbacks
285+
);
286+
}
282287
}
283288
</code></pre>
284289

aptos-move/framework/aptos-experimental/sources/trading/market/order_operations.move

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ module aptos_experimental::order_operations {
4343
);
4444
if (order.is_some()) {
4545
// Order is already placed in the order book, so we can cancel it
46-
return cancel_single_order_helper(market, order.destroy_some(), callbacks);
46+
return cancel_single_order_helper(market, order.destroy_some(), true, callbacks);
4747
};
4848
pre_cancel_order_for_tracker(
4949
market.get_pre_cancellation_tracker_mut(),
@@ -64,11 +64,13 @@ module aptos_experimental::order_operations {
6464
market: &mut Market<M>,
6565
account: address,
6666
order_id: OrderIdType,
67+
emit_event: bool,
6768
callbacks: &MarketClearinghouseCallbacks<M>
68-
) {
69+
): SingleOrder<M> {
6970
let order = market.get_order_book_mut().cancel_order(account, order_id);
7071
assert!(account == order.get_account(), ENOT_ORDER_CREATOR);
71-
cancel_single_order_helper(market, order, callbacks);
72+
cancel_single_order_helper(market, order, emit_event, callbacks);
73+
order
7274
}
7375

7476
/// Reduces the size of an existing order.
@@ -140,6 +142,7 @@ module aptos_experimental::order_operations {
140142
fun cancel_single_order_helper<M: store + copy + drop>(
141143
market: &mut Market<M>,
142144
order: SingleOrder<M>,
145+
emit_event: bool,
143146
callbacks: &MarketClearinghouseCallbacks<M>
144147
) {
145148
let (
@@ -158,23 +161,25 @@ module aptos_experimental::order_operations {
158161
cleanup_order_internal(
159162
account, order_id, single_order_book_type(), is_bid, remaining_size, metadata, callbacks
160163
);
161-
market.emit_event_for_order(
162-
order_id,
163-
client_order_id,
164-
account,
165-
orig_size,
166-
0,
167-
remaining_size,
168-
price,
169-
is_bid,
170-
false,
171-
aptos_experimental::market_types::order_status_cancelled(),
172-
std::string::utf8(b"Order cancelled"),
173-
metadata,
174-
option::none(), // trigger_condition
175-
time_in_force,
176-
callbacks
177-
);
164+
if (emit_event) {
165+
market.emit_event_for_order(
166+
order_id,
167+
client_order_id,
168+
account,
169+
orig_size,
170+
0,
171+
remaining_size,
172+
price,
173+
is_bid,
174+
false,
175+
aptos_experimental::market_types::order_status_cancelled(),
176+
std::string::utf8(b"Order cancelled"),
177+
metadata,
178+
option::none(), // trigger_condition
179+
time_in_force,
180+
callbacks
181+
);
182+
}
178183
}
179184

180185
}

0 commit comments

Comments
 (0)