The GmxProxy contract uses a single queue structure to track GMX orders, which causes a contention condition where concurrent orders can overwrite each other's data. This design flaw can result in stuck positions or incorrect order executions.
This structure can only store one order at a time.
The createOrder and settle functions immediately overwrite the existing queue without checking the previous order status.
Only one order can be tracked in the afterOrderExecution function which may use data from an overwritten queue and the function deletes the queue without validation.
This will result in a stuck position if there are simultaneous orders because they overwrite each other's data.
The system can crash due to chaotic order tracking
Manual review
Implement multiple order tracking.
There is no real proof, concrete root cause, specific impact, or enough details in those submissions. Examples include: "It could happen" without specifying when, "If this impossible case happens," "Unexpected behavior," etc. Make a Proof of Concept (PoC) using external functions and realistic parameters. Do not test only the internal function where you think you found something.
Order is proceed one by one and requestKey is only used to cancelOrder. I didn’t see any real scenario where it will cause a problem. Flow and gmxLock will prevent that to happen.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.