In LiquidationKeeper
contract, function checkUpkeep
is used to construct array of accounts to be liquidated if there is any need to liquidation. The constructed array is passed to performUpkeep
. The functions encodes wrong data and thus decoding in performUpKeep
will always fail.
In function checkUpkeep
, data encoding is done as follows. This data will be passed to performUpkeep
function if upkeepNeeded
is true
. If it's true
, that means some accounts needs to be liquidated.
In function performUpkeep
, the data decoding is done as:
The above line will always revert because performData
also contains address
in encoding. Due to this, performUpkeep
will always revert and no accounts can be liquidated.
The protocol will be unable to liquidate accounts that have breached their maintenance margins, potentially leading to increased bad debt and financial loss in the system.
Manual review
There is no need to add address(this)
in encoding in function checkUpkeep
. It can be rewritten as follows:
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.