Example #1
0
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)