diff --git a/src/dexorder/contract/decimals.py b/src/dexorder/contract/decimals.py index 774fb5f..9bc7802 100644 --- a/src/dexorder/contract/decimals.py +++ b/src/dexorder/contract/decimals.py @@ -15,7 +15,7 @@ async def token_decimals(addr): try: decimals = await ERC20(addr).decimals() except CONTRACT_ERRORS: - log.warning(f'token {addr} has no decimals()') + log.debug(f'token {addr} has no decimals()') decimals = 0 except Exception: log.debug(f'could not get token decimals for {addr}') diff --git a/src/dexorder/order/orderstate.py b/src/dexorder/order/orderstate.py index 09085b0..2e1da82 100644 --- a/src/dexorder/order/orderstate.py +++ b/src/dexorder/order/orderstate.py @@ -127,7 +127,7 @@ class Order: key = a if b is None else OrderKey(a, b) assert key not in Order.instances self.key = key - self.status: ElaboratedSwapOrderStatus = Order.order_statuses[key].copy() + self._status: ElaboratedSwapOrderStatus = Order.order_statuses[key].copy() self.pool_address: str = pool_address(self.status.order) self.tranche_keys = [TrancheKey(key.vault, key.order_index, i) for i in range(len(self.status.trancheStatus))] # flattenings of various static data @@ -138,6 +138,14 @@ class Order: self.tranche_amounts = [t.fraction_of(self.amount) for t in self.order.tranches] Order.instances[self.key] = self + @property + def status(self): + return self._status + + @status.setter + def status(self, v): + self._status = Order.order_statuses[self.key] = v + @property def state(self): return self.status.state diff --git a/src/dexorder/order/triggers.py b/src/dexorder/order/triggers.py index 05da67a..e7858b0 100644 --- a/src/dexorder/order/triggers.py +++ b/src/dexorder/order/triggers.py @@ -210,10 +210,10 @@ class Trigger: async def has_funds(tk: TrancheKey): - log.debug(f'has funds? {tk.vault}') + # log.debug(f'has funds? {tk.vault}') order = Order.of(tk) balances = vault_balances.get(tk.vault, {}) - log.debug(f'balances {balances}') + # log.debug(f'balances {balances}') token_addr = order.status.order.tokenIn token_balance = balances.get(token_addr) log.debug(f'amount of {token_addr} = {token_balance}') @@ -256,6 +256,7 @@ class BalanceTrigger (Trigger): self.order = Order.of(self.tk) self.vault_token = self.tk.vault, self.order.status.order.tokenIn BalanceTrigger.by_vault_token[self.vault_token].add(self) + self._value_changed() # log.debug(f'initializing Balance Trigger {id(self)} {tk} {value} {self.value}') async def update(self, balance): @@ -268,6 +269,17 @@ class BalanceTrigger (Trigger): except (KeyError, ValueError): pass + def _value_changed(self): + ok = self.value + order = Order.of(self.tk) + old_state = order.status.state + if not ok and old_state == SwapOrderState.Open: + order.status = order.status.copy() + order.status.state = SwapOrderState.Underfunded + elif ok and old_state == SwapOrderState.Underfunded: + order.status = order.status.copy() + order.status.state = SwapOrderState.Open + class TimeTrigger (Trigger): diff --git a/src/dexorder/tokens.py b/src/dexorder/tokens.py index 4c82aeb..a85d678 100644 --- a/src/dexorder/tokens.py +++ b/src/dexorder/tokens.py @@ -91,8 +91,9 @@ async def load_token(address: str) -> Optional[OldTokenDict]: try: decimals = await dec_prom except CONTRACT_ERRORS: - log.warning(f'token {address} has no decimals()') + log.info(f'token {address} has no decimals()') decimals = 0 + return None # we do not support coins that don't specify decimals. approved = False # never approve new coins chain_id = current_chain.get().id symbol = await symbol_prom