diff --git a/src/dexorder/order/triggers.py b/src/dexorder/order/triggers.py index 589c9c5..7769e5e 100644 --- a/src/dexorder/order/triggers.py +++ b/src/dexorder/order/triggers.py @@ -104,8 +104,8 @@ async def update_balance_triggers(vault: str, token: str, balance: int): async def update_price_triggers(pool: OldPoolDict, price: dec): price = price * dec(10) ** dec(-pool['decimals']) # adjust for pool decimals to get onchain price price = float(price) # since we use SIMD operations to evaluate lines, we must convert to float - updates = [pt.update(price) for pt in PriceLineTrigger.by_pool.get(pool['address'], [])] - await asyncio.gather(*updates) + for pt in PriceLineTrigger.by_pool.get(pool['address'], []): + pt.update(price) inflight_execution_requests: set[TrancheKey] = set() @@ -162,10 +162,11 @@ class Trigger: def value(self, value): if value != self.value: _dirty.add(self.tk) + old = _trigger_state.get(self.tk,0) if not value: # this conditional is inverted - _trigger_state[self.tk] |= 1 << self.position # set + _trigger_state[self.tk] = old | (1 << self.position) # set else: - _trigger_state[self.tk] &= ~(1 << self.position) # clear + _trigger_state[self.tk] = old & ~(1 << self.position) # clear @abstractmethod def remove(self): ... @@ -350,7 +351,10 @@ class PriceLineTrigger (Trigger): self.value = value def remove(self): - PriceLineTrigger.by_pool[self.pool_address].remove(self) + try: + PriceLineTrigger.by_pool[self.pool_address].remove(self) + except KeyError: + pass async def activate_orders():