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")