async def record_cancel(contract, event_name, event): order = event["args"] order_maker = order["user"] signature = make_order_hash(order) date = datetime.fromtimestamp(block_timestamp(App().web3, event["blockNumber"]), tz=None) if "r" in order and order["r"] is not None: source = OrderSource.OFFCHAIN else: source = OrderSource.ONCHAIN upsert_args = ( source.name, Web3.toBytes(hexstr=signature), Web3.toBytes(hexstr=order["tokenGive"]), order["amountGive"], Web3.toBytes(hexstr=order["tokenGet"]), order["amountGet"], order["expires"], order["nonce"], Web3.toBytes(hexstr=order["user"]), OrderState.CANCELED.name, date, order["amountGet"], # Contract updates orderFills to amountGet when trade is cancelled date, 0 # Cancelled = 0 volume available ) async with App().db.acquire_connection() as connection: upsert_retval = await connection.execute(UPSERT_CANCELED_ORDER_STMT, *upsert_args) _, _, did_upsert = parse_insert_status(upsert_retval) if did_upsert: logger.debug("recorded order cancel signature=%s", signature) return bool(did_upsert)
async def process_order(contract, event_name, event): """ On Order event, record the order, then schedule a job to update the newly inserted order. """ order = event["args"] signature = make_order_hash(order) logger.debug("received order sig=%s", signature) did_insert = await record_order(order, event["blockNumber"]) if did_insert: logger.info("recorded order sig=%s", signature) update_order_by_signature(signature) else: logger.debug("duplicate order sig=%s", signature)