From c648d38ab93d99b068e47b6fb7442d9175ae957c Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 4 Sep 2024 02:47:09 -0400 Subject: [PATCH] line trigger fixes --- src/dexorder/event_handler.py | 2 +- src/dexorder/order/orderstate.py | 2 ++ src/dexorder/order/triggers.py | 12 ++++++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/dexorder/event_handler.py b/src/dexorder/event_handler.py index 745662e..0e1e739 100644 --- a/src/dexorder/event_handler.py +++ b/src/dexorder/event_handler.py @@ -52,7 +52,7 @@ async def handle_order_placed(event: EventData): log.debug(f'raw order status {obj}') order = Order.create(addr, index, event['transactionHash'], obj) await activate_order(order) - log.debug(f'new order {order} {order.order}') + log.debug(f'new order{order}') def handle_swap_filled(event: EventData): diff --git a/src/dexorder/order/orderstate.py b/src/dexorder/order/orderstate.py index 92aad10..a19b5c3 100644 --- a/src/dexorder/order/orderstate.py +++ b/src/dexorder/order/orderstate.py @@ -280,6 +280,8 @@ class Order: 'of', db=True, redis=True, pub=pub_order_fills, str2key=OrderKey.str2key, value2str=lambda v: json.dumps(v.dump()), str2value=lambda s:OrderFilled.load(json.loads(s))) + def __str__(self): + return str(self.order) # "active" means the order wants to be executed now. this is not BlockData because it's cleared every block active_orders: dict[OrderKey,Order] = {} diff --git a/src/dexorder/order/triggers.py b/src/dexorder/order/triggers.py index 7769e5e..e80a280 100644 --- a/src/dexorder/order/triggers.py +++ b/src/dexorder/order/triggers.py @@ -153,6 +153,7 @@ class Trigger: self.position = position self.tk = tk self.value = value + _dirty.add(self.tk) @property def value(self): @@ -361,10 +362,11 @@ async def activate_orders(): log.debug('activating orders') # this is a state init callback, called only once after the state has been loaded from the db or created fresh keys = list(Order.open_orders) - orders = [Order.of(key) for key in keys] - for order in orders: + for key in keys: + order = Order.of(key) # setup triggers await activate_order(order) # too many to really parallelize, and it's startup anyway + # log.debug(f'activated {order}') log.debug(f'activated {len(keys)} orders') @@ -402,9 +404,11 @@ class TrancheTrigger: if tranche.marketOrder: min_trigger = max_trigger = None else: + pool = await get_pool(order.pool_address) + buy = pool['base'] == order.order.tokenOut min_trigger, max_trigger = await asyncio.gather( - PriceLineTrigger.create(tk, tranche.minLine, True, tranche.minIsBarrier), - PriceLineTrigger.create(tk, tranche.maxLine, True, tranche.maxIsBarrier)) + PriceLineTrigger.create(tk, tranche.minLine, True is buy, tranche.minIsBarrier), + PriceLineTrigger.create(tk, tranche.maxLine, False is buy, tranche.maxIsBarrier)) return TrancheTrigger(order, tk, balance_trigger, activation_trigger, expiration_trigger, min_trigger, max_trigger) def __init__(self, order: Order, tk: TrancheKey,