Skip to main content
async def updateOpenOrder(
    marketId: int,
    orderId: int,
    initialMargin: float,
    leverage: float,
    priceThreshold: float,
):

    orders = await retrieveOrders()
    for i, order in enumerate(orders, 0):
        if order.order_id == orderId:
            retVal = order
    retVal.size = initialMargin
    retVal.leverage = leverage
    retVal.threshold_price = priceThreshold
    contract = retrieveContract()
    w3 = retrieveWeb3Instance()
    tick_units = await retrieveMarketTickDecimals(marketId)

    greatestOrderId = 0
    orders = await retrieveOrders()
    for i, order in enumerate(orders, 0):
        if order.market_id == marketId:
            if order.order_id > greatestOrderId:
                greatestOrderId = order.order_id

    transaction = contract.functions.updateOpenOrder(
        (
            marketId,
            orderId,
            convertFloatToUINT(initialMargin, USDC_DECIMALS),
            convertFloatToUINT(leverage, LEVERAGE_SCALAR),
            convertFloatToUINT(priceThreshold, tick_units),
        )
    ).build_transaction(
        {
            "from": Web3.to_checksum_address(os.getenv("ACCOUNT")),
            "nonce": w3.eth.get_transaction_count(
                Web3.to_checksum_address(os.getenv("ACCOUNT"))
            ),
            "gas": GAS_VALUE,
            "gasPrice": math.ceil(w3.eth.gas_price + (w3.eth.gas_price * 0.25)),
        }
    )

    await submitTransactionWithOracle(w3, transaction, marketId)
    count = 0
    found = False
    while found == False:
        orders = await retrieveOrders()
        for i, order in enumerate(orders, 0):
            if order.market_id == marketId:
                if order.order_id > greatestOrderId:
                    greatestOrderId = order.order_id
                    found = True
                    retVal = order
        if found == False:
            count += 1
            if count == 9:
                break
            time.sleep(5)
    if found:
        print(retVal)
        return retVal
    else:
        print("Max retry attempts reached")