diff --git a/src/dexorder/bin/main.py b/src/dexorder/bin/main.py index 61ec5a2..7ee06e9 100644 --- a/src/dexorder/bin/main.py +++ b/src/dexorder/bin/main.py @@ -1,5 +1,4 @@ import logging -import sys from asyncio import CancelledError from dexorder import db, blockchain, config @@ -7,7 +6,6 @@ from dexorder.base.chain import current_chain from dexorder.bin.executable import execute from dexorder.blockstate.blockdata import BlockData from dexorder.blockstate.db_state import DbState -from dexorder.configuration import parse_args from dexorder.contract import get_contract_event from dexorder.contract.dexorder import get_factory_contract, get_dexorder_contract from dexorder.event_handler import init_order_triggers, init, dump_log, handle_vault_created, handle_order_placed, \ diff --git a/src/dexorder/event_handler.py b/src/dexorder/event_handler.py index b1125d1..3175aab 100644 --- a/src/dexorder/event_handler.py +++ b/src/dexorder/event_handler.py @@ -224,8 +224,16 @@ def process_active_tranches(): old_req = execution_requests.get(tk) height = current_block.get().height if old_req is None or old_req.height <= height: # '<=' is used so proof is updated with more recent values - log.info(f'execution request for {tk}') - execution_requests[tk] = ExecutionRequest(height, proof) + if has_funds(tk): + log.info(f'execution request for {tk}') + execution_requests[tk] = ExecutionRequest(height, proof) + else: log.debug(f'underfunded tranche {tk}') + + +def has_funds(tk: TrancheKey): + order = Order.of(tk) + minimum = order.status.order.minFillAmount if order.amount_is_input else 0 + return vault_balances.get(tk.vault,{}).get(order.status.order.tokenIn, 0) > minimum async def process_execution_requests(): diff --git a/src/dexorder/order/orderstate.py b/src/dexorder/order/orderstate.py index c71724d..77702cb 100644 --- a/src/dexorder/order/orderstate.py +++ b/src/dexorder/order/orderstate.py @@ -6,13 +6,12 @@ from typing import overload from dexorder import DELETE, db from dexorder.base.chain import current_chain from dexorder.base.order import OrderKey, TrancheKey -from dexorder.blockstate import BlockDict, BlockSet -from dexorder.vault_blockdata import vault_owners -from dexorder.database.model.orderindex import OrderIndex from dexorder.base.orderlib import SwapOrderStatus, SwapOrderState - +from dexorder.blockstate import BlockDict, BlockSet +from dexorder.database.model.orderindex import OrderIndex from dexorder.routing import pool_address from dexorder.util import json +from dexorder.vault_blockdata import vault_owners log = logging.getLogger(__name__) @@ -59,15 +58,15 @@ class Order: @staticmethod @overload - def of(key: OrderKey):... + def of(key: OrderKey) -> 'Order':... @staticmethod @overload - def of(vault: str, order_index: int):... + def of(vault: str, order_index: int) -> 'Order':... @staticmethod def of(a, b=None) -> 'Order': - key = a if b is None else OrderKey(a, b) + key = (OrderKey(a.vault, a.order_index) if type(a) is TrancheKey else a) if b is None else OrderKey(a, b) try: return Order.instances[key] except KeyError: