In perpetualVault contract, the run() function incorrectly handles position switching when transitioning between long and short positions. If been long does not match is long , the function first closes the existing position before opening the new one. However, if an unexpected failure occurs during position closure, the function will not reach the position opening step, potentially locking trading actions for affected users.
The function performs a forced position close before opening a new position, but it does not account for failure cases
If position closure fails, users cannot execute new trades, potentially causing financial losses.
Manual review
Foundry/Hardhat Testing – Simulation of failure cases forcing _createDecreasePosition() to fail
Validate that _createDecreasePosition() completes before updating nextAction.
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.
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.